compiler/libec: (#307, #70) Warning on undeclared class; Overriding namespaces
authorJerome St-Louis <jerome@ecere.com>
Sat, 5 Jul 2014 06:59:40 +0000 (02:59 -0400)
committerJerome St-Louis <jerome@ecere.com>
Sat, 5 Jul 2014 07:28:48 +0000 (03:28 -0400)
55 files changed:
compiler/bootstrap/ecc/bootstrap/ecc.c
compiler/bootstrap/ecere/bootstrap/BTNode.c
compiler/bootstrap/ecere/bootstrap/BinaryTree.c
compiler/bootstrap/ecere/bootstrap/BuiltInContainer.c
compiler/bootstrap/ecere/bootstrap/Container.c
compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c
compiler/bootstrap/ecere/bootstrap/DualPipe.c
compiler/bootstrap/ecere/bootstrap/File.c
compiler/bootstrap/ecere/bootstrap/Map.c
compiler/bootstrap/ecere/bootstrap/OldList.c
compiler/bootstrap/ecere/bootstrap/System.c
compiler/bootstrap/ecere/bootstrap/dataTypes.c
compiler/bootstrap/ecere/bootstrap/instance.c
compiler/bootstrap/ecp/bootstrap/ecp.c
compiler/bootstrap/ecs/bootstrap/ecs.c
compiler/bootstrap/libec/bootstrap/ast.c
compiler/bootstrap/libec/bootstrap/copy.c
compiler/bootstrap/libec/bootstrap/dbpass.c
compiler/bootstrap/libec/bootstrap/ecdefs.c
compiler/bootstrap/libec/bootstrap/expression.c
compiler/bootstrap/libec/bootstrap/firstPass.c
compiler/bootstrap/libec/bootstrap/freeAst.c
compiler/bootstrap/libec/bootstrap/grammar.c
compiler/bootstrap/libec/bootstrap/lexer.c
compiler/bootstrap/libec/bootstrap/loadSymbols.c
compiler/bootstrap/libec/bootstrap/output.c
compiler/bootstrap/libec/bootstrap/pass0.c
compiler/bootstrap/libec/bootstrap/pass1.c
compiler/bootstrap/libec/bootstrap/pass15.c
compiler/bootstrap/libec/bootstrap/pass16.c
compiler/bootstrap/libec/bootstrap/pass2.c
compiler/bootstrap/libec/bootstrap/pass3.c
compiler/bootstrap/libec/bootstrap/type.c
compiler/libec/src/ast.ec
compiler/libec/src/dbpass.ec
compiler/libec/src/ecdefs.ec
compiler/libec/src/expression.ec
compiler/libec/src/expression.y
compiler/libec/src/firstPass.ec
compiler/libec/src/grammar.ec
compiler/libec/src/grammar.y
compiler/libec/src/lexer.ec
compiler/libec/src/lexer.l
compiler/libec/src/loadSymbols.ec
compiler/libec/src/pass1.ec
compiler/libec/src/pass15.ec
compiler/libec/src/pass16.ec
compiler/libec/src/type.ec
compiler/libec/src/type.y
ecere/src/com/instance.ec
ecere/src/gfx/bitmaps/JPEGFormat.ec
ecere/src/gfx/drivers/OpenGLDisplayDriver.ec
ecere/src/sys/DualPipe.ec
ecere/src/sys/File.ec
ecere/src/sys/System.ec

index 5dbb796..e3d27c1 100644 (file)
@@ -845,6 +845,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__sys__OldList _excludedSymbols =
index b4b5c4f..2c627be 100644 (file)
@@ -136,289 +136,246 @@ struct __ecereNameSpace__ecere__sys__BTNode * parent, * left, * right;
 int depth;
 } __attribute__ ((gcc_struct));
 
-int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(struct __ecereNameSpace__ecere__sys__BTNode * this);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(struct __ecereNameSpace__ecere__sys__BTNode * this)
+{
+while(this->left)
+this = this->left;
+return this;
+}
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(struct __ecereNameSpace__ecere__sys__BTNode * this);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(struct __ecereNameSpace__ecere__sys__BTNode * this)
+{
+while(this->right)
+this = this->right;
+return this;
+}
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(struct __ecereNameSpace__ecere__sys__BTNode * this);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindString(struct __ecereNameSpace__ecere__sys__BTNode * this, const char * key)
+{
+while(this)
+{
+int result;
 
-int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count(struct __ecereNameSpace__ecere__sys__BTNode * this);
+if(key && this->key)
+result = strcmp(key, (const char *)this->key);
+else if(key && !this->key)
+result = 1;
+else if(!key && this->key)
+result = -1;
+else
+result = 0;
+if(result < 0)
+this = this->left;
+else if(result > 0)
+this = this->right;
+else
+break;
+}
+return this;
+}
 
-int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(struct __ecereNameSpace__ecere__sys__BTNode * this);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix(struct __ecereNameSpace__ecere__sys__BTNode * this, const char * key)
+{
+struct __ecereNameSpace__ecere__sys__BTNode * subString = (((void *)0));
+int len = key ? strlen(key) : 0;
 
-struct __ecereNameSpace__ecere__com__Class;
+while(this)
+{
+int result;
 
-struct __ecereNameSpace__ecere__com__Instance
+if(key && this->key)
+result = strcmp(key, (const char *)this->key);
+else if(key && !this->key)
+result = 1;
+else if(!key && this->key)
+result = -1;
+else
+result = 0;
+if(result < 0)
 {
-void * *  _vTbl;
-struct __ecereNameSpace__ecere__com__Class * _class;
-int _refCount;
-} __attribute__ ((gcc_struct));
+if(!strncmp(key, (const char *)this->key, len))
+subString = this;
+this = this->left;
+}
+else if(result > 0)
+this = this->right;
+else
+{
+subString = this;
+break;
+}
+}
+return subString;
+}
 
-extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BTNode * swap)
+{
+if(swap->left)
+{
+swap->left->parent = swap->parent;
+if(swap == swap->parent->left)
+swap->parent->left = swap->left;
+else if(swap == swap->parent->right)
+swap->parent->right = swap->left;
+swap->left = (((void *)0));
+}
+if(swap->right)
+{
+swap->right->parent = swap->parent;
+if(swap == swap->parent->left)
+swap->parent->left = swap->right;
+else if(swap == swap->parent->right)
+swap->parent->right = swap->right;
+swap->right = (((void *)0));
+}
+if(swap == swap->parent->left)
+swap->parent->left = (((void *)0));
+else if(swap == swap->parent->right)
+swap->parent->right = (((void *)0));
+{
+struct __ecereNameSpace__ecere__sys__BTNode * n;
 
-extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
+for(n = swap->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
 
-extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+if(n == this)
+break;
+}
+}
+{
+swap->left = this->left;
+if(this->left)
+this->left->parent = swap;
+}
+{
+swap->right = this->right;
+if(this->right)
+this->right->parent = swap;
+}
+swap->parent = this->parent;
+this->left = (((void *)0));
+this->right = (((void *)0));
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = swap;
+else if(this == this->parent->right)
+this->parent->right = swap;
+}
+}
 
-extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, const char *  string, long long value);
+int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(struct __ecereNameSpace__ecere__sys__BTNode * this)
+{
+int leftDepth = this->left ? (this->left->depth + 1) : 0;
+int rightDepth = this->right ? (this->right->depth + 1) : 0;
 
-extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_AddProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  dataType, void *  setStmt, void *  getStmt, int declMode);
+return rightDepth - leftDepth;
+}
 
-struct __ecereNameSpace__ecere__com__Property
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-struct __ecereNameSpace__ecere__com__Property * prev;
-struct __ecereNameSpace__ecere__com__Property * next;
-const char *  name;
-unsigned int isProperty;
-int memberAccess;
-int id;
-struct __ecereNameSpace__ecere__com__Class * _class;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-void (*  Set)(void * , int);
-int (*  Get)(void * );
-unsigned int (*  IsSet)(void * );
-void *  data;
-void *  symbol;
-int vid;
-unsigned int conversion;
-unsigned int watcherOffset;
-const char *  category;
-unsigned int compiled;
-unsigned int selfWatchable;
-unsigned int isWatchable;
-} __attribute__ ((gcc_struct));
+int __simpleStruct2, __simpleStruct3;
+int __simpleStruct0, __simpleStruct1;
 
-extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = this->left;
+else if(this == this->parent->right)
+this->parent->right = this->left;
+}
+this->left->parent = this->parent;
+this->parent = this->left;
+this->left = this->parent->right;
+if(this->left)
+this->left->parent = this;
+this->parent->right = this;
+this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+{
+struct __ecereNameSpace__ecere__sys__BTNode * n;
 
-extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
+for(n = this->parent->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
 
-extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+}
+}
+}
 
-extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
+{
+int __simpleStruct2, __simpleStruct3;
+int __simpleStruct0, __simpleStruct1;
 
-extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+if(this->parent)
+{
+if(this == this->parent->right)
+this->parent->right = this->right;
+else if(this == this->parent->left)
+this->parent->left = this->right;
+}
+this->right->parent = this->parent;
+this->parent = this->right;
+this->right = this->parent->left;
+if(this->right)
+this->right->parent = this;
+this->parent->left = this;
+this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+{
+struct __ecereNameSpace__ecere__sys__BTNode * n;
 
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data);
+for(n = this->parent->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
 
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * *  data);
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+}
+}
+}
 
-struct __ecereNameSpace__ecere__sys__StringBTNode;
+int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(struct __ecereNameSpace__ecere__sys__BTNode * this);
 
-struct __ecereNameSpace__ecere__sys__StringBTNode
-{
-char * key;
-struct __ecereNameSpace__ecere__sys__StringBTNode * parent, * left, * right;
-int depth;
-} __attribute__ ((gcc_struct));
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(struct __ecereNameSpace__ecere__sys__BTNode * this);
 
-struct __ecereNameSpace__ecere__sys__BinaryTree;
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(struct __ecereNameSpace__ecere__sys__BTNode * this);
 
-struct __ecereNameSpace__ecere__sys__BinaryTree
-{
-struct __ecereNameSpace__ecere__sys__BTNode * root;
-int count;
-int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
-void (*  FreeKey)(void *  key);
-} __attribute__ ((gcc_struct));
+int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count(struct __ecereNameSpace__ecere__sys__BTNode * this);
 
-struct __ecereNameSpace__ecere__com__DataMember;
-
-struct __ecereNameSpace__ecere__com__DataMember
-{
-struct __ecereNameSpace__ecere__com__DataMember * prev;
-struct __ecereNameSpace__ecere__com__DataMember * next;
-const char *  name;
-unsigned int isProperty;
-int memberAccess;
-int id;
-struct __ecereNameSpace__ecere__com__Class * _class;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int type;
-int offset;
-int memberID;
-struct __ecereNameSpace__ecere__sys__OldList members;
-struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
-int memberOffset;
-short structAlignment;
-short pointerAlignment;
-} __attribute__ ((gcc_struct));
-
-extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
-
-struct __ecereNameSpace__ecere__com__Method;
-
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument
-{
-union
-{
-struct
-{
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-} __attribute__ ((gcc_struct)) __anon1;
-struct __ecereNameSpace__ecere__com__DataValue expression;
-struct
-{
-const char *  memberString;
-union
-{
-struct __ecereNameSpace__ecere__com__DataMember * member;
-struct __ecereNameSpace__ecere__com__Property * prop;
-struct __ecereNameSpace__ecere__com__Method * method;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct)) __anon2;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Method
-{
-const char *  name;
-struct __ecereNameSpace__ecere__com__Method * parent;
-struct __ecereNameSpace__ecere__com__Method * left;
-struct __ecereNameSpace__ecere__com__Method * right;
-int depth;
-int (*  function)();
-int vid;
-int type;
-struct __ecereNameSpace__ecere__com__Class * _class;
-void *  symbol;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int memberAccess;
-} __attribute__ ((gcc_struct));
-
-extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
-
-struct __ecereNameSpace__ecere__com__Module;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
-
-extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
-
-extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char *  name, const char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
-
-struct __ecereNameSpace__ecere__com__NameSpace;
+int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(struct __ecereNameSpace__ecere__sys__BTNode * this);
 
-struct __ecereNameSpace__ecere__com__NameSpace
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-const char *  name;
-struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
-struct __ecereNameSpace__ecere__com__NameSpace *  left;
-struct __ecereNameSpace__ecere__com__NameSpace *  right;
-int depth;
-struct __ecereNameSpace__ecere__com__NameSpace *  parent;
-struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
-struct __ecereNameSpace__ecere__sys__BinaryTree classes;
-struct __ecereNameSpace__ecere__sys__BinaryTree defines;
-struct __ecereNameSpace__ecere__sys__BinaryTree functions;
-} __attribute__ ((gcc_struct));
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this->left);
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this);
+}
 
-struct __ecereNameSpace__ecere__com__Class
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-struct __ecereNameSpace__ecere__com__Class * prev;
-struct __ecereNameSpace__ecere__com__Class * next;
-const char *  name;
-int offset;
-int structSize;
-void * *  _vTbl;
-int vTblSize;
-unsigned int (*  Constructor)(void * );
-void (*  Destructor)(void * );
-int offsetClass;
-int sizeClass;
-struct __ecereNameSpace__ecere__com__Class * base;
-struct __ecereNameSpace__ecere__sys__BinaryTree methods;
-struct __ecereNameSpace__ecere__sys__BinaryTree members;
-struct __ecereNameSpace__ecere__sys__BinaryTree prop;
-struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
-struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
-struct __ecereNameSpace__ecere__sys__OldList derivatives;
-int memberID;
-int startMemberID;
-int type;
-struct __ecereNameSpace__ecere__com__Instance * module;
-struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int typeSize;
-int defaultAlignment;
-void (*  Initialize)();
-int memberOffset;
-struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
-const char *  designerClass;
-unsigned int noExpansion;
-const char *  defaultProperty;
-unsigned int comRedefinition;
-int count;
-int isRemote;
-unsigned int internalDecl;
-void *  data;
-unsigned int computeSize;
-short structAlignment;
-short pointerAlignment;
-int destructionWatchOffset;
-unsigned int fixed;
-struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
-int inheritanceAccess;
-const char *  fullName;
-void *  symbol;
-struct __ecereNameSpace__ecere__sys__OldList conversions;
-struct __ecereNameSpace__ecere__sys__OldList templateParams;
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
-struct __ecereNameSpace__ecere__com__Class * templateClass;
-struct __ecereNameSpace__ecere__sys__OldList templatized;
-int numParams;
-unsigned int isInstanceClass;
-unsigned int byValueSystemClass;
-} __attribute__ ((gcc_struct));
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this->right);
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this);
+}
 
-struct __ecereNameSpace__ecere__com__Application
+int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-int argc;
-const char * *  argv;
-int exitCode;
-unsigned int isGUIApp;
-struct __ecereNameSpace__ecere__sys__OldList allModules;
-char *  parsedCommand;
-struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
-} __attribute__ ((gcc_struct));
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TreePrintStyle;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__StringBTNode;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_bool;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_String;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+int leftDepth = this->left ? (__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(this->left) + 1) : 0;
+int rightDepth = this->right ? (__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(this->right) + 1) : 0;
 
-struct __ecereNameSpace__ecere__com__Module
-{
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-} __attribute__ ((gcc_struct));
+return ((leftDepth > rightDepth) ? leftDepth : rightDepth);
+}
 
 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_prev(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
@@ -452,46 +409,211 @@ this = parent;
 return (((void *)0));
 }
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-while(this->left)
-this = this->left;
-return this;
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-while(this->right)
-this = this->right;
-return this;
-}
-
 int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
 return 1 + (this->left ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count(this->left) : 0) + (this->right ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count(this->right) : 0);
 }
 
-int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(struct __ecereNameSpace__ecere__sys__BTNode * this)
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-int leftDepth = this->left ? (__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(this->left) + 1) : 0;
-int rightDepth = this->right ? (__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_depthProp(this->right) + 1) : 0;
+while(1)
+{
+int factor = __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this);
 
-return ((leftDepth > rightDepth) ? leftDepth : rightDepth);
+if(factor < -1)
+{
+if(__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this->left) == 1)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateRight(this);
+else
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this);
 }
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Add(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, struct __ecereNameSpace__ecere__sys__BTNode * node)
+else if(factor > 1)
 {
-uintptr_t newKey = node->key;
+if(__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this->right) == -1)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateLeft(this);
+else
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this);
+}
+if(this->parent)
+this = this->parent;
+else
+return this;
+}
+}
 
-while(1)
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
 {
-int result = tree->CompareKey(tree, newKey, this->key);
+struct __ecereNameSpace__ecere__sys__BTNode * swap = this->left ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(this->left) : this->right;
+struct __ecereNameSpace__ecere__sys__BTNode * swapParent = (((void *)0));
 
-if(!result)
+if(swap)
 {
-return 0;
+swapParent = swap->parent;
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(this, swap);
 }
-else if(result > 0)
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = (((void *)0));
+else if(this == this->parent->right)
+this->parent->right = (((void *)0));
+}
+{
+struct __ecereNameSpace__ecere__sys__BTNode * n;
+
+for(n = swap ? swap : this->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth && n != swap)
+break;
+n->depth = newDepth;
+}
+}
+if(swapParent && swapParent != this)
+return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swapParent);
+else if(swap)
+return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swap);
+else if(this->parent)
+return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(this->parent);
+else
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
+{
+struct __ecereNameSpace__ecere__sys__BTNode * result;
+struct __ecereNameSpace__ecere__sys__BTNode * swap = this->right ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(this->right) : this->left;
+struct __ecereNameSpace__ecere__sys__BTNode * swapParent = (((void *)0));
+
+if(swap)
+{
+swapParent = swap->parent;
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(this, swap);
+}
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = (((void *)0));
+else if(this == this->parent->right)
+this->parent->right = (((void *)0));
+}
+{
+struct __ecereNameSpace__ecere__sys__BTNode * n;
+
+for(n = swap ? swap : this->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth && n != swap)
+break;
+n->depth = newDepth;
+}
+}
+if(swapParent && swapParent != this)
+result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swapParent);
+else if(swap)
+result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swap);
+else if(this->parent)
+result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(this->parent);
+else
+result = (((void *)0));
+return result;
+}
+
+struct __ecereNameSpace__ecere__com__Class;
+
+struct __ecereNameSpace__ecere__com__Instance
+{
+void * *  _vTbl;
+struct __ecereNameSpace__ecere__com__Class * _class;
+int _refCount;
+} __attribute__ ((gcc_struct));
+
+extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
+
+extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
+
+extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
+
+extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, const char *  string, long long value);
+
+extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_AddProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  dataType, void *  setStmt, void *  getStmt, int declMode);
+
+struct __ecereNameSpace__ecere__com__Property
+{
+struct __ecereNameSpace__ecere__com__Property * prev;
+struct __ecereNameSpace__ecere__com__Property * next;
+const char *  name;
+unsigned int isProperty;
+int memberAccess;
+int id;
+struct __ecereNameSpace__ecere__com__Class * _class;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+void (*  Set)(void * , int);
+int (*  Get)(void * );
+unsigned int (*  IsSet)(void * );
+void *  data;
+void *  symbol;
+int vid;
+unsigned int conversion;
+unsigned int watcherOffset;
+const char *  category;
+unsigned int compiled;
+unsigned int selfWatchable;
+unsigned int isWatchable;
+} __attribute__ ((gcc_struct));
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
+
+extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
+
+extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data);
+
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * *  data);
+
+struct __ecereNameSpace__ecere__sys__StringBTNode;
+
+struct __ecereNameSpace__ecere__sys__StringBTNode
+{
+char * key;
+struct __ecereNameSpace__ecere__sys__StringBTNode * parent, * left, * right;
+int depth;
+} __attribute__ ((gcc_struct));
+
+struct __ecereNameSpace__ecere__sys__BinaryTree;
+
+struct __ecereNameSpace__ecere__sys__BinaryTree
+{
+struct __ecereNameSpace__ecere__sys__BTNode * root;
+int count;
+int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
+void (*  FreeKey)(void *  key);
+} __attribute__ ((gcc_struct));
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Add(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, struct __ecereNameSpace__ecere__sys__BTNode * node)
+{
+uintptr_t newKey = node->key;
+
+while(1)
+{
+int result = tree->CompareKey(tree, newKey, this->key);
+
+if(!result)
+{
+return 0;
+}
+else if(result > 0)
 {
 if(this->right)
 this = this->right;
@@ -560,202 +682,304 @@ break;
 return this;
 }
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindString(struct __ecereNameSpace__ecere__sys__BTNode * this, const char * key)
-{
-while(this)
-{
-int result;
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(struct __ecereNameSpace__ecere__sys__BTNode *  this, struct __ecereNameSpace__ecere__sys__BTNode *  node);
 
-if(key && this->key)
-result = strcmp(key, (const char *)this->key);
-else if(key && !this->key)
-result = 1;
-else if(!key && this->key)
-result = -1;
-else
-result = 0;
-if(result < 0)
-this = this->left;
-else if(result > 0)
-this = this->right;
-else
-break;
-}
-return this;
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
+{
+if(this == node)
+return 1;
+else if(this->left && __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(this->left, node))
+return 1;
+else if(this->right && __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(this->right, node))
+return 1;
+return 0;
 }
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix(struct __ecereNameSpace__ecere__sys__BTNode * this, const char * key)
-{
-struct __ecereNameSpace__ecere__sys__BTNode * subString = (((void *)0));
-int len = key ? strlen(key) : 0;
+struct __ecereNameSpace__ecere__sys__BTNode *  __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode *  this, uintptr_t key);
 
-while(this)
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode * this, uintptr_t key)
 {
-int result;
+struct __ecereNameSpace__ecere__sys__BTNode * result = (((void *)0));
 
-if(key && this->key)
-result = strcmp(key, (const char *)this->key);
-else if(key && !this->key)
-result = 1;
-else if(!key && this->key)
-result = -1;
-else
-result = 0;
-if(result < 0)
-{
-if(!strncmp(key, (const char *)this->key, len))
-subString = this;
-this = this->left;
-}
-else if(result > 0)
-this = this->right;
-else
-{
-subString = this;
-break;
-}
-}
-return subString;
+if(this->key == key)
+result = this;
+if(!result && this->left)
+result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->left, key);
+if(!result && this->right)
+result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->right, key);
+return result;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BTNode * swap)
+char *  __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(struct __ecereNameSpace__ecere__sys__BTNode *  this, char *  output, int tps);
+
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(struct __ecereNameSpace__ecere__sys__BTNode *  this, char *  output, int wantedDepth, int curDepth, int maxDepth, unsigned int last);
+
+char * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(struct __ecereNameSpace__ecere__sys__BTNode * this, char * output, int tps)
 {
-if(swap->left)
+switch(tps)
 {
-swap->left->parent = swap->parent;
-if(swap == swap->parent->left)
-swap->parent->left = swap->left;
-else if(swap == swap->parent->right)
-swap->parent->right = swap->left;
-swap->left = (((void *)0));
-}
-if(swap->right)
+case 0:
+case 2:
+case 1:
 {
-swap->right->parent = swap->parent;
-if(swap == swap->parent->left)
-swap->parent->left = swap->right;
-else if(swap == swap->parent->right)
-swap->parent->right = swap->right;
-swap->right = (((void *)0));
+if(tps == 2)
+__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
+if(this->left)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->left, output, tps);
+if(tps == 0)
+__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
+if(this->right)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->right, output, tps);
+if(tps == 1)
+__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
+return output;
 }
-if(swap == swap->parent->left)
-swap->parent->left = (((void *)0));
-else if(swap == swap->parent->right)
-swap->parent->right = (((void *)0));
+case 3:
 {
-struct __ecereNameSpace__ecere__sys__BTNode * n;
+int maxDepth = this->depth;
+int curDepth;
 
-for(n = swap->parent; n; n = n->parent)
+for(curDepth = 0; curDepth <= maxDepth; curDepth++)
 {
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+int c;
 
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
-if(n == this)
-break;
+for(c = 0; c < ((1 << (maxDepth - curDepth)) - 1) * 4 / 2; c++)
+strcat(output, " ");
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(this, output, curDepth, 0, maxDepth, 1);
+strcat(output, "\n");
 }
+return output;
 }
-{
-swap->left = this->left;
-if(this->left)
-this->left->parent = swap;
 }
+return (((void *)0));
+}
+
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(struct __ecereNameSpace__ecere__sys__BTNode * this, char * output, int wantedDepth, int curDepth, int maxDepth, unsigned int last)
 {
-swap->right = this->right;
-if(this->right)
-this->right->parent = swap;
+int c;
+
+if(wantedDepth == curDepth)
+{
+char nodeString[10] = "";
+int len;
+
+if(this)
+sprintf(nodeString, "%d", (int)this->key);
+len = strlen(nodeString);
+for(c = 0; c < (4 - len) / 2; c++)
+strcat(output, " ");
+len += c;
+strcat(output, nodeString);
+for(c = len; c < 4; c++)
+strcat(output, " ");
+if(curDepth && !last)
+{
+for(c = 0; c < ((1 << (maxDepth - curDepth)) - 1) * 4; c++)
+strcat(output, " ");
 }
-swap->parent = this->parent;
-this->left = (((void *)0));
-this->right = (((void *)0));
-if(this->parent)
+}
+else if(curDepth <= maxDepth)
 {
-if(this == this->parent->left)
-this->parent->left = swap;
-else if(this == this->parent->right)
-this->parent->right = swap;
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth((this ? this->left : (struct __ecereNameSpace__ecere__sys__BTNode *)(((void *)0))), output, wantedDepth, curDepth + 1, maxDepth, last && this && !this->right);
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth((this ? this->right : (struct __ecereNameSpace__ecere__sys__BTNode *)(((void *)0))), output, wantedDepth, curDepth + 1, maxDepth, last);
 }
 }
 
-int __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(struct __ecereNameSpace__ecere__sys__BTNode * this)
+struct __ecereNameSpace__ecere__com__DataMember;
+
+struct __ecereNameSpace__ecere__com__DataMember
 {
-int leftDepth = this->left ? (this->left->depth + 1) : 0;
-int rightDepth = this->right ? (this->right->depth + 1) : 0;
+struct __ecereNameSpace__ecere__com__DataMember * prev;
+struct __ecereNameSpace__ecere__com__DataMember * next;
+const char *  name;
+unsigned int isProperty;
+int memberAccess;
+int id;
+struct __ecereNameSpace__ecere__com__Class * _class;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int type;
+int offset;
+int memberID;
+struct __ecereNameSpace__ecere__sys__OldList members;
+struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
+int memberOffset;
+short structAlignment;
+short pointerAlignment;
+} __attribute__ ((gcc_struct));
 
-return rightDepth - leftDepth;
-}
+extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
 
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-int __simpleStruct2, __simpleStruct3;
-int __simpleStruct0, __simpleStruct1;
+struct __ecereNameSpace__ecere__com__Method;
 
-if(this->parent)
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument
 {
-if(this == this->parent->left)
-this->parent->left = this->left;
-else if(this == this->parent->right)
-this->parent->right = this->left;
-}
-this->left->parent = this->parent;
-this->parent = this->left;
-this->left = this->parent->right;
-if(this->left)
-this->left->parent = this;
-this->parent->right = this;
-this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+union
 {
-struct __ecereNameSpace__ecere__sys__BTNode * n;
+struct
+{
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+} __attribute__ ((gcc_struct)) __anon1;
+struct __ecereNameSpace__ecere__com__DataValue expression;
+struct
+{
+const char *  memberString;
+union
+{
+struct __ecereNameSpace__ecere__com__DataMember * member;
+struct __ecereNameSpace__ecere__com__Property * prop;
+struct __ecereNameSpace__ecere__com__Method * method;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct)) __anon2;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct));
 
-for(n = this->parent->parent; n; n = n->parent)
+struct __ecereNameSpace__ecere__com__Method
 {
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+const char *  name;
+struct __ecereNameSpace__ecere__com__Method * parent;
+struct __ecereNameSpace__ecere__com__Method * left;
+struct __ecereNameSpace__ecere__com__Method * right;
+int depth;
+int (*  function)();
+int vid;
+int type;
+struct __ecereNameSpace__ecere__com__Class * _class;
+void *  symbol;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int memberAccess;
+} __attribute__ ((gcc_struct));
 
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
-}
-}
-}
+extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
 
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-int __simpleStruct2, __simpleStruct3;
-int __simpleStruct0, __simpleStruct1;
+struct __ecereNameSpace__ecere__com__Module;
 
-if(this->parent)
+extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
+
+extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
+
+extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char *  name, const char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
+
+struct __ecereNameSpace__ecere__com__NameSpace;
+
+struct __ecereNameSpace__ecere__com__NameSpace
 {
-if(this == this->parent->right)
-this->parent->right = this->right;
-else if(this == this->parent->left)
-this->parent->left = this->right;
-}
-this->right->parent = this->parent;
-this->parent = this->right;
-this->right = this->parent->left;
-if(this->right)
-this->right->parent = this;
-this->parent->left = this;
-this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+const char *  name;
+struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
+struct __ecereNameSpace__ecere__com__NameSpace *  left;
+struct __ecereNameSpace__ecere__com__NameSpace *  right;
+int depth;
+struct __ecereNameSpace__ecere__com__NameSpace *  parent;
+struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
+struct __ecereNameSpace__ecere__sys__BinaryTree classes;
+struct __ecereNameSpace__ecere__sys__BinaryTree defines;
+struct __ecereNameSpace__ecere__sys__BinaryTree functions;
+} __attribute__ ((gcc_struct));
+
+struct __ecereNameSpace__ecere__com__Class
 {
-struct __ecereNameSpace__ecere__sys__BTNode * n;
+struct __ecereNameSpace__ecere__com__Class * prev;
+struct __ecereNameSpace__ecere__com__Class * next;
+const char *  name;
+int offset;
+int structSize;
+void * *  _vTbl;
+int vTblSize;
+unsigned int (*  Constructor)(void * );
+void (*  Destructor)(void * );
+int offsetClass;
+int sizeClass;
+struct __ecereNameSpace__ecere__com__Class * base;
+struct __ecereNameSpace__ecere__sys__BinaryTree methods;
+struct __ecereNameSpace__ecere__sys__BinaryTree members;
+struct __ecereNameSpace__ecere__sys__BinaryTree prop;
+struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
+struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
+struct __ecereNameSpace__ecere__sys__OldList derivatives;
+int memberID;
+int startMemberID;
+int type;
+struct __ecereNameSpace__ecere__com__Instance * module;
+struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int typeSize;
+int defaultAlignment;
+void (*  Initialize)();
+int memberOffset;
+struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
+const char *  designerClass;
+unsigned int noExpansion;
+const char *  defaultProperty;
+unsigned int comRedefinition;
+int count;
+int isRemote;
+unsigned int internalDecl;
+void *  data;
+unsigned int computeSize;
+short structAlignment;
+short pointerAlignment;
+int destructionWatchOffset;
+unsigned int fixed;
+struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
+int inheritanceAccess;
+const char *  fullName;
+void *  symbol;
+struct __ecereNameSpace__ecere__sys__OldList conversions;
+struct __ecereNameSpace__ecere__sys__OldList templateParams;
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
+struct __ecereNameSpace__ecere__com__Class * templateClass;
+struct __ecereNameSpace__ecere__sys__OldList templatized;
+int numParams;
+unsigned int isInstanceClass;
+unsigned int byValueSystemClass;
+} __attribute__ ((gcc_struct));
 
-for(n = this->parent->parent; n; n = n->parent)
+struct __ecereNameSpace__ecere__com__Application
 {
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+int argc;
+const char * *  argv;
+int exitCode;
+unsigned int isGUIApp;
+struct __ecereNameSpace__ecere__sys__OldList allModules;
+char *  parsedCommand;
+struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
+} __attribute__ ((gcc_struct));
 
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
-}
-}
-}
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TreePrintStyle;
+
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
+
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__StringBTNode;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_bool;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_String;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+struct __ecereNameSpace__ecere__com__Module
+{
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
 
 void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__com__Instance * channel)
 {
@@ -866,18 +1090,6 @@ __ecerePropM___ecereNameSpace__ecere__sys__BTNode_depthProp = (void *)0;
 __ecerePropM___ecereNameSpace__ecere__sys__BTNode_balanceFactor = (void *)0;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this->left);
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this->right);
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this);
-}
-
 void __ecereRegisterModule_BTNode(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
@@ -939,231 +1151,6 @@ if(class)
 class->fixed = (unsigned int)1;
 }
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-while(1)
-{
-int factor = __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this);
-
-if(factor < -1)
-{
-if(__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this->left) == 1)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateRight(this);
-else
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateRight(this);
-}
-else if(factor > 1)
-{
-if(__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_balanceFactor(this->right) == -1)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_DoubleRotateLeft(this);
-else
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_SingleRotateLeft(this);
-}
-if(this->parent)
-this = this->parent;
-else
-return this;
-}
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapLeft(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-struct __ecereNameSpace__ecere__sys__BTNode * swap = this->left ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(this->left) : this->right;
-struct __ecereNameSpace__ecere__sys__BTNode * swapParent = (((void *)0));
-
-if(swap)
-{
-swapParent = swap->parent;
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(this, swap);
-}
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = (((void *)0));
-else if(this == this->parent->right)
-this->parent->right = (((void *)0));
-}
-{
-struct __ecereNameSpace__ecere__sys__BTNode * n;
-
-for(n = swap ? swap : this->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth && n != swap)
-break;
-n->depth = newDepth;
-}
-}
-if(swapParent && swapParent != this)
-return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swapParent);
-else if(swap)
-return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swap);
-else if(this->parent)
-return __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(this->parent);
-else
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapRight(struct __ecereNameSpace__ecere__sys__BTNode * this)
-{
-struct __ecereNameSpace__ecere__sys__BTNode * result;
-struct __ecereNameSpace__ecere__sys__BTNode * swap = this->right ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(this->right) : this->left;
-struct __ecereNameSpace__ecere__sys__BTNode * swapParent = (((void *)0));
-
-if(swap)
-{
-swapParent = swap->parent;
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwap(this, swap);
-}
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = (((void *)0));
-else if(this == this->parent->right)
-this->parent->right = (((void *)0));
-}
-{
-struct __ecereNameSpace__ecere__sys__BTNode * n;
-
-for(n = swap ? swap : this->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth && n != swap)
-break;
-n->depth = newDepth;
-}
-}
-if(swapParent && swapParent != this)
-result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swapParent);
-else if(swap)
-result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(swap);
-else if(this->parent)
-result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(this->parent);
-else
-result = (((void *)0));
-return result;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(struct __ecereNameSpace__ecere__sys__BTNode *  this, void (*  FreeKey)(void *  key));
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(struct __ecereNameSpace__ecere__sys__BTNode * this, void (* FreeKey)(void * key))
-{
-if(this->left)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->left, FreeKey);
-if(this->right)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->right, FreeKey);
-if(FreeKey)
-FreeKey((void *)this->key);
-((this ? (__ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)this) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(this)) : 0), this = 0);
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(struct __ecereNameSpace__ecere__sys__BTNode *  this, struct __ecereNameSpace__ecere__sys__BTNode *  node);
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
-{
-if(this == node)
-return 1;
-else if(this->left && __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(this->left, node))
-return 1;
-else if(this->right && __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindNode(this->right, node))
-return 1;
-return 0;
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode *  __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode *  this, uintptr_t key);
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode * this, uintptr_t key)
-{
-struct __ecereNameSpace__ecere__sys__BTNode * result = (((void *)0));
-
-if(this->key == key)
-result = this;
-if(!result && this->left)
-result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->left, key);
-if(!result && this->right)
-result = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->right, key);
-return result;
-}
-
-char *  __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(struct __ecereNameSpace__ecere__sys__BTNode *  this, char *  output, int tps);
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(struct __ecereNameSpace__ecere__sys__BTNode *  this, char *  output, int wantedDepth, int curDepth, int maxDepth, unsigned int last);
-
-char * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(struct __ecereNameSpace__ecere__sys__BTNode * this, char * output, int tps)
-{
-switch(tps)
-{
-case 0:
-case 2:
-case 1:
-{
-if(tps == 2)
-__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
-if(this->left)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->left, output, tps);
-if(tps == 0)
-__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
-if(this->right)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->right, output, tps);
-if(tps == 1)
-__ecereNameSpace__ecere__sys__strcatf(output, "%d ", this->key);
-return output;
-}
-case 3:
-{
-int maxDepth = this->depth;
-int curDepth;
-
-for(curDepth = 0; curDepth <= maxDepth; curDepth++)
-{
-int c;
-
-for(c = 0; c < ((1 << (maxDepth - curDepth)) - 1) * 4 / 2; c++)
-strcat(output, " ");
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(this, output, curDepth, 0, maxDepth, 1);
-strcat(output, "\n");
-}
-return output;
-}
-}
-return (((void *)0));
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth(struct __ecereNameSpace__ecere__sys__BTNode * this, char * output, int wantedDepth, int curDepth, int maxDepth, unsigned int last)
-{
-int c;
-
-if(wantedDepth == curDepth)
-{
-char nodeString[10] = "";
-int len;
-
-if(this)
-sprintf(nodeString, "%d", (int)this->key);
-len = strlen(nodeString);
-for(c = 0; c < (4 - len) / 2; c++)
-strcat(output, " ");
-len += c;
-strcat(output, nodeString);
-for(c = len; c < 4; c++)
-strcat(output, " ");
-if(curDepth && !last)
-{
-for(c = 0; c < ((1 << (maxDepth - curDepth)) - 1) * 4; c++)
-strcat(output, " ");
-}
-}
-else if(curDepth <= maxDepth)
-{
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth((this ? this->left : (struct __ecereNameSpace__ecere__sys__BTNode *)(((void *)0))), output, wantedDepth, curDepth + 1, maxDepth, last && this && !this->right);
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_PrintDepth((this ? this->right : (struct __ecereNameSpace__ecere__sys__BTNode *)(((void *)0))), output, wantedDepth, curDepth + 1, maxDepth, last);
-}
-}
-
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Check(struct __ecereNameSpace__ecere__sys__BTNode *  this, struct __ecereNameSpace__ecere__sys__BinaryTree *  tree);
 
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Check(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree)
@@ -1219,3 +1206,16 @@ printf("Node %d is *greater* than right subtree %d\n", (int)this->key, (int)this
 return valid;
 }
 
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(struct __ecereNameSpace__ecere__sys__BTNode *  this, void (*  FreeKey)(void *  key));
+
+void __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(struct __ecereNameSpace__ecere__sys__BTNode * this, void (* FreeKey)(void * key))
+{
+if(this->left)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->left, FreeKey);
+if(this->right)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->right, FreeKey);
+if(FreeKey)
+FreeKey((void *)this->key);
+((this ? (__ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)this) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(this)) : 0), this = 0);
+}
+
index a6677a0..37ef9d5 100644 (file)
@@ -92,6 +92,11 @@ extern int strcmp(const char * , const char * );
 
 struct __ecereNameSpace__ecere__sys__StringBTNode;
 
+void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FreeString(char * string)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
+}
+
 struct __ecereNameSpace__ecere__com__Property;
 
 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
@@ -206,12 +211,109 @@ void (*  FreeKey)(void *  key);
 
 __attribute__((unused)) static struct __ecereNameSpace__ecere__sys__BinaryTree __ecereNameSpace__ecere__sys__dummy;
 
+int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t a, uintptr_t b)
+{
+return (a > b) ? 1 : ((a < b) ? -1 : 0);
+}
+
+int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * a, const char * b)
+{
+return (a && b) ? strcmp(a, b) : -1;
+}
+
+void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Free(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
+{
+if(this->root)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->root, this->FreeKey);
+this->root = (((void *)0));
+this->count = 0;
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key)
+{
+return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindString(this->root, key) : (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key)
+{
+return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix(this->root, key) : (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindAll(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t key)
+{
+return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->root, key) : (((void *)0));
+}
+
+void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
+{
+struct __ecereNameSpace__ecere__sys__BTNode * parent = node->parent;
+
+if(parent || this->root == node)
+{
+this->root = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapRight(node);
+this->count--;
+node->parent = (((void *)0));
+}
+}
+
+char * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Print(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char * output, int tps)
+{
+output[0] = (char)0;
+if(this->root)
+__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->root, output, tps);
+return output;
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
+{
+return this->root ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(this->root) : (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_last(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
+{
+return this->root ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(this->root) : (((void *)0));
+}
+
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Add(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, struct __ecereNameSpace__ecere__sys__BTNode * node);
 
 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Find(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t key);
 
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Check(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree);
 
+void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Delete(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
+{
+void * voidNode = node;
+
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(this, node);
+(__ecereNameSpace__ecere__com__eSystem_Delete(voidNode), voidNode = 0);
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
+{
+if(!this->CompareKey)
+this->CompareKey = (void *)(__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt);
+if(!this->root)
+this->root = node;
+else if(__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Add(this->root, this, node))
+this->root = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(node);
+else
+return 0;
+this->count++;
+return 1;
+}
+
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t key)
+{
+if(!this->CompareKey)
+this->CompareKey = (void *)(__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt);
+return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Find(this->root, this, key) : (((void *)0));
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Check(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
+{
+return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Check(this->root, this) : 1;
+}
+
 struct __ecereNameSpace__ecere__com__DataMember;
 
 struct __ecereNameSpace__ecere__com__DataMember
@@ -402,79 +504,6 @@ struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 } __attribute__ ((gcc_struct));
 
-int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t a, uintptr_t b)
-{
-return (a > b) ? 1 : ((a < b) ? -1 : 0);
-}
-
-int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * a, const char * b)
-{
-return (a && b) ? strcmp(a, b) : -1;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FreeString(char * string)
-{
-(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Free(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
-{
-if(this->root)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->root, this->FreeKey);
-this->root = (((void *)0));
-this->count = 0;
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key)
-{
-return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindString(this->root, key) : (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key)
-{
-return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix(this->root, key) : (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindAll(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t key)
-{
-return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(this->root, key) : (((void *)0));
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
-{
-struct __ecereNameSpace__ecere__sys__BTNode * parent = node->parent;
-
-if(parent || this->root == node)
-{
-this->root = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_RemoveSwapRight(node);
-this->count--;
-node->parent = (((void *)0));
-}
-}
-
-char * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Print(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char * output, int tps)
-{
-output[0] = (char)0;
-if(this->root)
-__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Print(this->root, output, tps);
-return output;
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Check(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
-{
-return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Check(this->root, this) : 1;
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
-{
-return this->root ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_minimum(this->root) : (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_last(struct __ecereNameSpace__ecere__sys__BinaryTree * this)
-{
-return this->root ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_maximum(this->root) : (((void *)0));
-}
-
 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__com__Instance * channel)
 {
 __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass___ecereNameSpace__ecere__sys__BTNode, this->root);
@@ -507,35 +536,6 @@ __ecerePropM___ecereNameSpace__ecere__sys__BinaryTree_first = (void *)0;
 __ecerePropM___ecereNameSpace__ecere__sys__BinaryTree_last = (void *)0;
 }
 
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
-{
-if(!this->CompareKey)
-this->CompareKey = (void *)(__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt);
-if(!this->root)
-this->root = node;
-else if(__ecereMethod___ecereNameSpace__ecere__sys__BTNode_Add(this->root, this, node))
-this->root = __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Rebalance(node);
-else
-return 0;
-this->count++;
-return 1;
-}
-
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t key)
-{
-if(!this->CompareKey)
-this->CompareKey = (void *)(__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt);
-return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Find(this->root, this, key) : (((void *)0));
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Delete(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node)
-{
-void * voidNode = node;
-
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(this, node);
-(__ecereNameSpace__ecere__com__eSystem_Delete(voidNode), voidNode = 0);
-}
-
 void __ecereRegisterModule_BinaryTree(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
index 76117ef..a8eabc4 100644 (file)
@@ -195,8 +195,54 @@ int __ecereVMethodID___ecereNameSpace__ecere__com__BuiltInContainer_Free;
 
 int __ecereVMethodID___ecereNameSpace__ecere__com__BuiltInContainer_Delete;
 
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetFirst(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
+{
+return this->data;
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_SetData(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data)
+{
+return 0;
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Insert(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * after, uint64 value)
+{
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Add(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, uint64 value)
+{
+return (((void *)0));
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Remove(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it)
+{
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Move(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it, struct __ecereNameSpace__ecere__com__IteratorPointer * after)
+{
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Copy(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__Instance * source)
+{
+}
+
+int __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetCount(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
+{
+return this->count;
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Delete(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it)
+{
+}
+
 struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__BuiltInContainer_Get___ecereNameSpace__ecere__com__Container(struct __ecereNameSpace__ecere__com__BuiltInContainer * this);
 
+struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__BuiltInContainer_Get___ecereNameSpace__ecere__com__Container(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
+{
+return __ecereProp___ecereNameSpace__ecere__com__BuiltInContainer_Get___ecereNameSpace__ecere__com__Container(this);
+}
+
 struct __ecereNameSpace__ecere__sys__BinaryTree;
 
 struct __ecereNameSpace__ecere__sys__BinaryTree
@@ -375,36 +421,6 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BuiltInContainer;
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
-
-struct __ecereNameSpace__ecere__com__Module
-{
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__BuiltInContainer_Get___ecereNameSpace__ecere__com__Container(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
-{
-return __ecereProp___ecereNameSpace__ecere__com__BuiltInContainer_Get___ecereNameSpace__ecere__com__Container(this);
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetFirst(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
-{
-return this->data;
-}
-
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetLast(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
 {
 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)(this->data ? ((unsigned char *)this->data + (this->count * this->type->typeSize) - 1) : (((void *)0)));
@@ -427,33 +443,59 @@ uint64 * item = (uint64 *)pointer;
 return ((((this->type->type == 1) ? ((uint64)(uintptr_t)item) : ((this->type->typeSize == 1) ? *((unsigned char *)item) : ((this->type->typeSize == 2) ? *((unsigned short *)item) : ((this->type->typeSize == 4) ? *((unsigned int *)item) : *(item)))))));
 }
 
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_SetData(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data)
-{
-return 0;
-}
-
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetAtPosition(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, const uint64 pos, unsigned int create)
 {
 return this->data ? (struct __ecereNameSpace__ecere__com__IteratorPointer *)((unsigned char *)this->data + this->type->typeSize) : (((void *)0));
 }
 
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Insert(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * after, uint64 value)
+const char * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__BuiltInContainer * this, char * tempString, void * fieldData, unsigned int * needClass)
 {
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Add(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, uint64 value)
+if(this)
 {
-return (((void *)0));
-}
+struct __ecereNameSpace__ecere__com__Class * Dclass = this->type;
+char itemString[4096];
+unsigned int first = 1;
+unsigned char * data = this->data;
+int i;
 
-void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Remove(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it)
+tempString[0] = '\0';
+for(i = 0; i < this->count; i++)
 {
+const char * result;
+
+itemString[0] = '\0';
+result = ((const char * (*)(void *, void *, char *, void *, unsigned int *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnGetString])(Dclass, (this->type->type == 0 || this->type->type == 5) ? *(void **)data : data, itemString, (((void *)0)), (((void *)0)));
+if(!first)
+strcat(tempString, ", ");
+strcat(tempString, result);
+first = 0;
+data += Dclass->typeSize;
+}
+}
+else
+tempString[0] = (char)0;
+return tempString;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Move(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it, struct __ecereNameSpace__ecere__com__IteratorPointer * after)
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+struct __ecereNameSpace__ecere__com__Module
 {
-}
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
 
 void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_RemoveAll(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
 {
@@ -463,10 +505,6 @@ for(i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ec
 ((void (*)(struct __ecereNameSpace__ecere__com__BuiltInContainer *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__BuiltInContainer->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__BuiltInContainer_Remove])(this, i);
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Copy(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__Instance * source)
-{
-}
-
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Find(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, uint64 value)
 {
 struct __ecereNameSpace__ecere__com__IteratorPointer * i;
@@ -483,11 +521,6 @@ return i;
 return (((void *)0));
 }
 
-int __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_GetCount(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
-{
-return this->count;
-}
-
 void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Free(struct __ecereNameSpace__ecere__com__BuiltInContainer * this)
 {
 struct __ecereNameSpace__ecere__com__IteratorPointer * i;
@@ -496,39 +529,6 @@ for(i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ec
 ((void (*)(void *, void *))(void *)this->type->_vTbl[__ecereVMethodID_class_OnFree])(this->type, (void *)(uintptr_t)((uint64 (*)(struct __ecereNameSpace__ecere__com__BuiltInContainer *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__ecereClass___ecereNameSpace__ecere__com__BuiltInContainer->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__BuiltInContainer_GetData])(this, i));
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_Delete(struct __ecereNameSpace__ecere__com__BuiltInContainer * this, struct __ecereNameSpace__ecere__com__IteratorPointer * it)
-{
-}
-
-const char * __ecereMethod___ecereNameSpace__ecere__com__BuiltInContainer_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__BuiltInContainer * this, char * tempString, void * fieldData, unsigned int * needClass)
-{
-if(this)
-{
-struct __ecereNameSpace__ecere__com__Class * Dclass = this->type;
-char itemString[4096];
-unsigned int first = 1;
-unsigned char * data = this->data;
-int i;
-
-tempString[0] = '\0';
-for(i = 0; i < this->count; i++)
-{
-const char * result;
-
-itemString[0] = '\0';
-result = ((const char * (*)(void *, void *, char *, void *, unsigned int *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnGetString])(Dclass, (this->type->type == 0 || this->type->type == 5) ? *(void **)data : data, itemString, (((void *)0)), (((void *)0)));
-if(!first)
-strcat(tempString, ", ");
-strcat(tempString, result);
-first = 0;
-data += Dclass->typeSize;
-}
-}
-else
-tempString[0] = (char)0;
-return tempString;
-}
-
 void __ecereUnregisterModule_BuiltInContainer(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 
index 20d9b8a..be23757 100644 (file)
@@ -221,6 +221,36 @@ struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
 
 void __ecereProp___ecereNameSpace__ecere__com__Container_Set_copySrc(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * value);
 
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetFirst(struct __ecereNameSpace__ecere__com__Instance * this)
+{
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetLast(struct __ecereNameSpace__ecere__com__Instance * this)
+{
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetPrev(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
+{
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetNext(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
+{
+return (((void *)0));
+}
+
+uint64 __ecereMethod___ecereNameSpace__ecere__com__Container_GetData(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
+{
+return (uint64)0;
+}
+
+struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetAtPosition(struct __ecereNameSpace__ecere__com__Instance * this, const uint64 pos, unsigned int create)
+{
+return (((void *)0));
+}
+
 int __ecereVMethodID_class_OnSerialize;
 
 int __ecereVMethodID_class_OnUnserialize;
@@ -411,6 +441,19 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Container;
 
+void __ecereMethod___ecereNameSpace__ecere__com__Container_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this)
+{
+if((struct __ecereNameSpace__ecere__com__Instance *)this)
+{
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(this);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(this), this = 0);
+}
+}
+
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
@@ -441,6 +484,97 @@ struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 } __attribute__ ((gcc_struct));
 
+uint64 __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+return ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this->container, this->pointer);
+}
+
+void __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value)
+{
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_SetData])(this->container, this->pointer, value);
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Prev(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+if(this->pointer && this->container)
+this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetPrev])(this->container, this->pointer);
+else if(this->container)
+this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetLast])(this->container);
+return this->pointer != (((void *)0));
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+if(this->pointer && this->container)
+this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(this->container, this->pointer);
+else if(this->container)
+this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst])(this->container);
+return this->pointer != (((void *)0));
+}
+
+uint64 __ecereMethod___ecereNameSpace__ecere__com__Iterator_GetData(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+return ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this->container, this->pointer);
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_SetData(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value)
+{
+return ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_SetData])(this->container, this->pointer, value);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__Iterator_Remove(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+if(this->container)
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this->container, this->pointer);
+this->pointer = (((void *)0));
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__Iterator_Free(struct __ecereNameSpace__ecere__com__Iterator * this)
+{
+if(this->container)
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_FreeIterator])(this->container, this->pointer);
+}
+
 void __ecereDestructor___ecereNameSpace__ecere__com__Container(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 {
@@ -484,36 +618,6 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetLast])(this), __simpleStruct0);
 }
 
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetFirst(struct __ecereNameSpace__ecere__com__Instance * this)
-{
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetLast(struct __ecereNameSpace__ecere__com__Instance * this)
-{
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetPrev(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
-{
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetNext(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
-{
-return (((void *)0));
-}
-
-uint64 __ecereMethod___ecereNameSpace__ecere__com__Container_GetData(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer)
-{
-return (uint64)0;
-}
-
-struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Container_GetAtPosition(struct __ecereNameSpace__ecere__com__Instance * this, const uint64 pos, unsigned int create)
-{
-return (((void *)0));
-}
-
 void __ecereMethod___ecereNameSpace__ecere__com__Container_RemoveAll(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 struct __ecereNameSpace__ecere__com__IteratorPointer * i, * next;
@@ -571,19 +675,6 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 }
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__Container_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this)
-{
-if((struct __ecereNameSpace__ecere__com__Instance *)this)
-{
-((void (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(this);
-(__ecereNameSpace__ecere__com__eInstance_DecRef(this), this = 0);
-}
-}
-
 int __ecereMethod___ecereNameSpace__ecere__com__Container_GetCount(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 int count = 0;
@@ -674,97 +765,6 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this, i);
 }
 
-uint64 __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-return ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this->container, this->pointer);
-}
-
-void __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value)
-{
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_SetData])(this->container, this->pointer, value);
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Prev(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-if(this->pointer && this->container)
-this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetPrev])(this->container, this->pointer);
-else if(this->container)
-this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetLast])(this->container);
-return this->pointer != (((void *)0));
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-if(this->pointer && this->container)
-this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(this->container, this->pointer);
-else if(this->container)
-this->pointer = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst])(this->container);
-return this->pointer != (((void *)0));
-}
-
-uint64 __ecereMethod___ecereNameSpace__ecere__com__Iterator_GetData(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-return ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this->container, this->pointer);
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_SetData(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value)
-{
-return ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer, uint64 data))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_SetData])(this->container, this->pointer, value);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__Iterator_Remove(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-if(this->container)
-((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this->container, this->pointer);
-this->pointer = (((void *)0));
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__Iterator_Free(struct __ecereNameSpace__ecere__com__Iterator * this)
-{
-if(this->container)
-((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this->container;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Container->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_FreeIterator])(this->container, this->pointer);
-}
-
 static __attribute__((unused)) void UnusedFunction()
 {
 int a;
index ec676b7..fcb6419 100644 (file)
@@ -127,6 +127,155 @@ uint64 key;
 
 struct __ecereNameSpace__ecere__com__Class;
 
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+while(this->left)
+this = this->left;
+return this;
+}
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+while(this->right)
+this = this->right;
+return this;
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__AVLNode * swap)
+{
+if(swap->left)
+{
+swap->left->parent = swap->parent;
+if(swap == swap->parent->left)
+swap->parent->left = swap->left;
+else if(swap == swap->parent->right)
+swap->parent->right = swap->left;
+swap->left = (((void *)0));
+}
+if(swap->right)
+{
+swap->right->parent = swap->parent;
+if(swap == swap->parent->left)
+swap->parent->left = swap->right;
+else if(swap == swap->parent->right)
+swap->parent->right = swap->right;
+swap->right = (((void *)0));
+}
+if(swap == swap->parent->left)
+swap->parent->left = (((void *)0));
+else if(swap == swap->parent->right)
+swap->parent->right = (((void *)0));
+{
+struct __ecereNameSpace__ecere__com__AVLNode * n;
+
+for(n = swap->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+if(n == this)
+break;
+}
+}
+swap->left = this->left;
+if(this->left)
+this->left->parent = swap;
+swap->right = this->right;
+if(this->right)
+this->right->parent = swap;
+swap->parent = this->parent;
+this->left = (((void *)0));
+this->right = (((void *)0));
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = swap;
+else if(this == this->parent->right)
+this->parent->right = swap;
+}
+}
+
+int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+int leftDepth = this->left ? (this->left->depth + 1) : 0;
+int rightDepth = this->right ? (this->right->depth + 1) : 0;
+
+return rightDepth - leftDepth;
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+int __simpleStruct2, __simpleStruct3;
+int __simpleStruct0, __simpleStruct1;
+
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = this->left;
+else if(this == this->parent->right)
+this->parent->right = this->left;
+}
+this->left->parent = this->parent;
+this->parent = this->left;
+this->left = this->parent->right;
+if(this->left)
+this->left->parent = this;
+this->parent->right = this;
+this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+{
+struct __ecereNameSpace__ecere__com__AVLNode * n;
+
+for(n = this->parent->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+}
+}
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+int __simpleStruct2, __simpleStruct3;
+int __simpleStruct0, __simpleStruct1;
+
+if(this->parent)
+{
+if(this == this->parent->right)
+this->parent->right = this->right;
+else if(this == this->parent->left)
+this->parent->left = this->right;
+}
+this->right->parent = this->parent;
+this->parent = this->right;
+this->right = this->parent->left;
+if(this->right)
+this->right->parent = this;
+this->parent->left = this;
+this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+{
+struct __ecereNameSpace__ecere__com__AVLNode * n;
+
+for(n = this->parent->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth)
+break;
+n->depth = newDepth;
+}
+}
+}
+
 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(struct __ecereNameSpace__ecere__com__AVLNode * this);
 
 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(struct __ecereNameSpace__ecere__com__AVLNode * this);
@@ -156,6 +305,63 @@ extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__
 
 extern void __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(struct __ecereNameSpace__ecere__com__Class * base);
 
+void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this->left);
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this->right);
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
+}
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+if(this->left)
+return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left);
+while(this)
+{
+if(this->parent && this == this->parent->right)
+return this->parent;
+else
+this = this->parent;
+}
+return this;
+}
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+struct __ecereNameSpace__ecere__com__AVLNode * right = this->right;
+
+if(right)
+return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(right);
+while(this)
+{
+struct __ecereNameSpace__ecere__com__AVLNode * parent = this->parent;
+
+if(parent && this == parent->left)
+return parent;
+else
+this = parent;
+}
+return (((void *)0));
+}
+
+int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+return 1 + (this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->left) : 0) + (this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->right) : 0);
+}
+
+int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+int leftDepth = this->left ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->left) + 1) : 0;
+int rightDepth = this->right ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->right) + 1) : 0;
+
+return ((leftDepth > rightDepth) ? leftDepth : rightDepth);
+}
+
 struct __ecereNameSpace__ecere__com__Property
 {
 struct __ecereNameSpace__ecere__com__Property * prev;
@@ -190,9 +396,118 @@ extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpa
 
 extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
 
-extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove;
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+while(1)
+{
+int factor = __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this);
+
+if(factor < -1)
+{
+if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->left) == 1)
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(this);
+else
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
+}
+else if(factor > 1)
+{
+if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->right) == -1)
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(this);
+else
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
+}
+if(this->parent)
+this = this->parent;
+else
+return this;
+}
+}
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+struct __ecereNameSpace__ecere__com__AVLNode * swap = this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left) : this->right;
+struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
+
+if(swap)
+{
+swapParent = swap->parent;
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
+}
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = (((void *)0));
+else if(this == this->parent->right)
+this->parent->right = (((void *)0));
+}
+{
+struct __ecereNameSpace__ecere__com__AVLNode * n;
+
+for(n = swap ? swap : this->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+
+if(newDepth == n->depth && n != swap)
+break;
+n->depth = newDepth;
+}
+}
+if(swapParent && swapParent != this)
+return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
+else if(swap)
+return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
+else if(this->parent)
+return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
+else
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
+{
+struct __ecereNameSpace__ecere__com__AVLNode * result;
+struct __ecereNameSpace__ecere__com__AVLNode * swap = this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(this->right) : this->left;
+struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
+
+if(swap)
+{
+swapParent = swap->parent;
+__ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
+}
+if(this->parent)
+{
+if(this == this->parent->left)
+this->parent->left = (((void *)0));
+else if(this == this->parent->right)
+this->parent->right = (((void *)0));
+}
+{
+struct __ecereNameSpace__ecere__com__AVLNode * n;
+
+for(n = swap ? swap : this->parent; n; n = n->parent)
+{
+int __simpleStruct0, __simpleStruct1;
+int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
 
-int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove;
+if(newDepth == n->depth && n != swap)
+break;
+n->depth = newDepth;
+}
+}
+if(swapParent && swapParent != this)
+result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
+else if(swap)
+result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
+else if(this->parent)
+result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
+else
+result = (((void *)0));
+return result;
+}
 
 struct __ecereNameSpace__ecere__sys__BinaryTree;
 
@@ -204,6 +519,21 @@ int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uint
 void (*  FreeKey)(void *  key);
 } __attribute__ ((gcc_struct));
 
+struct __ecereNameSpace__ecere__com__AVLNode *  __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode *  this, const uint64 key);
+
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode * this, const uint64 key)
+{
+struct __ecereNameSpace__ecere__com__AVLNode * result = (((void *)0));
+
+if(this->key == key)
+result = this;
+if(!result && this->left)
+result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->left, key);
+if(!result && this->right)
+result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->right, key);
+return result;
+}
+
 struct __ecereNameSpace__ecere__com__DataMember;
 
 struct __ecereNameSpace__ecere__com__DataMember
@@ -361,271 +691,77 @@ unsigned int byValueSystemClass;
 
 struct __ecereNameSpace__ecere__com__Application
 {
-int argc;
-const char * *  argv;
-int exitCode;
-unsigned int isGUIApp;
-struct __ecereNameSpace__ecere__sys__OldList allModules;
-char *  parsedCommand;
-struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
-} __attribute__ ((gcc_struct));
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__AVLNode;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__IteratorPointer;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint64;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
-
-struct __ecereNameSpace__ecere__com__Module
-{
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-if(this->left)
-return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left);
-while(this)
-{
-if(this->parent && this == this->parent->right)
-return this->parent;
-else
-this = this->parent;
-}
-return this;
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-struct __ecereNameSpace__ecere__com__AVLNode * right = this->right;
-
-if(right)
-return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(right);
-while(this)
-{
-struct __ecereNameSpace__ecere__com__AVLNode * parent = this->parent;
-
-if(parent && this == parent->left)
-return parent;
-else
-this = parent;
-}
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-while(this->left)
-this = this->left;
-return this;
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-while(this->right)
-this = this->right;
-return this;
-}
-
-int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-return 1 + (this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->left) : 0) + (this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->right) : 0);
-}
-
-int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-int leftDepth = this->left ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->left) + 1) : 0;
-int rightDepth = this->right ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->right) + 1) : 0;
-
-return ((leftDepth > rightDepth) ? leftDepth : rightDepth);
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Find(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__Class * Tclass, const uint64 key)
-{
-while(this)
-{
-int result;
-unsigned char * a, * b;
-
-if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3)
-{
-a = (unsigned char *)&key;
-a += __ENDIAN_PAD(Tclass->typeSize);
-}
-else
-a = (unsigned char *)(uintptr_t)key;
-if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3 || Tclass->type == 1)
-{
-b = (unsigned char *)&this->key;
-b += __ENDIAN_PAD((Tclass->type == 1) ? sizeof(void *) : Tclass->typeSize);
-}
-else
-b = (unsigned char *)(uintptr_t)(uint64)(this->key);
-result = ((int (*)(void *, void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnCompare])(Tclass, a, b);
-if(result < 0)
-this = this->left;
-else if(result > 0)
-this = this->right;
-else
-break;
-}
-return this;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__AVLNode * swap)
-{
-if(swap->left)
-{
-swap->left->parent = swap->parent;
-if(swap == swap->parent->left)
-swap->parent->left = swap->left;
-else if(swap == swap->parent->right)
-swap->parent->right = swap->left;
-swap->left = (((void *)0));
-}
-if(swap->right)
-{
-swap->right->parent = swap->parent;
-if(swap == swap->parent->left)
-swap->parent->left = swap->right;
-else if(swap == swap->parent->right)
-swap->parent->right = swap->right;
-swap->right = (((void *)0));
-}
-if(swap == swap->parent->left)
-swap->parent->left = (((void *)0));
-else if(swap == swap->parent->right)
-swap->parent->right = (((void *)0));
-{
-struct __ecereNameSpace__ecere__com__AVLNode * n;
-
-for(n = swap->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
-if(n == this)
-break;
-}
-}
-swap->left = this->left;
-if(this->left)
-this->left->parent = swap;
-swap->right = this->right;
-if(this->right)
-this->right->parent = swap;
-swap->parent = this->parent;
-this->left = (((void *)0));
-this->right = (((void *)0));
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = swap;
-else if(this == this->parent->right)
-this->parent->right = swap;
-}
-}
-
-int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-int leftDepth = this->left ? (this->left->depth + 1) : 0;
-int rightDepth = this->right ? (this->right->depth + 1) : 0;
-
-return rightDepth - leftDepth;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-int __simpleStruct2, __simpleStruct3;
-int __simpleStruct0, __simpleStruct1;
-
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = this->left;
-else if(this == this->parent->right)
-this->parent->right = this->left;
-}
-this->left->parent = this->parent;
-this->parent = this->left;
-this->left = this->parent->right;
-if(this->left)
-this->left->parent = this;
-this->parent->right = this;
-this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
-{
-struct __ecereNameSpace__ecere__com__AVLNode * n;
-
-for(n = this->parent->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+int argc;
+const char * *  argv;
+int exitCode;
+unsigned int isGUIApp;
+struct __ecereNameSpace__ecere__sys__OldList allModules;
+char *  parsedCommand;
+struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
+} __attribute__ ((gcc_struct));
 
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
-}
-}
-}
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__AVLNode;
 
-void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-int __simpleStruct2, __simpleStruct3;
-int __simpleStruct0, __simpleStruct1;
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree;
 
-if(this->parent)
+struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Find(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__Class * Tclass, const uint64 key)
 {
-if(this == this->parent->right)
-this->parent->right = this->right;
-else if(this == this->parent->left)
-this->parent->left = this->right;
-}
-this->right->parent = this->parent;
-this->parent = this->right;
-this->right = this->parent->left;
-if(this->right)
-this->right->parent = this;
-this->parent->left = this;
-this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
+while(this)
 {
-struct __ecereNameSpace__ecere__com__AVLNode * n;
+int result;
+unsigned char * a, * b;
 
-for(n = this->parent->parent; n; n = n->parent)
+if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3)
 {
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth)
-break;
-n->depth = newDepth;
+a = (unsigned char *)&key;
+a += __ENDIAN_PAD(Tclass->typeSize);
+}
+else
+a = (unsigned char *)(uintptr_t)key;
+if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3 || Tclass->type == 1)
+{
+b = (unsigned char *)&this->key;
+b += __ENDIAN_PAD((Tclass->type == 1) ? sizeof(void *) : Tclass->typeSize);
 }
+else
+b = (unsigned char *)(uintptr_t)(uint64)(this->key);
+result = ((int (*)(void *, void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnCompare])(Tclass, a, b);
+if(result < 0)
+this = this->left;
+else if(result > 0)
+this = this->right;
+else
+break;
 }
+return this;
 }
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__IteratorPointer;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint64;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+struct __ecereNameSpace__ecere__com__Module
+{
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
+
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetFirst(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
@@ -668,6 +804,19 @@ __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __e
 return 0;
 }
 
+void __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
+{
+__attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
+struct __ecereNameSpace__ecere__com__AVLNode * parent = ((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent;
+
+if(parent || ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root))) == (struct __ecereNameSpace__ecere__com__AVLNode *)node)
+{
+__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(((struct __ecereNameSpace__ecere__com__AVLNode *)node));
+__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->count--;
+((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent = (((void *)0));
+}
+}
+
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Find(struct __ecereNameSpace__ecere__com__Instance * this, uint64 value)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
@@ -787,127 +936,6 @@ __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp = (void *)0;
 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor = (void *)0;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this->left);
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this->right);
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-while(1)
-{
-int factor = __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this);
-
-if(factor < -1)
-{
-if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->left) == 1)
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(this);
-else
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
-}
-else if(factor > 1)
-{
-if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->right) == -1)
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(this);
-else
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
-}
-if(this->parent)
-this = this->parent;
-else
-return this;
-}
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-struct __ecereNameSpace__ecere__com__AVLNode * swap = this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left) : this->right;
-struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
-
-if(swap)
-{
-swapParent = swap->parent;
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
-}
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = (((void *)0));
-else if(this == this->parent->right)
-this->parent->right = (((void *)0));
-}
-{
-struct __ecereNameSpace__ecere__com__AVLNode * n;
-
-for(n = swap ? swap : this->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth && n != swap)
-break;
-n->depth = newDepth;
-}
-}
-if(swapParent && swapParent != this)
-return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
-else if(swap)
-return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
-else if(this->parent)
-return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
-else
-return (((void *)0));
-}
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
-{
-struct __ecereNameSpace__ecere__com__AVLNode * result;
-struct __ecereNameSpace__ecere__com__AVLNode * swap = this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(this->right) : this->left;
-struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
-
-if(swap)
-{
-swapParent = swap->parent;
-__ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
-}
-if(this->parent)
-{
-if(this == this->parent->left)
-this->parent->left = (((void *)0));
-else if(this == this->parent->right)
-this->parent->right = (((void *)0));
-}
-{
-struct __ecereNameSpace__ecere__com__AVLNode * n;
-
-for(n = swap ? swap : this->parent; n; n = n->parent)
-{
-int __simpleStruct0, __simpleStruct1;
-int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
-
-if(newDepth == n->depth && n != swap)
-break;
-n->depth = newDepth;
-}
-}
-if(swapParent && swapParent != this)
-result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
-else if(swap)
-result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
-else if(this->parent)
-result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
-else
-result = (((void *)0));
-return result;
-}
-
 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Add(struct __ecereNameSpace__ecere__com__Instance * this, uint64 node)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
@@ -931,19 +959,6 @@ __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->count++;
 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(node)));
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
-{
-__attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
-struct __ecereNameSpace__ecere__com__AVLNode * parent = ((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent;
-
-if(parent || ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root))) == (struct __ecereNameSpace__ecere__com__AVLNode *)node)
-{
-__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(((struct __ecereNameSpace__ecere__com__AVLNode *)node));
-__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->count--;
-((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent = (((void *)0));
-}
-}
-
 void __ecereRegisterModule_CustomAVLTree(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument __simpleStruct0 =
@@ -1012,21 +1027,6 @@ if(class)
 class->fixed = (unsigned int)1;
 }
 
-struct __ecereNameSpace__ecere__com__AVLNode *  __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode *  this, const uint64 key);
-
-struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode * this, const uint64 key)
-{
-struct __ecereNameSpace__ecere__com__AVLNode * result = (((void *)0));
-
-if(this->key == key)
-result = this;
-if(!result && this->left)
-result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->left, key);
-if(!result && this->right)
-result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->right, key);
-return result;
-}
-
 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(struct __ecereNameSpace__ecere__com__AVLNode *  this);
 
 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(struct __ecereNameSpace__ecere__com__AVLNode * this)
index 5d674c4..aa94578 100644 (file)
@@ -39,6 +39,44 @@ typedef unsigned __int64 uint64;
 #include <sys/types.h>
 typedef __builtin_va_list va_list;
 
+typedef struct _DualPipe _DualPipe;
+
+void DualPipe_Destructor(_DualPipe * dp);
+
+void DualPipe_CloseInput(_DualPipe * dp);
+
+void DualPipe_CloseOutput(_DualPipe * dp);
+
+int DualPipe_Read(_DualPipe * dp, unsigned char * buffer, unsigned int size, unsigned int count);
+
+int DualPipe_Write(_DualPipe * dp, const unsigned char * buffer, unsigned int size, unsigned int count);
+
+unsigned int DualPipe_Getc(_DualPipe * dp, char * ch);
+
+unsigned int DualPipe_Putc(_DualPipe * dp, char ch);
+
+unsigned int DualPipe_Puts(_DualPipe * dp, const char * string);
+
+unsigned int DualPipe_Seek(_DualPipe * dp, int pos, int mode);
+
+unsigned int DualPipe_Tell(_DualPipe * dp);
+
+unsigned int DualPipe_Eof(_DualPipe * dp);
+
+unsigned int DualPipe_GetSize(_DualPipe * dp);
+
+unsigned int DualPipe_Peek(_DualPipe * dp);
+
+void DualPipe_Terminate(_DualPipe * dp);
+
+int DualPipe_GetExitCode(_DualPipe * dp);
+
+int DualPipe_GetProcessID(_DualPipe * dp);
+
+void DualPipe_Wait(_DualPipe * dp);
+
+_DualPipe * _DualPipeOpen(unsigned int mode, const char * commandLine, const char * env, void ** inputPtr, void ** outputPtr);
+
 struct __ecereNameSpace__ecere__sys__DualPipe
 {
 void * dp;
@@ -122,42 +160,6 @@ extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereName
 
 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
 
-void DualPipe_Destructor(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-void DualPipe_CloseInput(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-void DualPipe_CloseOutput(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-int DualPipe_Read(struct __ecereNameSpace__ecere__com__Instance ** dp, unsigned char * buffer, unsigned int size, unsigned int count);
-
-int DualPipe_Write(struct __ecereNameSpace__ecere__com__Instance ** dp, const unsigned char * buffer, unsigned int size, unsigned int count);
-
-unsigned int DualPipe_Getc(struct __ecereNameSpace__ecere__com__Instance ** dp, char * ch);
-
-unsigned int DualPipe_Putc(struct __ecereNameSpace__ecere__com__Instance ** dp, char ch);
-
-unsigned int DualPipe_Puts(struct __ecereNameSpace__ecere__com__Instance ** dp, const char * string);
-
-unsigned int DualPipe_Seek(struct __ecereNameSpace__ecere__com__Instance ** dp, int pos, int mode);
-
-unsigned int DualPipe_Tell(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-unsigned int DualPipe_Eof(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-unsigned int DualPipe_GetSize(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-unsigned int DualPipe_Peek(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-void DualPipe_Terminate(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-int DualPipe_GetExitCode(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-int DualPipe_GetProcessID(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-void DualPipe_Wait(struct __ecereNameSpace__ecere__com__Instance ** dp);
-
-struct __ecereNameSpace__ecere__com__Instance ** _DualPipeOpen(unsigned int mode, const char * commandLine, const char * env, void ** inputPtr, void ** outputPtr);
-
 void *  __ecereProp___ecereNameSpace__ecere__sys__File_Get_input(struct __ecereNameSpace__ecere__com__Instance * this);
 
 void __ecereProp___ecereNameSpace__ecere__sys__File_Set_input(struct __ecereNameSpace__ecere__com__Instance * this, void *  value);
index 23d133f..8bc0ff1 100644 (file)
@@ -118,6 +118,15 @@ struct __ecereNameSpace__ecere__sys__File
 FILE * input, * output;
 } __attribute__ ((gcc_struct));
 
+struct __ecereNameSpace__ecere__sys__FileStats
+{
+unsigned int attribs;
+unsigned int size;
+int64 accessed;
+int64 modified;
+int64 created;
+} __attribute__ ((gcc_struct));
+
 static int __ecereNameSpace__ecere__sys__openCount;
 
 struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__CreateTemporaryFile(char * tempFileName, const char * template)
@@ -239,6 +248,8 @@ void __ecereNameSpace__ecere__sys__FileFixCase(char * file)
 FILE_FileFixCase(file);
 }
 
+unsigned int FILE_FileGetStats(const char * fileName, struct __ecereNameSpace__ecere__sys__FileStats * stats);
+
 void __ecereNameSpace__ecere__sys__MakeSlashPath(char * p)
 {
 __ecereNameSpace__ecere__sys__FileFixCase(p);
@@ -250,6 +261,17 @@ void __ecereNameSpace__ecere__sys__MakeSystemPath(char * p)
 __ecereNameSpace__ecere__sys__FileFixCase(p);
 }
 
+unsigned int __ecereNameSpace__ecere__sys__FileGetStats(const char * fileName, struct __ecereNameSpace__ecere__sys__FileStats * stats)
+{
+unsigned int result = 0;
+
+if(stats && fileName)
+{
+return FILE_FileGetStats(fileName, stats);
+}
+return result;
+}
+
 char * __ecereNameSpace__ecere__sys__CopyUnixPath(const char * p)
 {
 char * d = __ecereNameSpace__ecere__sys__CopyString(p);
@@ -284,10 +306,6 @@ __ecereNameSpace__ecere__sys__MakeSystemPath(d);
 return d;
 }
 
-struct __ecereNameSpace__ecere__sys__FileStats;
-
-unsigned int FILE_FileGetStats(const char * fileName, struct __ecereNameSpace__ecere__sys__FileStats * stats);
-
 struct __ecereNameSpace__ecere__com__Property;
 
 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
@@ -329,14 +347,7 @@ int __ecereVMethodID___ecereNameSpace__ecere__sys__FileSystem_Exists;
 
 int __ecereVMethodID___ecereNameSpace__ecere__sys__FileSystem_GetSize;
 
-struct __ecereNameSpace__ecere__sys__FileStats
-{
-unsigned int attribs;
-unsigned int size;
-struct __ecereNameSpace__ecere__com__Instance * accessed;
-struct __ecereNameSpace__ecere__com__Instance * modified;
-struct __ecereNameSpace__ecere__com__Instance * created;
-} __attribute__ ((gcc_struct));
+int __ecereVMethodID___ecereNameSpace__ecere__sys__FileSystem_Stats;
 
 int __ecereVMethodID___ecereNameSpace__ecere__sys__FileSystem_FixCase;
 
@@ -430,17 +441,19 @@ void __ecereProp___ecereNameSpace__ecere__sys__File_Set_buffered(struct __ecereN
 
 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
 
-int __ecereVMethodID___ecereNameSpace__ecere__sys__FileSystem_Stats;
-
-unsigned int __ecereNameSpace__ecere__sys__FileGetStats(const char * fileName, struct __ecereNameSpace__ecere__sys__FileStats * stats)
+unsigned int __ecereConstructor___ecereNameSpace__ecere__sys__ConsoleFile(struct __ecereNameSpace__ecere__com__Instance * this)
 {
-unsigned int result = 0;
+__ecereProp___ecereNameSpace__ecere__sys__File_Set_input(this, eC_stdin());
+__ecereProp___ecereNameSpace__ecere__sys__File_Set_output(this, eC_stdout());
+return 1;
+}
 
-if(stats && fileName)
+void __ecereDestructor___ecereNameSpace__ecere__sys__ConsoleFile(struct __ecereNameSpace__ecere__com__Instance * this)
 {
-return FILE_FileGetStats(fileName, stats);
+{
+__ecereProp___ecereNameSpace__ecere__sys__File_Set_input(this, (((void *)0)));
+__ecereProp___ecereNameSpace__ecere__sys__File_Set_output(this, (((void *)0)));
 }
-return result;
 }
 
 struct __ecereNameSpace__ecere__sys__BinaryTree;
@@ -637,33 +650,9 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__FileAttribs;
 
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__FileStats;
-
-extern int __ecereNameSpace__ecere__com__PrintStdArgsToBuffer(char *  buffer, int maxLen, struct __ecereNameSpace__ecere__com__Class * class, const void * object, __builtin_va_list args);
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__SecSince1970;
 
-struct __ecereNameSpace__ecere__com__Module
-{
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-} __attribute__ ((gcc_struct));
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__FileStats;
 
 int __ecereMethod___ecereNameSpace__ecere__sys__FileSize_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, unsigned int * data2)
 {
@@ -741,6 +730,32 @@ multiplier = 1024;
 return 1;
 }
 
+extern int __ecereNameSpace__ecere__com__PrintStdArgsToBuffer(char *  buffer, int maxLen, struct __ecereNameSpace__ecere__com__Class * class, const void * object, __builtin_va_list args);
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+struct __ecereNameSpace__ecere__com__Module
+{
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
+
 void __ecereDestructor___ecereNameSpace__ecere__sys__File(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__sys__File * __ecerePointer___ecereNameSpace__ecere__sys__File = (struct __ecereNameSpace__ecere__sys__File *)(this ? (((char *)this) + __ecereClass___ecereNameSpace__ecere__sys__File->offset) : 0);
@@ -1168,21 +1183,6 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_CloseInput])(this);
 }
 
-unsigned int __ecereConstructor___ecereNameSpace__ecere__sys__ConsoleFile(struct __ecereNameSpace__ecere__com__Instance * this)
-{
-__ecereProp___ecereNameSpace__ecere__sys__File_Set_input(this, eC_stdin());
-__ecereProp___ecereNameSpace__ecere__sys__File_Set_output(this, eC_stdout());
-return 1;
-}
-
-void __ecereDestructor___ecereNameSpace__ecere__sys__ConsoleFile(struct __ecereNameSpace__ecere__com__Instance * this)
-{
-{
-__ecereProp___ecereNameSpace__ecere__sys__File_Set_input(this, (((void *)0)));
-__ecereProp___ecereNameSpace__ecere__sys__File_Set_output(this, (((void *)0)));
-}
-}
-
 void __ecereMethod___ecereNameSpace__ecere__sys__File_PrintLn(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__sys__File * __ecerePointer___ecereNameSpace__ecere__sys__File = (struct __ecereNameSpace__ecere__sys__File *)(this ? (((char *)this) + __ecereClass___ecereNameSpace__ecere__sys__File->offset) : 0);
@@ -1520,14 +1520,17 @@ __ecereNameSpace__ecere__com__eClass_AddBitMember(class, "isRemote", "bool", 1,
 __ecereNameSpace__ecere__com__eClass_AddBitMember(class, "isRemovable", "bool", 1, 10, 1);
 __ecereNameSpace__ecere__com__eClass_AddBitMember(class, "isServer", "bool", 1, 11, 1);
 __ecereNameSpace__ecere__com__eClass_AddBitMember(class, "isShare", "bool", 1, 12, 1);
+class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(3, "ecere::sys::SecSince1970", "int64", 0, 0, (void *)0, (void *)0, module, 1, 1);
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
+__ecereClass___ecereNameSpace__ecere__sys__SecSince1970 = class;
 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(1, "ecere::sys::FileStats", 0, sizeof(struct __ecereNameSpace__ecere__sys__FileStats), 0, (void *)0, (void *)0, module, 1, 1);
 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
 __ecereClass___ecereNameSpace__ecere__sys__FileStats = class;
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "attribs", "ecere::sys::FileAttribs", 4, 4, 1);
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "size", "ecere::sys::FileSize", 4, 4, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "accessed", "SecSince1970", sizeof(void *), 0xF000F000, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "modified", "SecSince1970", sizeof(void *), 0xF000F000, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "created", "SecSince1970", sizeof(void *), 0xF000F000, 1);
+__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "accessed", "ecere::sys::SecSince1970", 8, 8, 1);
+__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "modified", "ecere::sys::SecSince1970", 8, 8, 1);
+__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "created", "ecere::sys::SecSince1970", 8, 8, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FileExists", "ecere::sys::FileAttribs ecere::sys::FileExists(const char * fileName)", __ecereNameSpace__ecere__sys__FileExists, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FileOpen", "ecere::sys::File ecere::sys::FileOpen(const char * fileName, ecere::sys::FileOpenMode mode)", __ecereNameSpace__ecere__sys__FileOpen, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FileFixCase", "void ecere::sys::FileFixCase(char * file)", __ecereNameSpace__ecere__sys__FileFixCase, module, 1);
index 47eb8fb..5e6edf7 100644 (file)
@@ -152,6 +152,16 @@ uint64 value;
 
 struct __ecereNameSpace__ecere__com__Class;
 
+uint64 __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_value(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return this ? this->value : (uint64)0;
+}
+
+void __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_value(struct __ecereNameSpace__ecere__com__MapNode * this, uint64 value)
+{
+this->value = value;
+}
+
 const uint64 __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_key(struct __ecereNameSpace__ecere__com__MapNode * this);
 
 void __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_key(struct __ecereNameSpace__ecere__com__MapNode * this, const uint64 value);
@@ -255,6 +265,16 @@ void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(struct __ecereNam
 
 void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * *  data);
 
+struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_map(struct __ecereNameSpace__ecere__com__MapIterator * this)
+{
+return (struct __ecereNameSpace__ecere__com__Instance *)this->container;
+}
+
+void __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(struct __ecereNameSpace__ecere__com__MapIterator * this, struct __ecereNameSpace__ecere__com__Instance * value)
+{
+this->container = (struct __ecereNameSpace__ecere__com__Instance *)value;
+}
+
 struct __ecereNameSpace__ecere__com__AVLNode;
 
 struct __ecereNameSpace__ecere__com__AVLNode
@@ -266,6 +286,16 @@ int depth;
 uint64 key;
 } __attribute__ ((gcc_struct));
 
+const uint64 __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_key(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return this->key;
+}
+
+void __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_key(struct __ecereNameSpace__ecere__com__MapNode * this, const uint64 value)
+{
+this->key = value;
+}
+
 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(struct __ecereNameSpace__ecere__com__AVLNode * this);
 
 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(struct __ecereNameSpace__ecere__com__AVLNode * this);
@@ -276,6 +306,26 @@ struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ece
 
 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Find(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__Class * Tclass, const uint64 key);
 
+struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_prev(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev((void *)(this));
+}
+
+struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_next(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next((void *)(this));
+}
+
+struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_minimum(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum((void *)(this));
+}
+
+struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_maximum(struct __ecereNameSpace__ecere__com__MapNode * this)
+{
+return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum((void *)(this));
+}
+
 struct __ecereNameSpace__ecere__sys__BinaryTree;
 
 struct __ecereNameSpace__ecere__sys__BinaryTree
@@ -364,6 +414,13 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com
 
 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
 
+uint64 __ecereMethod___ecereNameSpace__ecere__com__Map_GetKey(struct __ecereNameSpace__ecere__com__Instance *  this, struct __ecereNameSpace__ecere__com__MapNode *  node);
+
+const uint64 __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(struct __ecereNameSpace__ecere__com__MapIterator * this)
+{
+return __ecereMethod___ecereNameSpace__ecere__com__Map_GetKey(((struct __ecereNameSpace__ecere__com__Instance *)this->container), (struct __ecereNameSpace__ecere__com__MapNode *)this->pointer);
+}
+
 struct __ecereNameSpace__ecere__com__NameSpace;
 
 struct __ecereNameSpace__ecere__com__NameSpace
@@ -494,56 +551,6 @@ struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 } __attribute__ ((gcc_struct));
 
-const uint64 __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_key(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return this->key;
-}
-
-void __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_key(struct __ecereNameSpace__ecere__com__MapNode * this, const uint64 value)
-{
-this->key = value;
-}
-
-uint64 __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_value(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return this ? this->value : (uint64)0;
-}
-
-void __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_value(struct __ecereNameSpace__ecere__com__MapNode * this, uint64 value)
-{
-this->value = value;
-}
-
-struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_prev(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev((void *)(this));
-}
-
-struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_next(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next((void *)(this));
-}
-
-struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_minimum(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum((void *)(this));
-}
-
-struct __ecereNameSpace__ecere__com__MapNode * __ecereProp___ecereNameSpace__ecere__com__MapNode_Get_maximum(struct __ecereNameSpace__ecere__com__MapNode * this)
-{
-return (struct __ecereNameSpace__ecere__com__MapNode *)__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum((void *)(this));
-}
-
-struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_map(struct __ecereNameSpace__ecere__com__MapIterator * this)
-{
-return (struct __ecereNameSpace__ecere__com__Instance *)this->container;
-}
-
-void __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(struct __ecereNameSpace__ecere__com__MapIterator * this, struct __ecereNameSpace__ecere__com__Instance * value)
-{
-this->container = (struct __ecereNameSpace__ecere__com__Instance *)value;
-}
-
 uint64 __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_value(struct __ecereNameSpace__ecere__com__MapIterator * this)
 {
 return ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
@@ -811,6 +818,45 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 }
 }
 
+void __ecereMethod___ecereNameSpace__ecere__com__Map_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * channel)
+{
+unsigned int count = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount])(this);
+struct __ecereNameSpace__ecere__com__IteratorPointer * i;
+struct __ecereNameSpace__ecere__com__Class * Kclass = class->templateArgs[5].__anon1.__anon1.dataTypeClass;
+struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[6].__anon1.__anon1.dataTypeClass;
+unsigned int kIsNormalClass = (Kclass->type == 0) && Kclass->structSize;
+unsigned int dIsNormalClass = (Dclass->type == 0) && Dclass->structSize;
+
+__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(channel, __ecereClass_uint, (void *)&count);
+for(i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst])(this); i; i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(this, i))
+{
+struct __ecereNameSpace__ecere__com__MapNode * srcNode = (struct __ecereNameSpace__ecere__com__MapNode *)i;
+uint64 key = __ecereMethod___ecereNameSpace__ecere__com__Map_GetKey(this, (struct __ecereNameSpace__ecere__com__MapNode *)srcNode);
+uint64 data = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this, (void *)(srcNode));
+struct __ecereNameSpace__ecere__com__Class * kEclass = kIsNormalClass ? ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)((uintptr_t)((uint64)(key)))))->_class : Kclass;
+struct __ecereNameSpace__ecere__com__Class * dEclass = dIsNormalClass ? ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)((uintptr_t)((uint64)(data)))))->_class : Dclass;
+
+((void (*)(void *, void *, void *))(void *)kEclass->_vTbl[__ecereVMethodID_class_OnSerialize])(kEclass, ((Kclass->type == 1000 && !Kclass->byValueSystemClass) || Kclass->type == 2 || Kclass->type == 4 || Kclass->type == 3) ? ((char *)&key + __ENDIAN_PAD(class->templateArgs[5].__anon1.__anon1.dataTypeClass->typeSize)) : (void *)(uintptr_t)key, channel);
+((void (*)(void *, void *, void *))(void *)dEclass->_vTbl[__ecereVMethodID_class_OnSerialize])(dEclass, ((Dclass->type == 1000 && !Dclass->byValueSystemClass) || Dclass->type == 2 || Dclass->type == 4 || Dclass->type == 3) ? ((char *)&data + __ENDIAN_PAD(class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)) : (void *)(uintptr_t)data, channel);
+}
+}
+
 void __ecereMethod___ecereNameSpace__ecere__com__Map_OnUnserialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance ** this, struct __ecereNameSpace__ecere__com__Instance * channel)
 {
 unsigned int c, count;
@@ -856,50 +902,6 @@ __ecerePropM___ecereNameSpace__ecere__com__MapIterator_value = (void *)0;
 __ecerePropM___ecereNameSpace__ecere__com__Map_mapSrc = (void *)0;
 }
 
-const uint64 __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(struct __ecereNameSpace__ecere__com__MapIterator * this)
-{
-return __ecereMethod___ecereNameSpace__ecere__com__Map_GetKey(((struct __ecereNameSpace__ecere__com__Instance *)this->container), (struct __ecereNameSpace__ecere__com__MapNode *)this->pointer);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__Map_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * channel)
-{
-unsigned int count = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount])(this);
-struct __ecereNameSpace__ecere__com__IteratorPointer * i;
-struct __ecereNameSpace__ecere__com__Class * Kclass = class->templateArgs[5].__anon1.__anon1.dataTypeClass;
-struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[6].__anon1.__anon1.dataTypeClass;
-unsigned int kIsNormalClass = (Kclass->type == 0) && Kclass->structSize;
-unsigned int dIsNormalClass = (Dclass->type == 0) && Dclass->structSize;
-
-__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(channel, __ecereClass_uint, (void *)&count);
-for(i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst])(this); i; i = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(this, i))
-{
-struct __ecereNameSpace__ecere__com__MapNode * srcNode = (struct __ecereNameSpace__ecere__com__MapNode *)i;
-uint64 key = __ecereMethod___ecereNameSpace__ecere__com__Map_GetKey(this, (struct __ecereNameSpace__ecere__com__MapNode *)srcNode);
-uint64 data = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData])(this, (void *)(srcNode));
-struct __ecereNameSpace__ecere__com__Class * kEclass = kIsNormalClass ? ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)((uintptr_t)((uint64)(key)))))->_class : Kclass;
-struct __ecereNameSpace__ecere__com__Class * dEclass = dIsNormalClass ? ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)((uintptr_t)((uint64)(data)))))->_class : Dclass;
-
-((void (*)(void *, void *, void *))(void *)kEclass->_vTbl[__ecereVMethodID_class_OnSerialize])(kEclass, ((Kclass->type == 1000 && !Kclass->byValueSystemClass) || Kclass->type == 2 || Kclass->type == 4 || Kclass->type == 3) ? ((char *)&key + __ENDIAN_PAD(class->templateArgs[5].__anon1.__anon1.dataTypeClass->typeSize)) : (void *)(uintptr_t)key, channel);
-((void (*)(void *, void *, void *))(void *)dEclass->_vTbl[__ecereVMethodID_class_OnSerialize])(dEclass, ((Dclass->type == 1000 && !Dclass->byValueSystemClass) || Dclass->type == 2 || Dclass->type == 4 || Dclass->type == 3) ? ((char *)&data + __ENDIAN_PAD(class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)) : (void *)(uintptr_t)data, channel);
-}
-}
-
 void __ecereRegisterModule_Map(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
index 1ab951a..f398f5e 100644 (file)
@@ -87,302 +87,19 @@ extern void *  memcpy(void * , const void * , size_t size);
 
 extern int strcmp(const char * , const char * );
 
-struct __ecereNameSpace__ecere__sys__Item;
-
-struct __ecereNameSpace__ecere__sys__Item
-{
-struct __ecereNameSpace__ecere__sys__Item * prev, * next;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__sys__NamedItem;
-
-struct __ecereNameSpace__ecere__sys__NamedItem
-{
-struct __ecereNameSpace__ecere__sys__NamedItem * prev, * next;
-char * name;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__sys__OldLink;
-
-struct __ecereNameSpace__ecere__sys__OldLink
-{
-struct __ecereNameSpace__ecere__sys__OldLink * prev, * next;
-void * data;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__sys__NamedLink;
-
-struct __ecereNameSpace__ecere__sys__NamedLink
-{
-struct __ecereNameSpace__ecere__sys__NamedLink * prev, * next;
-char * name;
-void * data;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__sys__NamedLink64;
-
-struct __ecereNameSpace__ecere__sys__NamedLink64
-{
-struct __ecereNameSpace__ecere__sys__NamedLink64 * prev, * next;
-char * name;
-long long data;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Class;
-
-struct __ecereNameSpace__ecere__com__Instance
-{
-void * *  _vTbl;
-struct __ecereNameSpace__ecere__com__Class * _class;
-int _refCount;
-} __attribute__ ((gcc_struct));
-
-extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
-
-extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
-
-extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
-
-extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
-
-struct __ecereNameSpace__ecere__com__Property;
-
-struct __ecereNameSpace__ecere__com__Property
-{
-struct __ecereNameSpace__ecere__com__Property * prev;
-struct __ecereNameSpace__ecere__com__Property * next;
-const char *  name;
-unsigned int isProperty;
-int memberAccess;
-int id;
-struct __ecereNameSpace__ecere__com__Class * _class;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-void (*  Set)(void * , int);
-int (*  Get)(void * );
-unsigned int (*  IsSet)(void * );
-void *  data;
-void *  symbol;
-int vid;
-unsigned int conversion;
-unsigned int watcherOffset;
-const char *  category;
-unsigned int compiled;
-unsigned int selfWatchable;
-unsigned int isWatchable;
-} __attribute__ ((gcc_struct));
-
-extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
-
-extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
-
-extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
-
-extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
-
-struct __ecereNameSpace__ecere__sys__BinaryTree;
-
-struct __ecereNameSpace__ecere__sys__BinaryTree
-{
-struct __ecereNameSpace__ecere__sys__BTNode * root;
-int count;
-int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
-void (*  FreeKey)(void *  key);
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Method;
-
-struct __ecereNameSpace__ecere__com__Method
-{
-const char *  name;
-struct __ecereNameSpace__ecere__com__Method * parent;
-struct __ecereNameSpace__ecere__com__Method * left;
-struct __ecereNameSpace__ecere__com__Method * right;
-int depth;
-int (*  function)();
-int vid;
-int type;
-struct __ecereNameSpace__ecere__com__Class * _class;
-void *  symbol;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int memberAccess;
-} __attribute__ ((gcc_struct));
-
-extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
-
-struct __ecereNameSpace__ecere__com__DataMember;
-
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument
-{
-union
-{
-struct
-{
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-} __attribute__ ((gcc_struct)) __anon1;
-struct __ecereNameSpace__ecere__com__DataValue expression;
-struct
-{
-const char *  memberString;
-union
-{
-struct __ecereNameSpace__ecere__com__DataMember * member;
-struct __ecereNameSpace__ecere__com__Property * prop;
-struct __ecereNameSpace__ecere__com__Method * method;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct)) __anon2;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__DataMember
-{
-struct __ecereNameSpace__ecere__com__DataMember * prev;
-struct __ecereNameSpace__ecere__com__DataMember * next;
-const char *  name;
-unsigned int isProperty;
-int memberAccess;
-int id;
-struct __ecereNameSpace__ecere__com__Class * _class;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int type;
-int offset;
-int memberID;
-struct __ecereNameSpace__ecere__sys__OldList members;
-struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
-int memberOffset;
-short structAlignment;
-short pointerAlignment;
-} __attribute__ ((gcc_struct));
-
-extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
-
-struct __ecereNameSpace__ecere__com__Module;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
-
-extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
-
-struct __ecereNameSpace__ecere__com__NameSpace;
-
-struct __ecereNameSpace__ecere__com__NameSpace
-{
-const char *  name;
-struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
-struct __ecereNameSpace__ecere__com__NameSpace *  left;
-struct __ecereNameSpace__ecere__com__NameSpace *  right;
-int depth;
-struct __ecereNameSpace__ecere__com__NameSpace *  parent;
-struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
-struct __ecereNameSpace__ecere__sys__BinaryTree classes;
-struct __ecereNameSpace__ecere__sys__BinaryTree defines;
-struct __ecereNameSpace__ecere__sys__BinaryTree functions;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Class
-{
-struct __ecereNameSpace__ecere__com__Class * prev;
-struct __ecereNameSpace__ecere__com__Class * next;
-const char *  name;
-int offset;
-int structSize;
-void * *  _vTbl;
-int vTblSize;
-unsigned int (*  Constructor)(void * );
-void (*  Destructor)(void * );
-int offsetClass;
-int sizeClass;
-struct __ecereNameSpace__ecere__com__Class * base;
-struct __ecereNameSpace__ecere__sys__BinaryTree methods;
-struct __ecereNameSpace__ecere__sys__BinaryTree members;
-struct __ecereNameSpace__ecere__sys__BinaryTree prop;
-struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
-struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
-struct __ecereNameSpace__ecere__sys__OldList derivatives;
-int memberID;
-int startMemberID;
-int type;
-struct __ecereNameSpace__ecere__com__Instance * module;
-struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
-const char *  dataTypeString;
-struct __ecereNameSpace__ecere__com__Instance * dataType;
-int typeSize;
-int defaultAlignment;
-void (*  Initialize)();
-int memberOffset;
-struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
-const char *  designerClass;
-unsigned int noExpansion;
-const char *  defaultProperty;
-unsigned int comRedefinition;
-int count;
-int isRemote;
-unsigned int internalDecl;
-void *  data;
-unsigned int computeSize;
-short structAlignment;
-short pointerAlignment;
-int destructionWatchOffset;
-unsigned int fixed;
-struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
-int inheritanceAccess;
-const char *  fullName;
-void *  symbol;
-struct __ecereNameSpace__ecere__sys__OldList conversions;
-struct __ecereNameSpace__ecere__sys__OldList templateParams;
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
-struct __ecereNameSpace__ecere__com__Class * templateClass;
-struct __ecereNameSpace__ecere__sys__OldList templatized;
-int numParams;
-unsigned int isInstanceClass;
-unsigned int byValueSystemClass;
-} __attribute__ ((gcc_struct));
-
-struct __ecereNameSpace__ecere__com__Application
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this)
 {
-int argc;
-const char * *  argv;
-int exitCode;
-unsigned int isGUIApp;
-struct __ecereNameSpace__ecere__sys__OldList allModules;
-char *  parsedCommand;
-struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
-} __attribute__ ((gcc_struct));
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__Item;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedItem;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
-
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
+this->offset = 0;
+this->circ = 0;
+this->count = 0;
+this->first = this->last = (((void *)0));
+}
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+struct __ecereNameSpace__ecere__sys__Item;
 
-struct __ecereNameSpace__ecere__com__Module
+struct __ecereNameSpace__ecere__sys__Item
 {
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+struct __ecereNameSpace__ecere__sys__Item * prev, * next;
 } __attribute__ ((gcc_struct));
 
 void __ecereMethod___ecereNameSpace__ecere__sys__Item_Copy(struct __ecereNameSpace__ecere__sys__Item * this, struct __ecereNameSpace__ecere__sys__Item * src, int size)
@@ -390,11 +107,6 @@ void __ecereMethod___ecereNameSpace__ecere__sys__Item_Copy(struct __ecereNameSpa
 memcpy((unsigned char *)this + sizeof(struct __ecereNameSpace__ecere__sys__Item), (unsigned char *)src + sizeof(struct __ecereNameSpace__ecere__sys__Item), size - sizeof(struct __ecereNameSpace__ecere__sys__Item *));
 }
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldLink_Free(struct __ecereNameSpace__ecere__sys__OldLink * this)
-{
-(__ecereNameSpace__ecere__com__eSystem_Delete(this->data), this->data = 0);
-}
-
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item)
 {
 if(item)
@@ -511,14 +223,6 @@ this->first = this->last = (((void *)0));
 this->count = 0;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this)
-{
-this->offset = 0;
-this->circ = 0;
-this->count = 0;
-this->first = this->last = (((void *)0));
-}
-
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move(struct __ecereNameSpace__ecere__sys__OldList * this, void * item, void * prevItem)
 {
 if(item)
@@ -591,6 +295,71 @@ if(link2->prev)
 ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)link2->prev + this->offset))->next = item1;
 }
 
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Copy(struct __ecereNameSpace__ecere__sys__OldList * this, struct __ecereNameSpace__ecere__sys__OldList * src, int size, void (* copy)(void * dest, void * src))
+{
+struct __ecereNameSpace__ecere__sys__Item * item;
+
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(this);
+for(item = src->first; item; item = item->next)
+{
+struct __ecereNameSpace__ecere__sys__Item * newItem = (struct __ecereNameSpace__ecere__sys__Item *)__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (size));
+
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, newItem);
+__ecereMethod___ecereNameSpace__ecere__sys__Item_Copy(newItem, item, size);
+if(copy)
+copy(newItem, item);
+}
+}
+
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Merge(struct __ecereNameSpace__ecere__sys__OldList * this, struct __ecereNameSpace__ecere__sys__OldList * list1, struct __ecereNameSpace__ecere__sys__OldList * list2, int (* compare)(void *, void *, void *), void * data)
+{
+void * item;
+
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(this);
+this->offset = list1->offset;
+while((list1->first && list2->first))
+{
+if(compare(list1->first, list2->first, data) <= 0)
+{
+item = list1->first;
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list1, item);
+}
+else
+{
+item = list2->first;
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list2, item);
+}
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
+}
+while((item = list1->first))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list1, item);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
+}
+while((item = list2->first))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list2, item);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
+}
+}
+
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Delete(struct __ecereNameSpace__ecere__sys__OldList * this, void * item)
+{
+if(item)
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(this, item);
+(__ecereNameSpace__ecere__com__eSystem_Delete(item), item = 0);
+}
+}
+
+struct __ecereNameSpace__ecere__sys__NamedItem;
+
+struct __ecereNameSpace__ecere__sys__NamedItem
+{
+struct __ecereNameSpace__ecere__sys__NamedItem * prev, * next;
+char * name;
+} __attribute__ ((gcc_struct));
+
 void * __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindName(struct __ecereNameSpace__ecere__sys__OldList * this, const char * name, unsigned int warn)
 {
 void * result = (((void *)0));
@@ -639,6 +408,33 @@ else
 return result;
 }
 
+unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName(struct __ecereNameSpace__ecere__sys__OldList * this, void * item)
+{
+unsigned int result = 0;
+void * place;
+struct __ecereNameSpace__ecere__sys__NamedItem * link = ((struct __ecereNameSpace__ecere__sys__NamedItem *)((unsigned char *)item + this->offset));
+
+if(__ecereMethod___ecereNameSpace__ecere__sys__OldList_PlaceName(this, link->name, &place))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(this, place, item);
+result = 1;
+}
+return result;
+}
+
+struct __ecereNameSpace__ecere__sys__OldLink;
+
+struct __ecereNameSpace__ecere__sys__OldLink
+{
+struct __ecereNameSpace__ecere__sys__OldLink * prev, * next;
+void * data;
+} __attribute__ ((gcc_struct));
+
+void __ecereMethod___ecereNameSpace__ecere__sys__OldLink_Free(struct __ecereNameSpace__ecere__sys__OldLink * this)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(this->data), this->data = 0);
+}
+
 struct __ecereNameSpace__ecere__sys__OldLink * __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindLink(struct __ecereNameSpace__ecere__sys__OldList * this, void * data)
 {
 void * item;
@@ -653,94 +449,322 @@ break;
 return item;
 }
 
-void __ecereUnregisterModule_OldList(struct __ecereNameSpace__ecere__com__Instance * module)
-{
+struct __ecereNameSpace__ecere__sys__NamedLink;
+
+struct __ecereNameSpace__ecere__sys__NamedLink
+{
+struct __ecereNameSpace__ecere__sys__NamedLink * prev, * next;
+char * name;
+void * data;
+} __attribute__ ((gcc_struct));
+
+void * __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindNamedLink(struct __ecereNameSpace__ecere__sys__OldList * this, const char * name, unsigned int warn)
+{
+if(name)
+{
+void * item = __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindName(this, name, warn);
+
+return item ? ((struct __ecereNameSpace__ecere__sys__NamedLink *)((unsigned char *)item + this->offset))->data : (((void *)0));
+}
+return (((void *)0));
+}
+
+struct __ecereNameSpace__ecere__sys__NamedLink64;
+
+struct __ecereNameSpace__ecere__sys__NamedLink64
+{
+struct __ecereNameSpace__ecere__sys__NamedLink64 * prev, * next;
+char * name;
+long long data;
+} __attribute__ ((gcc_struct));
+
+struct __ecereNameSpace__ecere__com__Class;
+
+struct __ecereNameSpace__ecere__com__Instance
+{
+void * *  _vTbl;
+struct __ecereNameSpace__ecere__com__Class * _class;
+int _refCount;
+} __attribute__ ((gcc_struct));
+
+extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
+
+extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
+
+extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
+
+extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
+
+struct __ecereNameSpace__ecere__com__Property;
+
+struct __ecereNameSpace__ecere__com__Property
+{
+struct __ecereNameSpace__ecere__com__Property * prev;
+struct __ecereNameSpace__ecere__com__Property * next;
+const char *  name;
+unsigned int isProperty;
+int memberAccess;
+int id;
+struct __ecereNameSpace__ecere__com__Class * _class;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+void (*  Set)(void * , int);
+int (*  Get)(void * );
+unsigned int (*  IsSet)(void * );
+void *  data;
+void *  symbol;
+int vid;
+unsigned int conversion;
+unsigned int watcherOffset;
+const char *  category;
+unsigned int compiled;
+unsigned int selfWatchable;
+unsigned int isWatchable;
+} __attribute__ ((gcc_struct));
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
+
+extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+struct __ecereNameSpace__ecere__sys__BinaryTree;
+
+struct __ecereNameSpace__ecere__sys__BinaryTree
+{
+struct __ecereNameSpace__ecere__sys__BTNode * root;
+int count;
+int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
+void (*  FreeKey)(void *  key);
+} __attribute__ ((gcc_struct));
+
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(struct __ecereNameSpace__ecere__sys__OldList *  this, int (*  compare)(void * , void * , void * ), void *  data);
+
+void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(struct __ecereNameSpace__ecere__sys__OldList * this, int (* compare)(void *, void *, void *), void * data)
+{
+if(this->first && ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)this->first + this->offset))->next)
+{
+struct __ecereNameSpace__ecere__sys__OldList list1, list2;
+void * middle, * end;
+
+for(middle = this->first, list1.count = 0, list2.count = 0, end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)this->first + this->offset))->next; middle && end; middle = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)middle + this->offset))->next, list1.count++, end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)end + this->offset))->next, list2.count++)
+{
+end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)end + this->offset))->next;
+if(!end)
+break;
+}
+list1.offset = this->offset;
+list2.offset = this->offset;
+list1.circ = this->circ;
+list2.circ = this->circ;
+list1.first = this->first;
+list1.last = middle;
+list2.first = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)middle + this->offset))->next;
+list2.last = this->last;
+((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)list1.last + this->offset))->next = (((void *)0));
+((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)list2.first + this->offset))->prev = (((void *)0));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(&list1, compare, data);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(&list2, compare, data);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Merge(this, &list1, &list2, compare, data);
+}
+}
+
+struct __ecereNameSpace__ecere__com__Method;
+
+struct __ecereNameSpace__ecere__com__Method
+{
+const char *  name;
+struct __ecereNameSpace__ecere__com__Method * parent;
+struct __ecereNameSpace__ecere__com__Method * left;
+struct __ecereNameSpace__ecere__com__Method * right;
+int depth;
+int (*  function)();
+int vid;
+int type;
+struct __ecereNameSpace__ecere__com__Class * _class;
+void *  symbol;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int memberAccess;
+} __attribute__ ((gcc_struct));
+
+extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
 
-}
+struct __ecereNameSpace__ecere__com__DataMember;
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Delete(struct __ecereNameSpace__ecere__sys__OldList * this, void * item)
-{
-if(item)
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(this, item);
-(__ecereNameSpace__ecere__com__eSystem_Delete(item), item = 0);
-}
-}
-
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Merge(struct __ecereNameSpace__ecere__sys__OldList * this, struct __ecereNameSpace__ecere__sys__OldList * list1, struct __ecereNameSpace__ecere__sys__OldList * list2, int (* compare)(void *, void *, void *), void * data)
+union
 {
-void * item;
-
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(this);
-this->offset = list1->offset;
-while((list1->first && list2->first))
+struct
 {
-if(compare(list1->first, list2->first, data) <= 0)
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+} __attribute__ ((gcc_struct)) __anon1;
+struct __ecereNameSpace__ecere__com__DataValue expression;
+struct
 {
-item = list1->first;
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list1, item);
-}
-else
+const char *  memberString;
+union
 {
-item = list2->first;
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list2, item);
-}
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
-}
-while((item = list1->first))
+struct __ecereNameSpace__ecere__com__DataMember * member;
+struct __ecereNameSpace__ecere__com__Property * prop;
+struct __ecereNameSpace__ecere__com__Method * method;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct)) __anon2;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct));
+
+struct __ecereNameSpace__ecere__com__DataMember
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list1, item);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
-}
-while((item = list2->first))
+struct __ecereNameSpace__ecere__com__DataMember * prev;
+struct __ecereNameSpace__ecere__com__DataMember * next;
+const char *  name;
+unsigned int isProperty;
+int memberAccess;
+int id;
+struct __ecereNameSpace__ecere__com__Class * _class;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int type;
+int offset;
+int memberID;
+struct __ecereNameSpace__ecere__sys__OldList members;
+struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
+int memberOffset;
+short structAlignment;
+short pointerAlignment;
+} __attribute__ ((gcc_struct));
+
+extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
+
+struct __ecereNameSpace__ecere__com__Module;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
+
+extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
+
+struct __ecereNameSpace__ecere__com__NameSpace;
+
+struct __ecereNameSpace__ecere__com__NameSpace
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(list2, item);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, item);
-}
-}
+const char *  name;
+struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
+struct __ecereNameSpace__ecere__com__NameSpace *  left;
+struct __ecereNameSpace__ecere__com__NameSpace *  right;
+int depth;
+struct __ecereNameSpace__ecere__com__NameSpace *  parent;
+struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
+struct __ecereNameSpace__ecere__sys__BinaryTree classes;
+struct __ecereNameSpace__ecere__sys__BinaryTree defines;
+struct __ecereNameSpace__ecere__sys__BinaryTree functions;
+} __attribute__ ((gcc_struct));
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Copy(struct __ecereNameSpace__ecere__sys__OldList * this, struct __ecereNameSpace__ecere__sys__OldList * src, int size, void (* copy)(void * dest, void * src))
+struct __ecereNameSpace__ecere__com__Class
 {
-struct __ecereNameSpace__ecere__sys__Item * item;
+struct __ecereNameSpace__ecere__com__Class * prev;
+struct __ecereNameSpace__ecere__com__Class * next;
+const char *  name;
+int offset;
+int structSize;
+void * *  _vTbl;
+int vTblSize;
+unsigned int (*  Constructor)(void * );
+void (*  Destructor)(void * );
+int offsetClass;
+int sizeClass;
+struct __ecereNameSpace__ecere__com__Class * base;
+struct __ecereNameSpace__ecere__sys__BinaryTree methods;
+struct __ecereNameSpace__ecere__sys__BinaryTree members;
+struct __ecereNameSpace__ecere__sys__BinaryTree prop;
+struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
+struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
+struct __ecereNameSpace__ecere__sys__OldList derivatives;
+int memberID;
+int startMemberID;
+int type;
+struct __ecereNameSpace__ecere__com__Instance * module;
+struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
+const char *  dataTypeString;
+struct __ecereNameSpace__ecere__com__Instance * dataType;
+int typeSize;
+int defaultAlignment;
+void (*  Initialize)();
+int memberOffset;
+struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
+const char *  designerClass;
+unsigned int noExpansion;
+const char *  defaultProperty;
+unsigned int comRedefinition;
+int count;
+int isRemote;
+unsigned int internalDecl;
+void *  data;
+unsigned int computeSize;
+short structAlignment;
+short pointerAlignment;
+int destructionWatchOffset;
+unsigned int fixed;
+struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
+int inheritanceAccess;
+const char *  fullName;
+void *  symbol;
+struct __ecereNameSpace__ecere__sys__OldList conversions;
+struct __ecereNameSpace__ecere__sys__OldList templateParams;
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
+struct __ecereNameSpace__ecere__com__Class * templateClass;
+struct __ecereNameSpace__ecere__sys__OldList templatized;
+int numParams;
+unsigned int isInstanceClass;
+unsigned int byValueSystemClass;
+} __attribute__ ((gcc_struct));
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(this);
-for(item = src->first; item; item = item->next)
+struct __ecereNameSpace__ecere__com__Application
 {
-struct __ecereNameSpace__ecere__sys__Item * newItem = (struct __ecereNameSpace__ecere__sys__Item *)__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (size));
+int argc;
+const char * *  argv;
+int exitCode;
+unsigned int isGUIApp;
+struct __ecereNameSpace__ecere__sys__OldList allModules;
+char *  parsedCommand;
+struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
+} __attribute__ ((gcc_struct));
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(this, newItem);
-__ecereMethod___ecereNameSpace__ecere__sys__Item_Copy(newItem, item, size);
-if(copy)
-copy(newItem, item);
-}
-}
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__Item;
 
-void * __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindNamedLink(struct __ecereNameSpace__ecere__sys__OldList * this, const char * name, unsigned int warn)
-{
-if(name)
-{
-void * item = __ecereMethod___ecereNameSpace__ecere__sys__OldList_FindName(this, name, warn);
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedItem;
 
-return item ? ((struct __ecereNameSpace__ecere__sys__NamedLink *)((unsigned char *)item + this->offset))->data : (((void *)0));
-}
-return (((void *)0));
-}
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
 
-unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName(struct __ecereNameSpace__ecere__sys__OldList * this, void * item)
-{
-unsigned int result = 0;
-void * place;
-struct __ecereNameSpace__ecere__sys__NamedItem * link = ((struct __ecereNameSpace__ecere__sys__NamedItem *)((unsigned char *)item + this->offset));
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
 
-if(__ecereMethod___ecereNameSpace__ecere__sys__OldList_PlaceName(this, link->name, &place))
-{
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(this, place, item);
-result = 1;
-}
-return result;
-}
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(struct __ecereNameSpace__ecere__sys__OldList *  this, int (*  compare)(void * , void * , void * ), void *  data);
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+struct __ecereNameSpace__ecere__com__Module
+{
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
 
 void __ecereRegisterModule_OldList(struct __ecereNameSpace__ecere__com__Instance * module)
 {
@@ -817,32 +841,8 @@ if(class)
 class->fixed = (unsigned int)1;
 }
 
-void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(struct __ecereNameSpace__ecere__sys__OldList * this, int (* compare)(void *, void *, void *), void * data)
-{
-if(this->first && ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)this->first + this->offset))->next)
+void __ecereUnregisterModule_OldList(struct __ecereNameSpace__ecere__com__Instance * module)
 {
-struct __ecereNameSpace__ecere__sys__OldList list1, list2;
-void * middle, * end;
 
-for(middle = this->first, list1.count = 0, list2.count = 0, end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)this->first + this->offset))->next; middle && end; middle = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)middle + this->offset))->next, list1.count++, end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)end + this->offset))->next, list2.count++)
-{
-end = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)end + this->offset))->next;
-if(!end)
-break;
-}
-list1.offset = this->offset;
-list2.offset = this->offset;
-list1.circ = this->circ;
-list2.circ = this->circ;
-list1.first = this->first;
-list1.last = middle;
-list2.first = ((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)middle + this->offset))->next;
-list2.last = this->last;
-((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)list1.last + this->offset))->next = (((void *)0));
-((struct __ecereNameSpace__ecere__sys__Item *)((unsigned char *)list2.first + this->offset))->prev = (((void *)0));
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(&list1, compare, data);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Sort(&list2, compare, data);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Merge(this, &list1, &list2, compare, data);
-}
 }
 
index 3eb619c..74b8029 100644 (file)
@@ -123,9 +123,21 @@ unsigned int System_Execute(const char * env, const char * command, va_list args
 
 unsigned int System_ShellOpen(const char * fileName, va_list args);
 
+void System_GetFreeSpace(const char * path, uint64 * size);
 
 
 
+
+struct __ecereNameSpace__ecere__sys__System
+{
+int errorLoggingMode;
+char * errorBuffer;
+int errorBufferSize;
+char logFile[797];
+unsigned int lastErrorCode;
+int errorLevel;
+} __attribute__ ((gcc_struct));
+
 struct __ecereNameSpace__ecere__sys__BTNode;
 
 struct __ecereNameSpace__ecere__sys__OldList
@@ -298,12 +310,46 @@ __builtin_va_end(args);
 return result;
 }
 
+void __ecereNameSpace__ecere__sys__GetFreeSpace(const char * path, uint64 * size)
+{
+System_GetFreeSpace(path, size);
+}
+
+struct __ecereNameSpace__ecere__sys__System __ecereNameSpace__ecere__sys__globalSystem;
+
 static struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__errorMessages;
 
 static struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__sysErrorMessages;
 
 static struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__guiErrorMessages;
 
+void __ecereNameSpace__ecere__sys__DumpErrors(unsigned int display)
+{
+if(__ecereNameSpace__ecere__sys__globalSystem.errorBuffer && __ecereNameSpace__ecere__sys__globalSystem.errorBuffer[0])
+{
+if(display)
+{
+printf("%s", __ecereNameSpace__ecere__sys__globalSystem.errorBuffer);
+}
+__ecereNameSpace__ecere__sys__globalSystem.errorBuffer[0] = '\0';
+}
+}
+
+unsigned int __ecereNameSpace__ecere__sys__GetLastErrorCode()
+{
+return (unsigned int)__ecereNameSpace__ecere__sys__globalSystem.lastErrorCode;
+}
+
+void __ecereNameSpace__ecere__sys__ResetError()
+{
+__ecereNameSpace__ecere__sys__globalSystem.lastErrorCode = 0;
+}
+
+void __ecereNameSpace__ecere__sys__SetErrorLevel(int level)
+{
+__ecereNameSpace__ecere__sys__globalSystem.errorLevel = level;
+}
+
 struct __ecereNameSpace__ecere__com__Class;
 
 struct __ecereNameSpace__ecere__com__Instance
@@ -337,23 +383,6 @@ extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereName
 
 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
 
-void System_GetFreeSpace(const char * path, struct __ecereNameSpace__ecere__com__Instance ** size);
-
-struct __ecereNameSpace__ecere__sys__System
-{
-int errorLoggingMode;
-char * errorBuffer;
-int errorBufferSize;
-char logFile[797];
-unsigned int lastErrorCode;
-int errorLevel;
-struct __ecereNameSpace__ecere__com__Instance * eventSemaphore;
-struct __ecereNameSpace__ecere__sys__OldList fileMonitors;
-struct __ecereNameSpace__ecere__com__Instance * fileMonitorMutex;
-struct __ecereNameSpace__ecere__com__Instance * fileMonitorThread;
-unsigned int systemTerminate;
-} __attribute__ ((gcc_struct));
-
 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__FileOpen(const char *  fileName, int mode);
 
 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts;
@@ -362,47 +391,6 @@ extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpa
 
 void __ecereProp___ecereNameSpace__ecere__com__Container_Set_copySrc(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * value);
 
-void __ecereNameSpace__ecere__sys__GetFreeSpace(const char * path, struct __ecereNameSpace__ecere__com__Instance ** size)
-{
-System_GetFreeSpace(path, size);
-}
-
-struct __ecereNameSpace__ecere__sys__System __ecereNameSpace__ecere__sys__globalSystem;
-
-void __ecereDestroyModuleInstances_System()
-{
-(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__errorMessages), __ecereNameSpace__ecere__sys__errorMessages = 0);
-(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__guiErrorMessages), __ecereNameSpace__ecere__sys__guiErrorMessages = 0);
-(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__sysErrorMessages), __ecereNameSpace__ecere__sys__sysErrorMessages = 0);
-}
-
-void __ecereNameSpace__ecere__sys__DumpErrors(unsigned int display)
-{
-if(__ecereNameSpace__ecere__sys__globalSystem.errorBuffer && __ecereNameSpace__ecere__sys__globalSystem.errorBuffer[0])
-{
-if(display)
-{
-printf("%s", __ecereNameSpace__ecere__sys__globalSystem.errorBuffer);
-}
-__ecereNameSpace__ecere__sys__globalSystem.errorBuffer[0] = '\0';
-}
-}
-
-unsigned int __ecereNameSpace__ecere__sys__GetLastErrorCode()
-{
-return (unsigned int)__ecereNameSpace__ecere__sys__globalSystem.lastErrorCode;
-}
-
-void __ecereNameSpace__ecere__sys__ResetError()
-{
-__ecereNameSpace__ecere__sys__globalSystem.lastErrorCode = 0;
-}
-
-void __ecereNameSpace__ecere__sys__SetErrorLevel(int level)
-{
-__ecereNameSpace__ecere__sys__globalSystem.errorLevel = level;
-}
-
 void __ecereNameSpace__ecere__sys__SetLoggingMode(int mode, void * where)
 {
 __ecereNameSpace__ecere__sys__globalSystem.errorLoggingMode = mode;
@@ -437,6 +425,13 @@ __ecereNameSpace__ecere__sys__globalSystem.errorBufferSize = 0;
 }
 }
 
+void __ecereDestroyModuleInstances_System()
+{
+(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__errorMessages), __ecereNameSpace__ecere__sys__errorMessages = 0);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__guiErrorMessages), __ecereNameSpace__ecere__sys__guiErrorMessages = 0);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(__ecereNameSpace__ecere__sys__sysErrorMessages), __ecereNameSpace__ecere__sys__sysErrorMessages = 0);
+}
+
 struct __ecereNameSpace__ecere__com__Property;
 
 struct __ecereNameSpace__ecere__com__Property
@@ -853,7 +848,7 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::Execute", "b
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ExecuteWait", "bool ecere::sys::ExecuteWait(const char * command, ...)", __ecereNameSpace__ecere__sys__ExecuteWait, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ExecuteEnv", "bool ecere::sys::ExecuteEnv(const char * env, const char * command, ...)", __ecereNameSpace__ecere__sys__ExecuteEnv, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ShellOpen", "bool ecere::sys::ShellOpen(const char * fileName, ...)", __ecereNameSpace__ecere__sys__ShellOpen, module, 1);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetFreeSpace", "void ecere::sys::GetFreeSpace(const char * path, FileSize64 * size)", __ecereNameSpace__ecere__sys__GetFreeSpace, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetFreeSpace", "void ecere::sys::GetFreeSpace(const char * path, ecere::sys::FileSize64 * size)", __ecereNameSpace__ecere__sys__GetFreeSpace, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::Logf", "void ecere::sys::Logf(const char * format, ...)", __ecereNameSpace__ecere__sys__Logf, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::Log", "void ecere::sys::Log(const char * text)", __ecereNameSpace__ecere__sys__Log, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::DumpErrors", "void ecere::sys::DumpErrors(bool display)", __ecereNameSpace__ecere__sys__DumpErrors, module, 1);
@@ -871,10 +866,5 @@ __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "errorBufferSize", "in
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "logFile", "char[MAX_LOCATION]", 797, 1, 1);
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "lastErrorCode", "ecere::sys::ErrorCode", 4, 4, 1);
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "errorLevel", "ecere::sys::ErrorLevel", 4, 4, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "eventSemaphore", "Semaphore", sizeof(void *), 0xF000F000, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "fileMonitors", "ecere::sys::OldList", sizeof(struct __ecereNameSpace__ecere__sys__OldList), 8, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "fileMonitorMutex", "Mutex", sizeof(void *), 0xF000F000, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "fileMonitorThread", "Thread", sizeof(void *), 0xF000F000, 1);
-__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "systemTerminate", "bool", 4, 4, 1);
 }
 
index c508238..06047d9 100644 (file)
@@ -1159,6 +1159,26 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__StaticString;
 
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data)
+{
+((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnSerialize])(class, data, this);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * * data)
+{
+((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnUnserialize])(class, data, this);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data)
+{
+((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnSerialize])(class, data, this);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * * data)
+{
+((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnUnserialize])(class, data, this);
+}
+
 const char * __ecereNameSpace__ecere__com__Enum_OnGetString(struct __ecereNameSpace__ecere__com__Class * _class, void * data, char * tempString, void * fieldData, unsigned int * needClass)
 {
 struct __ecereNameSpace__ecere__sys__NamedLink64 * item = (((void *)0));
@@ -1403,6 +1423,28 @@ __ecereNameSpace__ecere__com__DataMember_OnUnserialize(member, (unsigned char *)
 return 0;
 }
 
+int __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__StaticString * string2)
+{
+int result = 0;
+
+if(this && string2)
+result = (strcasecmp)(this->string, string2->string);
+else if(!this && string2)
+result = -1;
+else if(this && !string2)
+result = 1;
+return result;
+}
+
+const char * __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, char * tempString, void * fieldData, unsigned int * needClass)
+{
+return this ? this->string : (((void *)0));
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this)
+{
+}
+
 int __ecereNameSpace__ecere__com__PrintStdArgsToBuffer(char * buffer, int maxLen, struct __ecereNameSpace__ecere__com__Class * class, const void * object, va_list args)
 {
 int len = 0;
@@ -1474,26 +1516,6 @@ struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 } __attribute__ ((gcc_struct));
 
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data)
-{
-((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnSerialize])(class, data, this);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * * data)
-{
-((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnUnserialize])(class, data, this);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, const void * data)
-{
-((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnSerialize])(class, data, this);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * * data)
-{
-((void (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, struct __ecereNameSpace__ecere__com__Instance * channel))class->_vTbl[__ecereVMethodID_class_OnUnserialize])(class, data, this);
-}
-
 void __ecereNameSpace__ecere__com__Byte_OnSerialize(struct __ecereNameSpace__ecere__com__Class * _class, unsigned char * data, struct __ecereNameSpace__ecere__com__Instance * channel)
 {
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  data, unsigned int numBytes))__extension__ ({
@@ -1705,6 +1727,33 @@ else
 *data = 0;
 }
 
+void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__Instance * channel)
+{
+unsigned int len = this ? strlen(this->string) : 0;
+
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  data, unsigned int numBytes))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = channel;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__IOChannel->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__IOChannel_WriteData])(channel, this ? this->string : "", len + 1);
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnUnserialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__Instance * channel)
+{
+if(this)
+{
+int c;
+
+for(c = 0; ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  data, unsigned int numBytes))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = channel;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__IOChannel->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__com__IOChannel_ReadData])(channel, &(*this).string[c], 1) && (*this).string[c]; c++)
+;
+(*this).string[c++] = '\0';
+}
+}
+
 static void __ecereNameSpace__ecere__com__String_OnSerialize(struct __ecereNameSpace__ecere__com__Class * _class, char * string, struct __ecereNameSpace__ecere__com__Instance * channel)
 {
 int len = string ? strlen(string) : 0;
@@ -1828,55 +1877,6 @@ __ecerePointer___ecereNameSpace__ecere__com__SerialBuffer->count = value;
 __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(this, __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_size), __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(this, __ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_size);
 }
 
-void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__Instance * channel)
-{
-unsigned int len = this ? strlen(this->string) : 0;
-
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  data, unsigned int numBytes))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = channel;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__IOChannel->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__IOChannel_WriteData])(channel, this ? this->string : "", len + 1);
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnUnserialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__Instance * channel)
-{
-if(this)
-{
-int c;
-
-for(c = 0; ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  data, unsigned int numBytes))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = channel;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__IOChannel->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__com__IOChannel_ReadData])(channel, &(*this).string[c], 1) && (*this).string[c]; c++)
-;
-(*this).string[c++] = '\0';
-}
-}
-
-int __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, struct __ecereNameSpace__ecere__com__StaticString * string2)
-{
-int result = 0;
-
-if(this && string2)
-result = (strcasecmp)(this->string, string2->string);
-else if(!this && string2)
-result = -1;
-else if(this && !string2)
-result = 1;
-return result;
-}
-
-const char * __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this, char * tempString, void * fieldData, unsigned int * needClass)
-{
-return this ? this->string : (((void *)0));
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__StaticString_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__StaticString * this)
-{
-}
-
 static int __ecereNameSpace__ecere__com__OnCompare(struct __ecereNameSpace__ecere__com__Class * _class, void * data1, void * data2)
 {
 struct __ecereNameSpace__ecere__com__Instance * module = _class->module;
index fbf6307..d795aa4 100644 (file)
@@ -1049,6 +1049,19 @@ break;
 return sign * value;
 }
 
+int __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(const char *  value)
+{
+if(value)
+{
+int c;
+
+for(c = __ecereNameSpace__ecere__com__firstPlatform; c <= __ecereNameSpace__ecere__com__lastPlatform; c++)
+if(!strcasecmp(value, __ecereNameSpace__ecere__com__platformNames[c]))
+return c;
+}
+return 0;
+}
+
 struct __ecereNameSpace__ecere__com__Class;
 
 struct __ecereNameSpace__ecere__com__Instance
@@ -1209,67 +1222,199 @@ struct __ecereNameSpace__ecere__com__MemPart * part;
 unsigned int size;
 } __attribute__ ((gcc_struct));
 
-static void *  __ecereNameSpace__ecere__com___mymalloc(unsigned int size);
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(struct __ecereNameSpace__ecere__com__BlockPool * this, unsigned int numBlocks)
+{
+unsigned char * memory = malloc(numBlocks * this->blockSpace);
 
-static void * __ecereNameSpace__ecere__com___mycalloc(int n, unsigned int size)
+__ecereNameSpace__ecere__com__TOTAL_MEM += numBlocks * this->blockSpace;
+if(memory)
 {
-void * pointer = __ecereNameSpace__ecere__com___mymalloc(n * size);
+int c;
+struct __ecereNameSpace__ecere__com__MemBlock * block = (struct __ecereNameSpace__ecere__com__MemBlock *)memory;
+struct __ecereNameSpace__ecere__com__MemPart * part = calloc(1, sizeof(struct __ecereNameSpace__ecere__com__MemPart));
 
-if(pointer)
-memset(pointer, 0, n * size);
-return pointer;
+__ecereNameSpace__ecere__com__TOTAL_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemPart);
+this->free = block;
+for(c = 0; c < numBlocks - 1; c++)
+{
+block->part = part;
+block->prev = (((void *)0));
+block->next = (struct __ecereNameSpace__ecere__com__MemBlock *)((unsigned char *)block + this->blockSpace);
+block = block->next;
+}
+part->blocksUsed = 0;
+part->pool = this;
+part->memory = memory;
+part->size = numBlocks;
+block->part = part;
+block->prev = (((void *)0));
+block->next = (((void *)0));
+this->totalSize += numBlocks;
+this->numParts++;
+return 1;
+}
+return 0;
 }
 
-static void * __ecereNameSpace__ecere__com___malloc(unsigned int size)
+void __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove(struct __ecereNameSpace__ecere__com__BlockPool * this, struct __ecereNameSpace__ecere__com__MemBlock * block)
 {
-void * pointer;
+if(block->prev)
+block->prev->next = block->next;
+if(block->next)
+block->next->prev = block->prev;
+if(this->first == block)
+this->first = block->next;
+if(this->last == block)
+this->last = block->prev;
+block->next = this->free;
+this->free = block;
+block->part->blocksUsed--;
+this->numBlocks--;
+(*block->part->pool).usedSpace -= block->size;
+if(!block->part->blocksUsed && this->numBlocks && this->totalSize > this->numBlocks + this->numBlocks / 2)
+{
+struct __ecereNameSpace__ecere__com__MemBlock * next = this->free, * prev = (((void *)0));
+struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
 
-pointer = size ? __ecereNameSpace__ecere__com___mymalloc(size + 2 * 0) : (((void *)0));
-return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
+this->free = (((void *)0));
+this->totalSize -= part->size;
+while(next)
+{
+if(next->part != part)
+{
+if(prev)
+prev->next = next;
+else
+this->free = next;
+prev = next;
+}
+next = next->next;
+}
+;
+if(prev)
+prev->next = (((void *)0));
+__ecereNameSpace__ecere__com__TOTAL_MEM -= part->size * this->blockSpace;
+__ecereNameSpace__ecere__com__TOTAL_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemPart);
+this->numParts--;
+free(part->memory);
+free(part);
+}
 }
 
-static void * __ecereNameSpace__ecere__com___calloc(int n, unsigned int size)
+struct __ecereNameSpace__ecere__com__MemBlock * __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Add(struct __ecereNameSpace__ecere__com__BlockPool * this)
 {
-void * pointer;
+int __simpleStruct0;
+struct __ecereNameSpace__ecere__com__MemBlock * block = (((void *)0));
 
-pointer = (n * size) ? __ecereNameSpace__ecere__com___mycalloc(1, n * size + 2 * 0) : (((void *)0));
-return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
+if(!this->free)
+__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(this, (__simpleStruct0 = this->numBlocks / 2, (1 > __simpleStruct0) ? 1 : __simpleStruct0));
+if(this->free)
+{
+block = this->free;
+block->prev = this->last;
+if(block->prev)
+block->prev->next = block;
+if(!this->first)
+this->first = block;
+this->last = block;
+this->free = block->next;
+block->next = (((void *)0));
+block->part->blocksUsed++;
+this->numBlocks++;
+}
+return block;
 }
 
-void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size)
+static void __ecereNameSpace__ecere__com__InitMemory()
 {
-return __ecereNameSpace__ecere__com___malloc(size);
-}
+int c;
 
-void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size)
+__ecereNameSpace__ecere__com__memoryInitialized = 1;
+__ecereNameSpace__ecere__com__pools = calloc(1, sizeof(struct __ecereNameSpace__ecere__com__BlockPool) * 31);
+for(c = 0; c < 31; c++)
 {
-return __ecereNameSpace__ecere__com___calloc(1, size);
+int expansion;
+
+__ecereNameSpace__ecere__com__pools[c].blockSize = __ecereNameSpace__ecere__com__pow1_5(c);
+if(__ecereNameSpace__ecere__com__pools[c].blockSize % sizeof(void *))
+__ecereNameSpace__ecere__com__pools[c].blockSize += sizeof(void *) - (__ecereNameSpace__ecere__com__pools[c].blockSize % sizeof(void *));
+__ecereNameSpace__ecere__com__pools[c].blockSpace = __ecereNameSpace__ecere__com__pools[c].blockSize;
+__ecereNameSpace__ecere__com__pools[c].blockSpace += sizeof(struct __ecereNameSpace__ecere__com__MemBlock);
+expansion = (__ecereNameSpace__ecere__com__pools[c].blockSize < 128) ? 1024 : (131072 / __ecereNameSpace__ecere__com__pools[c].blockSize);
+if(c < 12)
+__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(&__ecereNameSpace__ecere__com__pools[c], ((1 > expansion) ? 1 : expansion));
+}
 }
 
-static void __ecereNameSpace__ecere__com___free(void *  pointer);
+static void __ecereNameSpace__ecere__com___myfree(void * pointer)
+{
+if(pointer)
+{
+struct __ecereNameSpace__ecere__com__MemBlock * block = (struct __ecereNameSpace__ecere__com__MemBlock *)((unsigned char *)pointer - sizeof(struct __ecereNameSpace__ecere__com__MemBlock));
+struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
+struct __ecereNameSpace__ecere__com__BlockPool * pool = part ? part->pool : (((void *)0));
 
-void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory)
+if(pool)
+__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove((&*pool), block);
+else
 {
-if(memory)
-__ecereNameSpace__ecere__com___free(memory);
+__ecereNameSpace__ecere__com__TOTAL_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + block->size;
+__ecereNameSpace__ecere__com__OUTSIDE_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + block->size;
+free(block);
+}
+}
 }
 
-static void *  __ecereNameSpace__ecere__com___mycrealloc(void *  pointer, unsigned int size);
+static void * __ecereNameSpace__ecere__com___mymalloc(unsigned int size)
+{
+struct __ecereNameSpace__ecere__com__MemBlock * block = (((void *)0));
 
-static void * __ecereNameSpace__ecere__com___crealloc(void * pointer, unsigned int size)
+if(size)
 {
-if(!size)
-return (((void *)0));
-pointer = __ecereNameSpace__ecere__com___mycrealloc(pointer, size);
-return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
+unsigned int p = __ecereNameSpace__ecere__com__log1_5i(size);
+
+if(!__ecereNameSpace__ecere__com__memoryInitialized)
+__ecereNameSpace__ecere__com__InitMemory();
+if(!__ecereNameSpace__ecere__com__poolingDisabled && p < 31)
+{
+block = __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Add(&__ecereNameSpace__ecere__com__pools[p]);
+if(block)
+{
+block->size = size;
+__ecereNameSpace__ecere__com__pools[p].usedSpace += size;
+}
+}
+else
+{
+block = malloc(sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size);
+if(block)
+{
+__ecereNameSpace__ecere__com__TOTAL_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size;
+__ecereNameSpace__ecere__com__OUTSIDE_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size;
+block->part = (((void *)0));
+block->size = size;
+}
+}
+}
+return block ? ((struct __ecereNameSpace__ecere__com__MemBlock *)block + 1) : (((void *)0));
 }
 
-void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size)
+static void __ecereNameSpace__ecere__com___free(void * pointer)
 {
-return __ecereNameSpace__ecere__com___crealloc(memory, size);
+if(pointer)
+{
+__ecereNameSpace__ecere__com___myfree(pointer);
+}
 }
 
-static void __ecereNameSpace__ecere__com___myfree(void *  pointer);
+static void * __ecereNameSpace__ecere__com___mycalloc(int n, unsigned int size)
+{
+void * pointer = __ecereNameSpace__ecere__com___mymalloc(n * size);
+
+if(pointer)
+memset(pointer, 0, n * size);
+return pointer;
+}
 
 static void * __ecereNameSpace__ecere__com___myrealloc(void * pointer, unsigned int size)
 {
@@ -1385,12 +1530,26 @@ memset((unsigned char *)newPointer, 0, size);
 return newPointer;
 }
 
-static void __ecereNameSpace__ecere__com___free(void * pointer)
+static void * __ecereNameSpace__ecere__com___malloc(unsigned int size)
 {
-if(pointer)
+void * pointer;
+
+pointer = size ? __ecereNameSpace__ecere__com___mymalloc(size + 2 * 0) : (((void *)0));
+return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
+}
+
+void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory)
 {
-__ecereNameSpace__ecere__com___myfree(pointer);
+if(memory)
+__ecereNameSpace__ecere__com___free(memory);
 }
+
+static void * __ecereNameSpace__ecere__com___calloc(int n, unsigned int size)
+{
+void * pointer;
+
+pointer = (n * size) ? __ecereNameSpace__ecere__com___mycalloc(1, n * size + 2 * 0) : (((void *)0));
+return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
 }
 
 static void * __ecereNameSpace__ecere__com___realloc(void * pointer, unsigned int size)
@@ -1404,11 +1563,34 @@ pointer = __ecereNameSpace__ecere__com___myrealloc(pointer, size);
 return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
 }
 
+static void * __ecereNameSpace__ecere__com___crealloc(void * pointer, unsigned int size)
+{
+if(!size)
+return (((void *)0));
+pointer = __ecereNameSpace__ecere__com___mycrealloc(pointer, size);
+return pointer ? ((unsigned char *)pointer + 0) : (((void *)0));
+}
+
+void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size)
+{
+return __ecereNameSpace__ecere__com___malloc(size);
+}
+
+void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size)
+{
+return __ecereNameSpace__ecere__com___calloc(1, size);
+}
+
 void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size)
 {
 return __ecereNameSpace__ecere__com___realloc(memory, size);
 }
 
+void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size)
+{
+return __ecereNameSpace__ecere__com___crealloc(memory, size);
+}
+
 struct __ecereNameSpace__ecere__sys__BTNode;
 
 struct __ecereNameSpace__ecere__sys__BTNode
@@ -1515,6 +1697,13 @@ extern void __ecereNameSpace__ecere__com__InitializeDataTypes1(struct __ecereNam
 
 extern void __ecereNameSpace__ecere__com__InitializeDataTypes(struct __ecereNameSpace__ecere__com__Instance * module);
 
+struct __ecereNameSpace__ecere__com__Class * __ecereProp___ecereNameSpace__ecere__com__Class_Set_char__PTR_(const char *  value)
+{
+struct __ecereNameSpace__ecere__com__Class * theClass = __ecereNameSpace__ecere__com__eSystem_FindClass(__thisModule, value);
+
+return theClass;
+}
+
 struct __ecereNameSpace__ecere__com__BitMember;
 
 struct __ecereNameSpace__ecere__com__BitMember
@@ -1571,59 +1760,15 @@ __ecereInstance1->callback = callback, __ecereInstance1->object = object, __ecer
 }
 }
 
-struct __ecereNameSpace__ecere__com__NameSpace;
-
-struct __ecereNameSpace__ecere__com__DefinedExpression
-{
-struct __ecereNameSpace__ecere__com__DefinedExpression * prev, * next;
-const char * name;
-const char * value;
-struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
-} __attribute__ ((gcc_struct));
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(struct __ecereNameSpace__ecere__com__BlockPool *  this, unsigned int numBlocks);
-
-static void __ecereNameSpace__ecere__com__InitMemory()
-{
-int c;
-
-__ecereNameSpace__ecere__com__memoryInitialized = 1;
-__ecereNameSpace__ecere__com__pools = calloc(1, sizeof(struct __ecereNameSpace__ecere__com__BlockPool) * 31);
-for(c = 0; c < 31; c++)
-{
-int expansion;
-
-__ecereNameSpace__ecere__com__pools[c].blockSize = __ecereNameSpace__ecere__com__pow1_5(c);
-if(__ecereNameSpace__ecere__com__pools[c].blockSize % sizeof(void *))
-__ecereNameSpace__ecere__com__pools[c].blockSize += sizeof(void *) - (__ecereNameSpace__ecere__com__pools[c].blockSize % sizeof(void *));
-__ecereNameSpace__ecere__com__pools[c].blockSpace = __ecereNameSpace__ecere__com__pools[c].blockSize;
-__ecereNameSpace__ecere__com__pools[c].blockSpace += sizeof(struct __ecereNameSpace__ecere__com__MemBlock);
-expansion = (__ecereNameSpace__ecere__com__pools[c].blockSize < 128) ? 1024 : (131072 / __ecereNameSpace__ecere__com__pools[c].blockSize);
-if(c < 12)
-__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(&__ecereNameSpace__ecere__com__pools[c], ((1 > expansion) ? 1 : expansion));
-}
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove(struct __ecereNameSpace__ecere__com__BlockPool *  this, struct __ecereNameSpace__ecere__com__MemBlock *  block);
-
-static void __ecereNameSpace__ecere__com___myfree(void * pointer)
-{
-if(pointer)
-{
-struct __ecereNameSpace__ecere__com__MemBlock * block = (struct __ecereNameSpace__ecere__com__MemBlock *)((unsigned char *)pointer - sizeof(struct __ecereNameSpace__ecere__com__MemBlock));
-struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
-struct __ecereNameSpace__ecere__com__BlockPool * pool = part ? part->pool : (((void *)0));
-
-if(pool)
-__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove((&*pool), block);
-else
-{
-__ecereNameSpace__ecere__com__TOTAL_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + block->size;
-__ecereNameSpace__ecere__com__OUTSIDE_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + block->size;
-free(block);
-}
-}
-}
+struct __ecereNameSpace__ecere__com__NameSpace;
+
+struct __ecereNameSpace__ecere__com__DefinedExpression
+{
+struct __ecereNameSpace__ecere__com__DefinedExpression * prev, * next;
+const char * name;
+const char * value;
+struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
+} __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__sys__BinaryTree;
 
@@ -1988,7 +2133,7 @@ unsigned int byValueSystemClass;
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Angle;
 
-static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__unichar;
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass_unichar;
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
 
@@ -2052,6 +2197,34 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassDesignerBase;
 
+const char * __ecereMethod_unichar_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, char * tempString, void * fieldData, unsigned int * needClass)
+{
+__ecereNameSpace__ecere__sys__UTF32toUTF8Len(&(*this), 1, tempString, 5);
+return tempString;
+}
+
+unsigned int __ecereMethod_unichar_OnGetDataFromString(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, const char * string)
+{
+int nb;
+
+(*this) = __ecereNameSpace__ecere__sys__UTF8GetChar(string, &nb);
+return 1;
+}
+
+const char *  __ecereProp___ecereNameSpace__ecere__com__Class_Get_char__PTR_(struct __ecereNameSpace__ecere__com__Class * this)
+{
+return this->name;
+}
+
+const char * __ecereMethod___ecereNameSpace__ecere__com__Class_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Class * this, char * tempString, void * fieldData, unsigned int * needClass)
+{
+return this->name;
+}
+
+void __ecereMethod___ecereNameSpace__ecere__com__Class_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Class * this)
+{
+}
+
 static void __ecereNameSpace__ecere__com__FixDerivativeVirtualMethod(struct __ecereNameSpace__ecere__com__Class * base, const char * name, int vid, void * origFunction, const char * type)
 {
 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
@@ -2555,6 +2728,25 @@ return (struct __ecereNameSpace__ecere__com__Class *)__ecereNameSpace__ecere__co
 return (((void *)0));
 }
 
+const char * __ecereMethod___ecereNameSpace__ecere__com__Platform_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, int * this, char * tempString, void * fieldData, unsigned int * needClass)
+{
+if((*this) >= __ecereNameSpace__ecere__com__firstPlatform && (*this) <= __ecereNameSpace__ecere__com__lastPlatform)
+{
+if(tempString)
+strcpy(tempString, __ecereNameSpace__ecere__com__platformNames[*(int *)this]);
+return __ecereNameSpace__ecere__com__platformNames[*(int *)this];
+}
+if(tempString && tempString[0])
+tempString[0] = '\0';
+return (((void *)0));
+}
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Platform_OnGetDataFromString(struct __ecereNameSpace__ecere__com__Class * class, int * this, const char * string)
+{
+(*this) = __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(string);
+return (*this) != 0;
+}
+
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
@@ -2567,41 +2759,6 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
 
-const char * __ecereMethod___ecereNameSpace__ecere__com__unichar_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, char * tempString, void * fieldData, unsigned int * needClass)
-{
-__ecereNameSpace__ecere__sys__UTF32toUTF8Len(&(*this), 1, tempString, 5);
-return tempString;
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__unichar_OnGetDataFromString(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, const char * string)
-{
-int nb;
-
-(*this) = __ecereNameSpace__ecere__sys__UTF8GetChar(string, &nb);
-return 1;
-}
-
-const char *  __ecereProp___ecereNameSpace__ecere__com__Class_Get_char__PTR_(struct __ecereNameSpace__ecere__com__Class * this)
-{
-return this->name;
-}
-
-struct __ecereNameSpace__ecere__com__Class * __ecereProp___ecereNameSpace__ecere__com__Class_Set_char__PTR_(const char *  value)
-{
-struct __ecereNameSpace__ecere__com__Class * theClass = __ecereNameSpace__ecere__com__eSystem_FindClass(__thisModule, value);
-
-return theClass;
-}
-
-const char * __ecereMethod___ecereNameSpace__ecere__com__Class_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Class * this, char * tempString, void * fieldData, unsigned int * needClass)
-{
-return this->name;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__Class_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Class * this)
-{
-}
-
 struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, const char * type, void * function, int declMode)
 {
 if(_class && !_class->comRedefinition && name)
@@ -2787,146 +2944,11 @@ return bitMember;
 return (((void *)0));
 }
 
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(struct __ecereNameSpace__ecere__com__BlockPool * this, unsigned int numBlocks)
-{
-unsigned char * memory = malloc(numBlocks * this->blockSpace);
-
-__ecereNameSpace__ecere__com__TOTAL_MEM += numBlocks * this->blockSpace;
-if(memory)
-{
-int c;
-struct __ecereNameSpace__ecere__com__MemBlock * block = (struct __ecereNameSpace__ecere__com__MemBlock *)memory;
-struct __ecereNameSpace__ecere__com__MemPart * part = calloc(1, sizeof(struct __ecereNameSpace__ecere__com__MemPart));
-
-__ecereNameSpace__ecere__com__TOTAL_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemPart);
-this->free = block;
-for(c = 0; c < numBlocks - 1; c++)
-{
-block->part = part;
-block->prev = (((void *)0));
-block->next = (struct __ecereNameSpace__ecere__com__MemBlock *)((unsigned char *)block + this->blockSpace);
-block = block->next;
-}
-part->blocksUsed = 0;
-part->pool = this;
-part->memory = memory;
-part->size = numBlocks;
-block->part = part;
-block->prev = (((void *)0));
-block->next = (((void *)0));
-this->totalSize += numBlocks;
-this->numParts++;
-return 1;
-}
-return 0;
-}
-
-struct __ecereNameSpace__ecere__com__MemBlock * __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Add(struct __ecereNameSpace__ecere__com__BlockPool * this)
-{
-int __simpleStruct0;
-struct __ecereNameSpace__ecere__com__MemBlock * block = (((void *)0));
-
-if(!this->free)
-__ecereMethod___ecereNameSpace__ecere__com__BlockPool_Expand(this, (__simpleStruct0 = this->numBlocks / 2, (1 > __simpleStruct0) ? 1 : __simpleStruct0));
-if(this->free)
-{
-block = this->free;
-block->prev = this->last;
-if(block->prev)
-block->prev->next = block;
-if(!this->first)
-this->first = block;
-this->last = block;
-this->free = block->next;
-block->next = (((void *)0));
-block->part->blocksUsed++;
-this->numBlocks++;
-}
-return block;
-}
-
-void __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove(struct __ecereNameSpace__ecere__com__BlockPool * this, struct __ecereNameSpace__ecere__com__MemBlock * block)
-{
-if(block->prev)
-block->prev->next = block->next;
-if(block->next)
-block->next->prev = block->prev;
-if(this->first == block)
-this->first = block->next;
-if(this->last == block)
-this->last = block->prev;
-block->next = this->free;
-this->free = block;
-block->part->blocksUsed--;
-this->numBlocks--;
-(*block->part->pool).usedSpace -= block->size;
-if(!block->part->blocksUsed && this->numBlocks && this->totalSize > this->numBlocks + this->numBlocks / 2)
-{
-struct __ecereNameSpace__ecere__com__MemBlock * next = this->free, * prev = (((void *)0));
-struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
-
-this->free = (((void *)0));
-this->totalSize -= part->size;
-while(next)
-{
-if(next->part != part)
-{
-if(prev)
-prev->next = next;
-else
-this->free = next;
-prev = next;
-}
-next = next->next;
-}
-;
-if(prev)
-prev->next = (((void *)0));
-__ecereNameSpace__ecere__com__TOTAL_MEM -= part->size * this->blockSpace;
-__ecereNameSpace__ecere__com__TOTAL_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemPart);
-this->numParts--;
-free(part->memory);
-free(part);
-}
-}
-
 const char *  __ecereProp___ecereNameSpace__ecere__com__Platform_Get_char__PTR_(int this)
 {
 return ((const char *  (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char *  tempString, void *  fieldData, unsigned int *  needClass))__ecereClass___ecereNameSpace__ecere__com__Platform->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass___ecereNameSpace__ecere__com__Platform, (void *)&this, (((void *)0)), (((void *)0)), (((void *)0)));
 }
 
-int __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(const char *  value)
-{
-if(value)
-{
-int c;
-
-for(c = __ecereNameSpace__ecere__com__firstPlatform; c <= __ecereNameSpace__ecere__com__lastPlatform; c++)
-if(!strcasecmp(value, __ecereNameSpace__ecere__com__platformNames[c]))
-return c;
-}
-return 0;
-}
-
-const char * __ecereMethod___ecereNameSpace__ecere__com__Platform_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, int * this, char * tempString, void * fieldData, unsigned int * needClass)
-{
-if((*this) >= __ecereNameSpace__ecere__com__firstPlatform && (*this) <= __ecereNameSpace__ecere__com__lastPlatform)
-{
-if(tempString)
-strcpy(tempString, __ecereNameSpace__ecere__com__platformNames[*(int *)this]);
-return __ecereNameSpace__ecere__com__platformNames[*(int *)this];
-}
-if(tempString && tempString[0])
-tempString[0] = '\0';
-return (((void *)0));
-}
-
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__Platform_OnGetDataFromString(struct __ecereNameSpace__ecere__com__Class * class, int * this, const char * string)
-{
-(*this) = __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(string);
-return (*this) != 0;
-}
-
 struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__DesignerBase_Get_classDesigner(struct __ecereNameSpace__ecere__com__Instance * this)
 {
 __attribute__((unused)) struct __ecereNameSpace__ecere__com__DesignerBase * __ecerePointer___ecereNameSpace__ecere__com__DesignerBase = (struct __ecereNameSpace__ecere__com__DesignerBase *)(this ? (((char *)this) + __ecereClass___ecereNameSpace__ecere__com__DesignerBase->offset) : 0);
@@ -3487,40 +3509,6 @@ return __ecereNameSpace__ecere__com__eClass_GetDesigner(((struct __ecereNameSpac
 return (((void *)0));
 }
 
-static void * __ecereNameSpace__ecere__com___mymalloc(unsigned int size)
-{
-struct __ecereNameSpace__ecere__com__MemBlock * block = (((void *)0));
-
-if(size)
-{
-unsigned int p = __ecereNameSpace__ecere__com__log1_5i(size);
-
-if(!__ecereNameSpace__ecere__com__memoryInitialized)
-__ecereNameSpace__ecere__com__InitMemory();
-if(!__ecereNameSpace__ecere__com__poolingDisabled && p < 31)
-{
-block = __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Add(&__ecereNameSpace__ecere__com__pools[p]);
-if(block)
-{
-block->size = size;
-__ecereNameSpace__ecere__com__pools[p].usedSpace += size;
-}
-}
-else
-{
-block = malloc(sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size);
-if(block)
-{
-__ecereNameSpace__ecere__com__TOTAL_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size;
-__ecereNameSpace__ecere__com__OUTSIDE_MEM += sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + size;
-block->part = (((void *)0));
-block->size = size;
-}
-}
-}
-return block ? ((struct __ecereNameSpace__ecere__com__MemBlock *)block + 1) : (((void *)0));
-}
-
 void __ecereNameSpace__ecere__com__eProperty_SelfWatch(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, void (* callback)(void *))
 {
 if(_class)
@@ -6278,11 +6266,11 @@ __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::com::null", "((void
 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(3, "ecere::com::Angle", "double", 0, 0, (void *)0, (void *)0, module, 4, 1);
 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
 __ecereClass___ecereNameSpace__ecere__com__Angle = class;
-class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(3, "ecere::com::unichar", "uint", 0, 0, (void *)0, (void *)0, module, 4, 1);
+class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(3, "unichar", "uint", 0, 0, (void *)0, (void *)0, module, 4, 1);
 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
-__ecereClass___ecereNameSpace__ecere__com__unichar = class;
-__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnGetString", 0, __ecereMethod___ecereNameSpace__ecere__com__unichar_OnGetString, 1);
-__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnGetDataFromString", 0, __ecereMethod___ecereNameSpace__ecere__com__unichar_OnGetDataFromString, 1);
+__ecereClass_unichar = class;
+__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnGetString", 0, __ecereMethod_unichar_OnGetString, 1);
+__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnGetDataFromString", 0, __ecereMethod_unichar_OnGetDataFromString, 1);
 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "ecere::com::Property", 0, sizeof(struct __ecereNameSpace__ecere__com__Property), 0, (void *)0, (void *)0, module, 4, 1);
 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
 __ecereClass___ecereNameSpace__ecere__com__Property = class;
@@ -6808,9 +6796,9 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF8Validate
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ISO8859_1toUTF8", "int ecere::sys::ISO8859_1toUTF8(const char * source, char * dest, int max)", __ecereNameSpace__ecere__sys__ISO8859_1toUTF8, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF16toUTF8", "char * ecere::sys::UTF16toUTF8(const uint16 * source)", __ecereNameSpace__ecere__sys__UTF16toUTF8, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF16toUTF8Buffer", "int ecere::sys::UTF16toUTF8Buffer(const uint16 * source, char * dest, int max)", __ecereNameSpace__ecere__sys__UTF16toUTF8Buffer, module, 4);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF8GetChar", "ecere::com::unichar ecere::sys::UTF8GetChar(const char * string, int * numBytes)", __ecereNameSpace__ecere__sys__UTF8GetChar, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF8GetChar", "unichar ecere::sys::UTF8GetChar(const char * string, int * numBytes)", __ecereNameSpace__ecere__sys__UTF8GetChar, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF8toUTF16Buffer", "int ecere::sys::UTF8toUTF16Buffer(const char * source, uint16 * dest, int max)", __ecereNameSpace__ecere__sys__UTF8toUTF16Buffer, module, 4);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF32toUTF8Len", "int ecere::sys::UTF32toUTF8Len(const ecere::com::unichar * source, int count, char * dest, int max)", __ecereNameSpace__ecere__sys__UTF32toUTF8Len, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF32toUTF8Len", "int ecere::sys::UTF32toUTF8Len(const unichar * source, int count, char * dest, int max)", __ecereNameSpace__ecere__sys__UTF32toUTF8Len, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::UTF8toUTF16", "uint16 * ecere::sys::UTF8toUTF16(const char * source, int * wordCount)", __ecereNameSpace__ecere__sys__UTF8toUTF16, module, 4);
 }
 
index c6701f3..525f7b7 100644 (file)
@@ -1180,6 +1180,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__sys__OldList _excludedSymbols =
@@ -1457,6 +1458,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
index 6cec554..e988cb2 100644 (file)
@@ -604,6 +604,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct Type
index 2b18365..127172b 100644 (file)
@@ -588,46 +588,6 @@ return CheckType(yytext);
 
 struct DBTableEntry;
 
-struct Symbol *  _DeclClass(const char *  name);
-
-struct Symbol * DeclClassAddNameSpace(const char * className)
-{
-char name[1024];
-int len = 0, stringLen;
-
-name[0] = '\0';
-if((currentNameSpace || defaultNameSpace) && declMode != 0 && defaultDeclMode != 0)
-{
-if(defaultNameSpace)
-{
-memcpy(name, defaultNameSpace, defaultNameSpaceLen);
-len += defaultNameSpaceLen;
-name[len++] = ':';
-name[len++] = ':';
-}
-if(currentNameSpace)
-{
-memcpy(name + len, currentNameSpace, currentNameSpaceLen);
-len += currentNameSpaceLen;
-name[len++] = ':';
-name[len++] = ':';
-}
-}
-stringLen = strlen(className);
-memcpy(name + len, className, stringLen);
-len += stringLen;
-name[len] = (char)0;
-return _DeclClass(name);
-}
-
-struct Symbol * DeclClass(const char * name)
-{
-if(strchr(name, ':'))
-return _DeclClass(name);
-else
-return DeclClassAddNameSpace(name);
-}
-
 struct MemberInit;
 
 struct Pointer;
@@ -725,6 +685,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
@@ -1004,6 +965,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1209,6 +1171,46 @@ struct Location insideLoc;
 unsigned int built;
 } __attribute__ ((gcc_struct));
 
+struct Symbol *  _DeclClass(struct Specifier *  _class, const char *  name);
+
+struct Symbol * DeclClassAddNameSpace(struct Specifier * _class, const char * className)
+{
+char name[1024];
+int len = 0, stringLen;
+
+name[0] = '\0';
+if(className[0] != ':' && (currentNameSpace || defaultNameSpace) && declMode != 0 && defaultDeclMode != 0 && (!_class || _class->__anon1.__anon1.name))
+{
+if(defaultNameSpace)
+{
+memcpy(name, defaultNameSpace, defaultNameSpaceLen);
+len += defaultNameSpaceLen;
+name[len++] = ':';
+name[len++] = ':';
+}
+if(currentNameSpace)
+{
+memcpy(name + len, currentNameSpace, currentNameSpaceLen);
+len += currentNameSpaceLen;
+name[len++] = ':';
+name[len++] = ':';
+}
+}
+stringLen = strlen(className);
+memcpy(name + len, className, stringLen);
+len += stringLen;
+name[len] = (char)0;
+return _DeclClass(_class, name);
+}
+
+struct Symbol * DeclClass(struct Specifier * _class, const char * name)
+{
+if(_class || strchr(name, ':'))
+return _DeclClass(_class, name);
+else
+return DeclClassAddNameSpace(_class, name);
+}
+
 struct ClassDefinition;
 
 struct Context
@@ -1595,6 +1597,23 @@ struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_ContextStringPair;
 
+void __ecereMethod_ContextStringPair_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct ContextStringPair * this)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(this->string), this->string = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(this->context), this->context = 0);
+}
+
+int __ecereMethod_ContextStringPair_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, struct ContextStringPair * this, struct ContextStringPair * b)
+{
+int result;
+
+result = (this->string && b->string) ? strcmp(this->string, b->string) : (!this->string && b->string) ? 1 : (this->string && !b->string) ? -1 : 0;
+if(result)
+return result;
+result = (this->context && b->context) ? strcmp(this->context, b->context) : (!this->context && b->context) ? 1 : (this->context && !b->context) ? -1 : 0;
+return result;
+}
+
 extern void __ecereNameSpace__ecere__com__PrintLn(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
@@ -1707,23 +1726,6 @@ struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 } __attribute__ ((gcc_struct));
 
-void __ecereMethod_ContextStringPair_OnFree(struct __ecereNameSpace__ecere__com__Class * class, struct ContextStringPair * this)
-{
-(__ecereNameSpace__ecere__com__eSystem_Delete(this->string), this->string = 0);
-(__ecereNameSpace__ecere__com__eSystem_Delete(this->context), this->context = 0);
-}
-
-int __ecereMethod_ContextStringPair_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, struct ContextStringPair * this, struct ContextStringPair * b)
-{
-int result;
-
-result = (this->string && b->string) ? strcmp(this->string, b->string) : (!this->string && b->string) ? 1 : (this->string && !b->string) ? -1 : 0;
-if(result)
-return result;
-result = (this->context && b->context) ? strcmp(this->context, b->context) : (!this->context && b->context) ? 1 : (this->context && !b->context) ? -1 : 0;
-return result;
-}
-
 struct Specifier * MkSpecifier(int specifier)
 {
 if(specifier == _BOOL && (declMode != 0 && defaultDeclMode != 0))
@@ -3052,7 +3054,7 @@ templateString[len++] = '\0';
 symbol = FindClass(templateString);
 if(!symbol && spec->__anon1.__anon1.symbol)
 {
-symbol = _DeclClass(templateString);
+symbol = _DeclClass((((void *)0)), templateString);
 symbol->notYetDeclared = 1;
 }
 if(spec->__anon1.__anon1.symbol)
@@ -3070,10 +3072,19 @@ else
 FreeList(templateArgs, (void *)(FreeTemplateArgument));
 }
 
-struct Symbol * _DeclClass(const char * name)
+struct Symbol * _DeclClass(struct Specifier * _class, const char * name)
 {
-struct Symbol * symbol = FindClass(name);
+struct Symbol * symbol;
+char nameBuffer[1024];
 
+if(_class)
+{
+strcpy(nameBuffer, _class->__anon1.__anon1.name ? _class->__anon1.__anon1.name : "");
+strcat(nameBuffer, "::");
+strcat(nameBuffer, name);
+name = nameBuffer;
+}
+symbol = FindClass(name);
 if(!symbol)
 {
 if(name[0] == ':' && name[1] == ':')
@@ -3081,7 +3092,7 @@ name += 2;
 symbol = __extension__ ({
 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(name), __ecereInstance1;
+__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(name), __ecereInstance1->notYetDeclared = 1, __ecereInstance1;
 });
 if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->classes, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol))
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), symbol);
@@ -3292,7 +3303,23 @@ spec->__anon1.__anon1.name = __ecereNameSpace__ecere__sys__CopyString(className)
 }
 }
 else if(symbol)
+{
+char nameSpace[1024];
+char * c = strstr(name, symbol->string);
+
 spec->__anon1.__anon1.name = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
+if(c && c >= name + 2 && c[-1] == ':' && c[-2] == ':')
+{
+if(c > name + 2)
+{
+memcpy(nameSpace, name, c - name - 2);
+nameSpace[c - name] = (char)0;
+spec->__anon1.__anon1.nsSpec = _MkSpecifierName(nameSpace, (((void *)0)), (((void *)0)));
+}
+else
+spec->__anon1.__anon1.nsSpec = _MkSpecifierName((((void *)0)), (((void *)0)), (((void *)0)));
+}
+}
 else
 spec->__anon1.__anon1.name = __ecereNameSpace__ecere__sys__CopyString(name);
 spec->__anon1.__anon1.symbol = symbol;
@@ -5208,9 +5235,9 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkClassDefFixed", "Class
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkClassDefDesignerDefaultProperty", "ClassDef MkClassDefDesignerDefaultProperty(Identifier id)", MkClassDefDesignerDefaultProperty, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkClassDefDefaultProperty", "ClassDef MkClassDefDefaultProperty(ecere::sys::OldList defProperties)", MkClassDefDefaultProperty, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkClassDefFunction", "ClassDef MkClassDefFunction(ClassFunction function)", MkClassDefFunction, module, 2);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclClassAddNameSpace", "Symbol DeclClassAddNameSpace(const char * className)", DeclClassAddNameSpace, module, 2);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclClass", "Symbol DeclClass(const char * name)", DeclClass, module, 2);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclClass", "Symbol _DeclClass(const char * name)", _DeclClass, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclClassAddNameSpace", "Symbol DeclClassAddNameSpace(Specifier _class, const char * className)", DeclClassAddNameSpace, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclClass", "Symbol DeclClass(Specifier _class, const char * name)", DeclClass, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclClass", "Symbol _DeclClass(Specifier _class, const char * name)", _DeclClass, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupBaseSpecs", "void SetupBaseSpecs(Symbol symbol, ecere::sys::OldList baseSpecs)", SetupBaseSpecs, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkClass", "ClassDefinition MkClass(Symbol symbol, ecere::sys::OldList baseSpecs, ecere::sys::OldList definitions)", MkClass, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MkExpInstance", "Expression MkExpInstance(Instantiation inst)", MkExpInstance, module, 2);
index e67caaf..69f06c1 100644 (file)
@@ -239,6 +239,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -628,6 +629,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct Type
index 60d119e..5662dda 100644 (file)
@@ -271,82 +271,10 @@ extern struct Specifier * MkSpecifier(int specifier);
 
 extern struct Specifier * CopySpecifier(struct Specifier * spec);
 
-struct Symbol;
-
-struct Specifier
-{
-struct Specifier * prev;
-struct Specifier * next;
-struct Location loc;
-int type;
-union
-{
-int specifier;
-struct
-{
-struct ExtDecl * extDecl;
-char *  name;
-struct Symbol * symbol;
-struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
-} __attribute__ ((gcc_struct)) __anon1;
-struct
-{
-struct Identifier * id;
-struct __ecereNameSpace__ecere__sys__OldList *  list;
-struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
-struct __ecereNameSpace__ecere__sys__OldList *  definitions;
-unsigned int addNameSpace;
-struct Context * ctx;
-struct ExtDecl * extDeclStruct;
-} __attribute__ ((gcc_struct)) __anon2;
-struct Expression * expression;
-struct Specifier * _class;
-struct TemplateParameter * templateParameter;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct));
-
-struct Identifier
-{
-struct Identifier * prev;
-struct Identifier * next;
-struct Location loc;
-struct Symbol * classSym;
-struct Specifier * _class;
-char *  string;
-struct Identifier * badID;
-} __attribute__ ((gcc_struct));
-
-struct DBTableDef
-{
-char *  name;
-struct Symbol * symbol;
-struct __ecereNameSpace__ecere__sys__OldList *  definitions;
-int declMode;
-} __attribute__ ((gcc_struct));
-
-extern struct Symbol * DeclClass(const char *  name);
-
 struct PropertyDef;
 
 struct Instantiation;
 
-struct Instantiation
-{
-struct Instantiation * prev;
-struct Instantiation * next;
-struct Location loc;
-struct Specifier * _class;
-struct Expression * exp;
-struct __ecereNameSpace__ecere__sys__OldList *  members;
-struct Symbol * symbol;
-unsigned int fullSet;
-unsigned int isConstant;
-unsigned char *  data;
-struct Location nameLoc;
-struct Location insideLoc;
-unsigned int built;
-} __attribute__ ((gcc_struct));
-
 extern struct Expression * MkExpInstance(struct Instantiation * inst);
 
 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
@@ -361,27 +289,6 @@ extern struct Statement * MkReturnStmt(struct __ecereNameSpace__ecere__sys__OldL
 
 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
 
-struct PropertyDef
-{
-struct PropertyDef * prev;
-struct PropertyDef * next;
-struct Location loc;
-struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
-struct Declarator * declarator;
-struct Identifier * id;
-struct Statement * getStmt;
-struct Statement * setStmt;
-struct Statement * issetStmt;
-struct Symbol * symbol;
-struct Expression * category;
-struct
-{
-unsigned int conversion : 1;
-unsigned int isWatchable : 1;
-unsigned int isDBProp : 1;
-} __attribute__ ((gcc_struct)) __anon1;
-} __attribute__ ((gcc_struct));
-
 extern struct PropertyDef * MkProperty(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl, struct Identifier * id, struct Statement * setStmt, struct Statement * getStmt);
 
 struct Declaration;
@@ -471,6 +378,77 @@ struct Declaration * decl;
 
 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
 
+extern struct External * MkExternalDeclaration(struct Declaration * declaration);
+
+extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
+
+struct Initializer;
+
+extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
+
+extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
+
+struct Initializer
+{
+struct Initializer * prev;
+struct Initializer * next;
+struct Location loc;
+int type;
+union
+{
+struct Expression * exp;
+struct __ecereNameSpace__ecere__sys__OldList *  list;
+} __attribute__ ((gcc_struct)) __anon1;
+unsigned int isConstant;
+struct Identifier * id;
+} __attribute__ ((gcc_struct));
+
+struct Symbol;
+
+struct Specifier
+{
+struct Specifier * prev;
+struct Specifier * next;
+struct Location loc;
+int type;
+union
+{
+int specifier;
+struct
+{
+struct ExtDecl * extDecl;
+char *  name;
+struct Symbol * symbol;
+struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
+} __attribute__ ((gcc_struct)) __anon1;
+struct
+{
+struct Identifier * id;
+struct __ecereNameSpace__ecere__sys__OldList *  list;
+struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
+struct __ecereNameSpace__ecere__sys__OldList *  definitions;
+unsigned int addNameSpace;
+struct Context * ctx;
+struct ExtDecl * extDeclStruct;
+} __attribute__ ((gcc_struct)) __anon2;
+struct Expression * expression;
+struct Specifier * _class;
+struct TemplateParameter * templateParameter;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct));
+
+struct Identifier
+{
+struct Identifier * prev;
+struct Identifier * next;
+struct Location loc;
+struct Symbol * classSym;
+struct Specifier * _class;
+char *  string;
+struct Identifier * badID;
+} __attribute__ ((gcc_struct));
+
 struct Declaration
 {
 struct Declaration * prev;
@@ -496,31 +474,54 @@ struct Symbol * symbol;
 int declMode;
 } __attribute__ ((gcc_struct));
 
-extern struct External * MkExternalDeclaration(struct Declaration * declaration);
-
-extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
-
-struct Initializer;
-
-extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
-
-extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
-
-struct Initializer
+struct Instantiation
 {
-struct Initializer * prev;
-struct Initializer * next;
+struct Instantiation * prev;
+struct Instantiation * next;
 struct Location loc;
-int type;
-union
-{
+struct Specifier * _class;
 struct Expression * exp;
-struct __ecereNameSpace__ecere__sys__OldList *  list;
-} __attribute__ ((gcc_struct)) __anon1;
+struct __ecereNameSpace__ecere__sys__OldList *  members;
+struct Symbol * symbol;
+unsigned int fullSet;
 unsigned int isConstant;
+unsigned char *  data;
+struct Location nameLoc;
+struct Location insideLoc;
+unsigned int built;
+} __attribute__ ((gcc_struct));
+
+struct PropertyDef
+{
+struct PropertyDef * prev;
+struct PropertyDef * next;
+struct Location loc;
+struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
+struct Declarator * declarator;
 struct Identifier * id;
+struct Statement * getStmt;
+struct Statement * setStmt;
+struct Statement * issetStmt;
+struct Symbol * symbol;
+struct Expression * category;
+struct
+{
+unsigned int conversion : 1;
+unsigned int isWatchable : 1;
+unsigned int isDBProp : 1;
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct));
+
+struct DBTableDef
+{
+char *  name;
+struct Symbol * symbol;
+struct __ecereNameSpace__ecere__sys__OldList *  definitions;
+int declMode;
 } __attribute__ ((gcc_struct));
 
+extern struct Symbol * DeclClass(struct Specifier * _class, const char *  name);
+
 struct MembersInit;
 
 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
@@ -703,6 +704,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct Type
@@ -929,20 +931,6 @@ struct __ecereNameSpace__ecere__sys__OldList *  properties;
 unsigned int deleteWatch;
 } __attribute__ ((gcc_struct));
 
-static void ProcessStatement(struct Statement *  stmt);
-
-static void ProcessProperty(struct PropertyDef * def)
-{
-if(def->getStmt)
-{
-ProcessStatement(def->getStmt);
-}
-if(def->setStmt)
-{
-ProcessStatement(def->setStmt);
-}
-}
-
 struct MemberInit;
 
 struct MemberInit
@@ -1011,6 +999,20 @@ ProcessInitializer(init->initializer);
 }
 }
 
+static void ProcessStatement(struct Statement *  stmt);
+
+static void ProcessProperty(struct PropertyDef * def)
+{
+if(def->getStmt)
+{
+ProcessStatement(def->getStmt);
+}
+if(def->setStmt)
+{
+ProcessStatement(def->setStmt);
+}
+}
+
 struct ClassFunction;
 
 struct ClassDef
@@ -1627,7 +1629,7 @@ struct __ecereNameSpace__ecere__sys__OldList * inheritanceSpecs = MkList();
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inheritanceSpecs), MkSpecifier(PRIVATE));
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inheritanceSpecs), MkSpecifierName("Row"));
 PushContext();
-_class = MkClass(DeclClass(rowClassName), inheritanceSpecs, rowClassDefs);
+_class = MkClass(DeclClass((((void *)0)), rowClassName), inheritanceSpecs, rowClassDefs);
 PopContext(curContext);
 def = MkClassDefDefaultProperty(MkListOne(MkMemberInitExp(MkExpIdentifier(MkIdentifier("tbl")), MkInitializerAssignment(MkExpIdentifier(MkIdentifier(tableID))))));
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*rowClassDefs), def);
@@ -2289,10 +2291,10 @@ addAfter = (((void *)0));
 curContext = globalContext;
 if(inCompiler)
 PrePreProcessClassDefinitions();
-DeclClass("Field");
-DeclClass("Table");
-DeclClass("Row");
-DeclClass("Id");
+DeclClass((((void *)0)), "Field");
+DeclClass((((void *)0)), "Table");
+DeclClass((((void *)0)), "Row");
+DeclClass((((void *)0)), "Id");
 numIndexes = 0;
 if(ast != (((void *)0)))
 {
index f198454..4a6a978 100644 (file)
@@ -378,6 +378,11 @@ int type;
 struct __ecereNameSpace__ecere__sys__OldList * attribs;
 } __attribute__ ((gcc_struct));
 
+unsigned int __ecereMethod_Location_Inside(struct Location * this, int line, int charPos)
+{
+return (this->start.line < line || (this->start.line == line && this->start.charPos <= charPos)) && (this->end.line > line || (this->end.line == line && this->end.charPos >= charPos));
+}
+
 extern struct Location yylloc;
 
 void SetExcludedSymbols(struct __ecereNameSpace__ecere__sys__OldList * list)
@@ -395,6 +400,52 @@ void SetDefines(struct __ecereNameSpace__ecere__sys__OldList * list)
 defines = list;
 }
 
+void __ecereMethod_CodePosition_AdjustDelete(struct CodePosition * this, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * start, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * end)
+{
+if(this->line - 1 < start->y || (this->line - 1 == start->y && this->charPos - 1 < start->x))
+return ;
+if((this->line - 1 >= start->y && (this->line - 1 > start->y || this->charPos - 1 >= start->x)) && (this->line - 1 >= end->y && (this->line - 1 > end->y || this->charPos - 1 >= end->x)))
+{
+if(this->line - 1 >= end->y)
+{
+if(this->line - 1 > end->y)
+this->line -= end->y - start->y;
+else
+{
+if(this->charPos - 1 >= end->x)
+{
+this->line = start->y + 1;
+this->charPos -= end->x - start->x;
+}
+}
+}
+}
+else
+{
+this->line = start->y + 1;
+this->charPos = start->x + 1;
+}
+}
+
+void __ecereMethod_CodePosition_AdjustAdd(struct CodePosition * this, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * start, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * end)
+{
+int numLines = end->y - start->y;
+
+if(this->line - 1 >= start->y)
+{
+if(this->line - 1 > start->y)
+this->line += numLines;
+else
+{
+if(this->charPos - 1 > start->x || (this->charPos - 1 == start->x))
+{
+this->line += numLines;
+this->charPos += end->x - start->x;
+}
+}
+}
+}
+
 struct ExtDecl
 {
 struct Location loc;
@@ -800,6 +851,7 @@ struct ExtDecl * extDecl;
 char * name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1126,6 +1178,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__com__Method
@@ -1147,6 +1200,15 @@ int memberAccess;
 
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
 
+unsigned int __ecereProp_Type_Get_specConst(struct Type * this)
+{
+struct Type * t = this;
+
+while((t->kind == 13 || t->kind == 12) && t->__anon1.type)
+t = t->__anon1.type;
+return t->constant;
+}
+
 unsigned int __ecereProp_Type_Get_isPointerTypeSize(struct Type * this);
 
 struct __ecereNameSpace__ecere__com__Module;
@@ -1608,89 +1670,6 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
 
-extern void __ecereNameSpace__ecere__com__PrintLn(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList_TPL_TopoEdge__link__EQU__out_;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList_TPL_TopoEdge__link__EQU__in_;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_char__PTR_;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
-
-struct __ecereNameSpace__ecere__com__Module
-{
-struct __ecereNameSpace__ecere__com__Instance * application;
-struct __ecereNameSpace__ecere__sys__OldList classes;
-struct __ecereNameSpace__ecere__sys__OldList defines;
-struct __ecereNameSpace__ecere__sys__OldList functions;
-struct __ecereNameSpace__ecere__sys__OldList modules;
-struct __ecereNameSpace__ecere__com__Instance * prev;
-struct __ecereNameSpace__ecere__com__Instance * next;
-const char *  name;
-void *  library;
-void *  Unload;
-int importType;
-int origImportType;
-struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
-struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-} __attribute__ ((gcc_struct));
-
-void __ecereMethod_CodePosition_AdjustDelete(struct CodePosition * this, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * start, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * end)
-{
-if(this->line - 1 < start->y || (this->line - 1 == start->y && this->charPos - 1 < start->x))
-return ;
-if((this->line - 1 >= start->y && (this->line - 1 > start->y || this->charPos - 1 >= start->x)) && (this->line - 1 >= end->y && (this->line - 1 > end->y || this->charPos - 1 >= end->x)))
-{
-if(this->line - 1 >= end->y)
-{
-if(this->line - 1 > end->y)
-this->line -= end->y - start->y;
-else
-{
-if(this->charPos - 1 >= end->x)
-{
-this->line = start->y + 1;
-this->charPos -= end->x - start->x;
-}
-}
-}
-}
-else
-{
-this->line = start->y + 1;
-this->charPos = start->x + 1;
-}
-}
-
-void __ecereMethod_CodePosition_AdjustAdd(struct CodePosition * this, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * start, struct __ecereNameSpace__ecere__gui__controls__BufferLocation * end)
-{
-int numLines = end->y - start->y;
-
-if(this->line - 1 >= start->y)
-{
-if(this->line - 1 > start->y)
-this->line += numLines;
-else
-{
-if(this->charPos - 1 > start->x || (this->charPos - 1 == start->x))
-{
-this->line += numLines;
-this->charPos += end->x - start->x;
-}
-}
-}
-}
-
-unsigned int __ecereMethod_Location_Inside(struct Location * this, int line, int charPos)
-{
-return (this->start.line < line || (this->start.line == line && this->start.charPos <= charPos)) && (this->end.line > line || (this->end.line == line && this->end.charPos >= charPos));
-}
-
 const char * __ecereMethod_Type_OnGetString(struct __ecereNameSpace__ecere__com__Class * class, struct Type * this, char * tempString, void * fieldData, unsigned int * needClass)
 {
 struct Type * type = (struct Type *)this;
@@ -1705,15 +1684,6 @@ void __ecereMethod_Type_OnFree(struct __ecereNameSpace__ecere__com__Class * clas
 {
 }
 
-unsigned int __ecereProp_Type_Get_specConst(struct Type * this)
-{
-struct Type * t = this;
-
-while((t->kind == 13 || t->kind == 12) && t->__anon1.type)
-t = t->__anon1.type;
-return t->constant;
-}
-
 unsigned int __ecereProp_Type_Get_isPointerTypeSize(struct Type * this)
 {
 unsigned int result = 0;
@@ -1795,6 +1765,38 @@ return 0;
 return 0;
 }
 
+extern void __ecereNameSpace__ecere__com__PrintLn(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList_TPL_TopoEdge__link__EQU__out_;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList_TPL_TopoEdge__link__EQU__in_;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_char__PTR_;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
+
+struct __ecereNameSpace__ecere__com__Module
+{
+struct __ecereNameSpace__ecere__com__Instance * application;
+struct __ecereNameSpace__ecere__sys__OldList classes;
+struct __ecereNameSpace__ecere__sys__OldList defines;
+struct __ecereNameSpace__ecere__sys__OldList functions;
+struct __ecereNameSpace__ecere__sys__OldList modules;
+struct __ecereNameSpace__ecere__com__Instance * prev;
+struct __ecereNameSpace__ecere__com__Instance * next;
+const char *  name;
+void *  library;
+void *  Unload;
+int importType;
+int origImportType;
+struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
+struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
+} __attribute__ ((gcc_struct));
+
 void __ecereUnregisterModule_ecdefs(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 
@@ -2716,6 +2718,7 @@ __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember1, "extDecl", "Ext
 __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember1, "name", "char *", sizeof(void *), 0xF000F000, 1);
 __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember1, "symbol", "Symbol", sizeof(void *), 0xF000F000, 1);
 __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember1, "templateArgs", "ecere::sys::OldList *", sizeof(void *), 0xF000F000, 1);
+__ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember1, "nsSpec", "Specifier", sizeof(void *), 0xF000F000, 1);
 __ecereNameSpace__ecere__com__eMember_AddMember(dataMember0, dataMember1);
 }
 {
@@ -3306,6 +3309,7 @@ __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "templatedClasses", "e
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "ctx", "Context", sizeof(void *), 0xF000F000, 1);
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "isIterator", "int", 4, 4, 1);
 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "propCategory", "Expression", sizeof(void *), 0xF000F000, 1);
+__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "mustRegister", "bool", 4, 4, 1);
 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "ClassImport", 0, sizeof(struct ClassImport), 0, (void *)0, (void *)0, module, 1, 1);
 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
 __ecereClass_ClassImport = class;
index 7804bd3..ffe4559 100644 (file)
@@ -329,8 +329,6 @@ extern void FreeExtDecl(struct ExtDecl * extDecl);
 
 extern struct ExtDecl * MkExtDeclString(char * s);
 
-extern struct Symbol * DeclClass(const char *  name);
-
 struct Location
 {
 struct CodePosition start;
@@ -496,6 +494,8 @@ extern struct Specifier * MkSpecifierSubClass(struct Specifier * _class);
 
 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
 
+extern struct Symbol * DeclClass(struct Specifier * _class, const char *  name);
+
 struct Specifier
 {
 struct Specifier * prev;
@@ -511,6 +511,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -2642,7 +2643,7 @@ case 214:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, yyvsp[(2) - (5)].id, yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].id->string);
+DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ;
 }
 break;
@@ -2656,7 +2657,7 @@ case 216:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (4)].specifierType, yyvsp[(2) - (4)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (4)].id->string);
+DeclClass(yyvsp[(2) - (4)].id->_class, yyvsp[(2) - (4)].id->string);
 ;
 }
 break;
@@ -2670,7 +2671,7 @@ case 218:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, MkIdentifier(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name), yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (5)].specifier);
 ;
 }
@@ -2680,7 +2681,7 @@ case 219:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (6)].specifierType, yyvsp[(3) - (6)].id, yyvsp[(5) - (6)].list);
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (6)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (6)].id->string);
+DeclClass(yyvsp[(3) - (6)].id->_class, yyvsp[(3) - (6)].id->string);
 ;
 }
 break;
@@ -2696,7 +2697,7 @@ case 221:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, yyvsp[(3) - (5)].id, (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (5)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (5)].id->string);
+DeclClass(yyvsp[(3) - (5)].id->_class, yyvsp[(3) - (5)].id->string);
 ;
 }
 break;
@@ -2712,7 +2713,7 @@ case 223:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (6)].specifierType, MkIdentifier(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name), yyvsp[(5) - (6)].list);
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (6)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(3) - (6)].specifier);
 ;
 }
@@ -2721,7 +2722,7 @@ case 224:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (2)].specifierType, yyvsp[(2) - (2)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].id->string);
+DeclClass(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ;
 }
 break;
@@ -2729,7 +2730,7 @@ case 225:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (2)].specifierType, MkIdentifier(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name), (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ;
 }
@@ -2739,7 +2740,7 @@ case 226:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (3)].specifierType, yyvsp[(3) - (3)].id, (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (3)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (3)].id->string);
+DeclClass(yyvsp[(3) - (3)].id->_class, yyvsp[(3) - (3)].id->string);
 ;
 }
 break;
@@ -2748,7 +2749,7 @@ case 227:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (3)].specifierType, MkIdentifier(yyvsp[(3) - (3)].specifier->__anon1.__anon1.name), (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (3)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(3) - (3)].specifier);
 ;
 }
@@ -3060,7 +3061,7 @@ case 270:
 {
 yyval.specifier = MkEnum(yyvsp[(2) - (2)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].id->string);
+DeclClass(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ;
 }
 break;
@@ -3068,7 +3069,7 @@ case 271:
 {
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name), (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ;
 }
@@ -3083,7 +3084,7 @@ case 273:
 {
 yyval.specifier = MkEnum(yyvsp[(2) - (5)].id, yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].id->string);
+DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ;
 }
 break;
@@ -3092,7 +3093,7 @@ case 274:
 yyval.specifier = MkEnum(yyvsp[(2) - (7)].id, yyvsp[(4) - (7)].list);
 yyval.specifier->__anon1.__anon2.definitions = yyvsp[(6) - (7)].list;
 if(declMode)
-DeclClass(yyvsp[(2) - (7)].id->string);
+DeclClass(yyvsp[(2) - (7)].id->_class, yyvsp[(2) - (7)].id->string);
 ;
 }
 break;
@@ -3101,7 +3102,7 @@ case 275:
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (7)].specifier->__anon1.__anon1.name), yyvsp[(4) - (7)].list);
 yyval.specifier->__anon1.__anon2.definitions = yyvsp[(6) - (7)].list;
 if(declMode)
-DeclClass(yyvsp[(2) - (7)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (7)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (7)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (7)].specifier);
 ;
 }
@@ -3110,7 +3111,7 @@ case 276:
 {
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name), yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (5)].specifier);
 ;
 }
index bd24ab0..32b302f 100644 (file)
@@ -541,6 +541,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
@@ -935,6 +936,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1701,8 +1703,10 @@ if(external->type == 2)
 {
 struct ClassDefinition * _class = external->__anon1._class;
 
-if(_class->definitions && (!_class->symbol->__anon1.registered || !inCompiler))
+if((!_class->symbol->__anon1.registered || !inCompiler))
 {
+if(_class->definitions)
+_class->symbol->mustRegister = 1;
 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), &_class->loc, ast, external->prev, (((void *)0)), _class->declMode);
 _class->symbol->isStatic = _class->declMode == 3;
 }
@@ -1743,6 +1747,8 @@ else if(specifier->type == 4)
 classType = 6;
 else
 classType = 1;
+if(specifier->__anon1.__anon2.definitions || specifier->type == 2 || specifier->__anon1.__anon2.baseSpecs)
+symbol->mustRegister = 1;
 ProcessClass(classType, specifier->__anon1.__anon2.definitions, symbol, specifier->__anon1.__anon2.baseSpecs, specifier->__anon1.__anon2.list, &specifier->loc, ast, external->prev, declaration->__anon1.__anon1.declarators, declaration->declMode);
 symbol->isStatic = declaration->declMode == 3;
 }
index e4a7d22..344e55a 100644 (file)
@@ -576,6 +576,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__com__ClassProperty
@@ -1228,6 +1229,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
index 2d237ce..3b5e53a 100644 (file)
@@ -85,7 +85,7 @@ static const yytype_int16 yyrhs[] =
 
 static const yytype_uint16 yyrline[] =
 {
-(unsigned short)0, (unsigned short)282, (unsigned short)282, (unsigned short)311, (unsigned short)370, (unsigned short)371, (unsigned short)481, (unsigned short)485, (unsigned short)488, (unsigned short)489, (unsigned short)490, (unsigned short)539, (unsigned short)541, (unsigned short)546, (unsigned short)551, (unsigned short)556, (unsigned short)558, (unsigned short)563, (unsigned short)565, (unsigned short)570, (unsigned short)572, (unsigned short)577, (unsigned short)579, (unsigned short)581, (unsigned short)583, (unsigned short)585, (unsigned short)589, (unsigned short)593, (unsigned short)606, (unsigned short)608, (unsigned short)610, (unsigned short)612, (unsigned short)614, (unsigned short)620, (unsigned short)622, (unsigned short)627, (unsigned short)632, (unsigned short)637, (unsigned short)639, (unsigned short)641, (unsigned short)646, (unsigned short)647, (unsigned short)651, (unsigned short)652, (unsigned short)663, (unsigned short)667, (unsigned short)668, (unsigned short)670, (unsigned short)675, (unsigned short)676, (unsigned short)678, (unsigned short)681, (unsigned short)693, (unsigned short)704, (unsigned short)723, (unsigned short)725, (unsigned short)730, (unsigned short)731, (unsigned short)732, (unsigned short)733, (unsigned short)734, (unsigned short)735, (unsigned short)736, (unsigned short)737, (unsigned short)750, (unsigned short)754, (unsigned short)755, (unsigned short)756, (unsigned short)757, (unsigned short)761, (unsigned short)762, (unsigned short)763, (unsigned short)764, (unsigned short)765, (unsigned short)766, (unsigned short)767, (unsigned short)771, (unsigned short)773, (unsigned short)778, (unsigned short)780, (unsigned short)782, (unsigned short)784, (unsigned short)786, (unsigned short)816, (unsigned short)818, (unsigned short)823, (unsigned short)825, (unsigned short)827, (unsigned short)829, (unsigned short)831, (unsigned short)860, (unsigned short)862, (unsigned short)864, (unsigned short)869, (unsigned short)871, (unsigned short)876, (unsigned short)878, (unsigned short)882, (unsigned short)884, (unsigned short)886, (unsigned short)888, (unsigned short)893, (unsigned short)896, (unsigned short)899, (unsigned short)902, (unsigned short)967, (unsigned short)969, (unsigned short)974, (unsigned short)976, (unsigned short)978, (unsigned short)980, (unsigned short)982, (unsigned short)1013, (unsigned short)1017, (unsigned short)1018, (unsigned short)1019, (unsigned short)1023, (unsigned short)1024, (unsigned short)1025, (unsigned short)1029, (unsigned short)1030, (unsigned short)1031, (unsigned short)1032, (unsigned short)1036, (unsigned short)1039, (unsigned short)1042, (unsigned short)1045, (unsigned short)1048, (unsigned short)1053, (unsigned short)1054, (unsigned short)1056, (unsigned short)1058, (unsigned short)1060, (unsigned short)1062, (unsigned short)1067, (unsigned short)1071, (unsigned short)1074, (unsigned short)1077, (unsigned short)1080, (unsigned short)1083, (unsigned short)1088, (unsigned short)1089, (unsigned short)1091, (unsigned short)1096, (unsigned short)1100, (unsigned short)1102, (unsigned short)1107, (unsigned short)1109, (unsigned short)1114, (unsigned short)1116, (unsigned short)1121, (unsigned short)1126, (unsigned short)1128, (unsigned short)1133, (unsigned short)1135, (unsigned short)1137, (unsigned short)1139, (unsigned short)1144, (unsigned short)1146, (unsigned short)1148, (unsigned short)1150, (unsigned short)1155, (unsigned short)1156, (unsigned short)1157, (unsigned short)1158, (unsigned short)1159, (unsigned short)1160, (unsigned short)1161, (unsigned short)1162, (unsigned short)1163, (unsigned short)1164, (unsigned short)1165, (unsigned short)1167, (unsigned short)1168, (unsigned short)1170, (unsigned short)1174, (unsigned short)1177, (unsigned short)1178, (unsigned short)1179, (unsigned short)1180, (unsigned short)1181, (unsigned short)1182, (unsigned short)1183, (unsigned short)1184, (unsigned short)1185, (unsigned short)1186, (unsigned short)1187, (unsigned short)1188, (unsigned short)1189, (unsigned short)1190, (unsigned short)1192, (unsigned short)1193, (unsigned short)1197, (unsigned short)1198, (unsigned short)1199, (unsigned short)1203, (unsigned short)1207, (unsigned short)1208, (unsigned short)1209, (unsigned short)1213, (unsigned short)1214, (unsigned short)1215, (unsigned short)1216, (unsigned short)1217, (unsigned short)1221, (unsigned short)1222, (unsigned short)1234, (unsigned short)1235, (unsigned short)1239, (unsigned short)1240, (unsigned short)1241, (unsigned short)1242, (unsigned short)1243, (unsigned short)1244, (unsigned short)1245, (unsigned short)1246, (unsigned short)1250, (unsigned short)1254, (unsigned short)1255, (unsigned short)1259, (unsigned short)1267, (unsigned short)1268, (unsigned short)1272, (unsigned short)1273, (unsigned short)1274, (unsigned short)1278, (unsigned short)1279, (unsigned short)1283, (unsigned short)1284, (unsigned short)1285, (unsigned short)1286, (unsigned short)1287, (unsigned short)1288, (unsigned short)1328, (unsigned short)1329, (unsigned short)1333, (unsigned short)1341, (unsigned short)1342, (unsigned short)1350, (unsigned short)1351, (unsigned short)1353, (unsigned short)1354, (unsigned short)1363, (unsigned short)1364, (unsigned short)1368, (unsigned short)1375, (unsigned short)1382, (unsigned short)1388, (unsigned short)1395, (unsigned short)1401, (unsigned short)1410, (unsigned short)1417, (unsigned short)1423, (unsigned short)1429, (unsigned short)1435, (unsigned short)1441, (unsigned short)1447, (unsigned short)1458, (unsigned short)1463, (unsigned short)1464, (unsigned short)1469, (unsigned short)1470, (unsigned short)1471, (unsigned short)1475, (unsigned short)1479, (unsigned short)1480, (unsigned short)1481, (unsigned short)1482, (unsigned short)1483, (unsigned short)1484, (unsigned short)1485, (unsigned short)1498, (unsigned short)1499, (unsigned short)1500, (unsigned short)1501, (unsigned short)1502, (unsigned short)1503, (unsigned short)1504, (unsigned short)1505, (unsigned short)1506, (unsigned short)1507, (unsigned short)1508, (unsigned short)1509, (unsigned short)1510, (unsigned short)1511, (unsigned short)1512, (unsigned short)1513, (unsigned short)1514, (unsigned short)1515, (unsigned short)1516, (unsigned short)1517, (unsigned short)1518, (unsigned short)1519, (unsigned short)1520, (unsigned short)1521, (unsigned short)1523, (unsigned short)1524, (unsigned short)1525, (unsigned short)1526, (unsigned short)1527, (unsigned short)1529, (unsigned short)1530, (unsigned short)1534, (unsigned short)1538, (unsigned short)1542, (unsigned short)1543, (unsigned short)1547, (unsigned short)1549, (unsigned short)1550, (unsigned short)1551, (unsigned short)1552, (unsigned short)1553, (unsigned short)1554, (unsigned short)1555, (unsigned short)1556, (unsigned short)1557, (unsigned short)1559, (unsigned short)1560, (unsigned short)1561, (unsigned short)1562, (unsigned short)1563, (unsigned short)1564, (unsigned short)1565, (unsigned short)1566, (unsigned short)1593, (unsigned short)1594, (unsigned short)1595, (unsigned short)1596, (unsigned short)1600, (unsigned short)1601, (unsigned short)1602, (unsigned short)1603, (unsigned short)1604, (unsigned short)1608, (unsigned short)1609, (unsigned short)1610, (unsigned short)1611, (unsigned short)1613, (unsigned short)1614, (unsigned short)1615, (unsigned short)1616, (unsigned short)1619, (unsigned short)1620, (unsigned short)1624, (unsigned short)1625, (unsigned short)1634, (unsigned short)1635, (unsigned short)1636, (unsigned short)1637, (unsigned short)1638, (unsigned short)1639, (unsigned short)1640, (unsigned short)1641, (unsigned short)1645, (unsigned short)1646, (unsigned short)1650, (unsigned short)1651, (unsigned short)1652, (unsigned short)1653, (unsigned short)1654, (unsigned short)1655, (unsigned short)1656, (unsigned short)1660, (unsigned short)1661, (unsigned short)1662, (unsigned short)1663, (unsigned short)1664, (unsigned short)1668, (unsigned short)1669, (unsigned short)1670, (unsigned short)1671, (unsigned short)1672, (unsigned short)1676, (unsigned short)1684, (unsigned short)1685, (unsigned short)1686, (unsigned short)1687, (unsigned short)1688, (unsigned short)1689, (unsigned short)1690, (unsigned short)1691, (unsigned short)1692, (unsigned short)1696, (unsigned short)1697, (unsigned short)1698, (unsigned short)1699, (unsigned short)1700, (unsigned short)1702, (unsigned short)1703, (unsigned short)1704, (unsigned short)1705, (unsigned short)1709, (unsigned short)1710, (unsigned short)1711, (unsigned short)1713, (unsigned short)1714, (unsigned short)1718, (unsigned short)1719, (unsigned short)1720, (unsigned short)1722, (unsigned short)1723, (unsigned short)1727, (unsigned short)1728, (unsigned short)1729, (unsigned short)1731, (unsigned short)1732, (unsigned short)1736, (unsigned short)1737, (unsigned short)1738, (unsigned short)1742, (unsigned short)1743, (unsigned short)1744, (unsigned short)1748, (unsigned short)1749, (unsigned short)1750, (unsigned short)1751, (unsigned short)1752, (unsigned short)1754, (unsigned short)1755, (unsigned short)1756, (unsigned short)1757, (unsigned short)1759, (unsigned short)1760, (unsigned short)1761, (unsigned short)1762, (unsigned short)1764, (unsigned short)1765, (unsigned short)1766, (unsigned short)1767, (unsigned short)1771, (unsigned short)1772, (unsigned short)1773, (unsigned short)1774, (unsigned short)1775, (unsigned short)1777, (unsigned short)1778, (unsigned short)1779, (unsigned short)1780, (unsigned short)1784, (unsigned short)1785, (unsigned short)1786, (unsigned short)1787, (unsigned short)1788, (unsigned short)1789, (unsigned short)1790, (unsigned short)1791, (unsigned short)1792, (unsigned short)1793, (unsigned short)1794, (unsigned short)1798, (unsigned short)1799, (unsigned short)1800, (unsigned short)1801, (unsigned short)1805, (unsigned short)1806, (unsigned short)1807, (unsigned short)1811, (unsigned short)1812, (unsigned short)1813, (unsigned short)1814, (unsigned short)1816, (unsigned short)1817, (unsigned short)1819, (unsigned short)1820, (unsigned short)1825, (unsigned short)1827, (unsigned short)1832, (unsigned short)1860, (unsigned short)1861, (unsigned short)1862, (unsigned short)1863, (unsigned short)1865, (unsigned short)1866, (unsigned short)1867, (unsigned short)1868, (unsigned short)1870, (unsigned short)1871, (unsigned short)1875, (unsigned short)1876, (unsigned short)1885, (unsigned short)1886, (unsigned short)1890, (unsigned short)1891, (unsigned short)1892, (unsigned short)1893, (unsigned short)1894, (unsigned short)1895, (unsigned short)1896, (unsigned short)1900, (unsigned short)1901, (unsigned short)1905, (unsigned short)1909, (unsigned short)1913, (unsigned short)1920, (unsigned short)1921, (unsigned short)1922, (unsigned short)1923, (unsigned short)1924, (unsigned short)1928, (unsigned short)1929, (unsigned short)1980, (unsigned short)1981, (unsigned short)1982, (unsigned short)1983, (unsigned short)1984, (unsigned short)1985, (unsigned short)1986, (unsigned short)1990, (unsigned short)1991, (unsigned short)1992, (unsigned short)1993, (unsigned short)1994, (unsigned short)2001, (unsigned short)2002, (unsigned short)2003, (unsigned short)2004, (unsigned short)2008, (unsigned short)2009, (unsigned short)2010, (unsigned short)2012, (unsigned short)2013, (unsigned short)2017, (unsigned short)2018, (unsigned short)2019, (unsigned short)2021, (unsigned short)2022, (unsigned short)2026, (unsigned short)2027, (unsigned short)2028, (unsigned short)2030, (unsigned short)2031, (unsigned short)2035, (unsigned short)2036, (unsigned short)2037, (unsigned short)2041, (unsigned short)2042, (unsigned short)2043, (unsigned short)2047, (unsigned short)2048, (unsigned short)2049, (unsigned short)2050, (unsigned short)2051, (unsigned short)2052, (unsigned short)2053, (unsigned short)2054, (unsigned short)2055, (unsigned short)2057, (unsigned short)2058, (unsigned short)2059, (unsigned short)2060, (unsigned short)2061, (unsigned short)2062, (unsigned short)2063, (unsigned short)2064, (unsigned short)2066, (unsigned short)2067, (unsigned short)2068, (unsigned short)2069, (unsigned short)2071, (unsigned short)2072, (unsigned short)2073, (unsigned short)2074, (unsigned short)2076, (unsigned short)2084, (unsigned short)2088, (unsigned short)2093, (unsigned short)2100, (unsigned short)2101, (unsigned short)2105, (unsigned short)2110, (unsigned short)2111, (unsigned short)2115, (unsigned short)2116, (unsigned short)2117, (unsigned short)2118, (unsigned short)2124, (unsigned short)2125, (unsigned short)2126, (unsigned short)2130, (unsigned short)2131, (unsigned short)2132, (unsigned short)2133, (unsigned short)2137, (unsigned short)2139, (unsigned short)2143, (unsigned short)2144, (unsigned short)2145, (unsigned short)2146, (unsigned short)2147, (unsigned short)2148, (unsigned short)2149, (unsigned short)2153, (unsigned short)2154, (unsigned short)2155, (unsigned short)2156, (unsigned short)2157, (unsigned short)2158, (unsigned short)2159, (unsigned short)2163, (unsigned short)2164, (unsigned short)2165, (unsigned short)2169, (unsigned short)2170, (unsigned short)2171, (unsigned short)2175, (unsigned short)2179, (unsigned short)2180, (unsigned short)2184, (unsigned short)2185, (unsigned short)2186, (unsigned short)2190, (unsigned short)2191, (unsigned short)2193, (unsigned short)2194, (unsigned short)2195, (unsigned short)2196, (unsigned short)2197, (unsigned short)2199, (unsigned short)2200, (unsigned short)2201, (unsigned short)2202, (unsigned short)2203, (unsigned short)2205, (unsigned short)2206, (unsigned short)2210, (unsigned short)2211, (unsigned short)2215, (unsigned short)2216, (unsigned short)2217, (unsigned short)2221, (unsigned short)2222, (unsigned short)2223, (unsigned short)2224, (unsigned short)2225, (unsigned short)2226, (unsigned short)2227, (unsigned short)2228, (unsigned short)2229, (unsigned short)2231, (unsigned short)2232, (unsigned short)2234, (unsigned short)2235, (unsigned short)2236, (unsigned short)2237, (unsigned short)2238, (unsigned short)2240, (unsigned short)2241, (unsigned short)2242, (unsigned short)2243, (unsigned short)2247, (unsigned short)2248, (unsigned short)2252, (unsigned short)2253, (unsigned short)2257, (unsigned short)2261, (unsigned short)2262, (unsigned short)2263, (unsigned short)2268, (unsigned short)2269, (unsigned short)2273, (unsigned short)2274, (unsigned short)2275, (unsigned short)2276, (unsigned short)2277, (unsigned short)2278, (unsigned short)2279, (unsigned short)2280, (unsigned short)2281, (unsigned short)2282, (unsigned short)2283, (unsigned short)2284, (unsigned short)2285, (unsigned short)2286, (unsigned short)2287, (unsigned short)2288, (unsigned short)2289, (unsigned short)2290, (unsigned short)2291, (unsigned short)2292, (unsigned short)2293, (unsigned short)2294, (unsigned short)2295, (unsigned short)2296, (unsigned short)2297, (unsigned short)2298, (unsigned short)2302, (unsigned short)2303, (unsigned short)2304, (unsigned short)2305, (unsigned short)2306, (unsigned short)2307, (unsigned short)2308, (unsigned short)2309, (unsigned short)2310, (unsigned short)2311, (unsigned short)2312, (unsigned short)2313, (unsigned short)2314, (unsigned short)2315, (unsigned short)2316, (unsigned short)2317, (unsigned short)2318, (unsigned short)2319, (unsigned short)2320, (unsigned short)2321, (unsigned short)2322, (unsigned short)2323, (unsigned short)2324, (unsigned short)2325, (unsigned short)2331, (unsigned short)2333, (unsigned short)2335, (unsigned short)2337, (unsigned short)2339, (unsigned short)2341, (unsigned short)2343, (unsigned short)2345, (unsigned short)2347, (unsigned short)2349, (unsigned short)2354, (unsigned short)2355, (unsigned short)2359, (unsigned short)2365, (unsigned short)2371, (unsigned short)2378, (unsigned short)2388, (unsigned short)2389, (unsigned short)2390, (unsigned short)2391, (unsigned short)2395, (unsigned short)2396, (unsigned short)2397, (unsigned short)2399, (unsigned short)2400, (unsigned short)2401, (unsigned short)2403, (unsigned short)2404, (unsigned short)2405, (unsigned short)2409, (unsigned short)2413, (unsigned short)2421, (unsigned short)2430, (unsigned short)2439, (unsigned short)2440, (unsigned short)2442, (unsigned short)2443, (unsigned short)2447, (unsigned short)2454, (unsigned short)2461, (unsigned short)2464, (unsigned short)2477, (unsigned short)2491, (unsigned short)2494, (unsigned short)2496, (unsigned short)2498, (unsigned short)2503, (unsigned short)2504, (unsigned short)2508, (unsigned short)2509, (unsigned short)2510, (unsigned short)2511, (unsigned short)2512, (unsigned short)2513, (unsigned short)2514, (unsigned short)2515, (unsigned short)2519, (unsigned short)2520, (unsigned short)2521, (unsigned short)2522, (unsigned short)2523, (unsigned short)2524, (unsigned short)2525, (unsigned short)2526, (unsigned short)2527, (unsigned short)2528, (unsigned short)2532, (unsigned short)2533, (unsigned short)2534, (unsigned short)2535, (unsigned short)2536, (unsigned short)2537, (unsigned short)2538, (unsigned short)2539, (unsigned short)2540, (unsigned short)2541, (unsigned short)2545, (unsigned short)2546, (unsigned short)2547, (unsigned short)2548, (unsigned short)2549, (unsigned short)2550, (unsigned short)2551, (unsigned short)2552, (unsigned short)2553, (unsigned short)2554, (unsigned short)2555, (unsigned short)2556, (unsigned short)2560, (unsigned short)2561, (unsigned short)2562, (unsigned short)2563, (unsigned short)2564, (unsigned short)2565, (unsigned short)2566, (unsigned short)2567, (unsigned short)2568, (unsigned short)2569, (unsigned short)2573, (unsigned short)2574, (unsigned short)2578, (unsigned short)2579, (unsigned short)2580, (unsigned short)2581, (unsigned short)2582, (unsigned short)2583, (unsigned short)2584, (unsigned short)2585, (unsigned short)2586, (unsigned short)2588, (unsigned short)2590, (unsigned short)2608, (unsigned short)2626, (unsigned short)2627, (unsigned short)2631, (unsigned short)2632, (unsigned short)2633, (unsigned short)2634, (unsigned short)2635, (unsigned short)2636, (unsigned short)2637, (unsigned short)2638, (unsigned short)2639, (unsigned short)2657, (unsigned short)2674, (unsigned short)2675, (unsigned short)2676, (unsigned short)2677, (unsigned short)2678, (unsigned short)2679, (unsigned short)2680, (unsigned short)2681, (unsigned short)2682, (unsigned short)2683, (unsigned short)2684, (unsigned short)2685, (unsigned short)2686, (unsigned short)2704, (unsigned short)2721, (unsigned short)2722, (unsigned short)2723, (unsigned short)2724, (unsigned short)2725, (unsigned short)2726, (unsigned short)2727, (unsigned short)2728, (unsigned short)2729, (unsigned short)2730, (unsigned short)2731, (unsigned short)2732, (unsigned short)2733, (unsigned short)2751, (unsigned short)2768, (unsigned short)2769, (unsigned short)2773, (unsigned short)2774, (unsigned short)2775, (unsigned short)2776, (unsigned short)2777, (unsigned short)2781, (unsigned short)2782, (unsigned short)2789, (unsigned short)2791, (unsigned short)2800, (unsigned short)2809, (unsigned short)2818, (unsigned short)2827, (unsigned short)2828, (unsigned short)2829, (unsigned short)2830, (unsigned short)2834, (unsigned short)2835, (unsigned short)2836, (unsigned short)2837, (unsigned short)2838, (unsigned short)2839, (unsigned short)2840, (unsigned short)2841, (unsigned short)2842, (unsigned short)2846, (unsigned short)2850, (unsigned short)2851, (unsigned short)2852, (unsigned short)2853, (unsigned short)2854, (unsigned short)2859, (unsigned short)2868, (unsigned short)2877, (unsigned short)2886, (unsigned short)2900, (unsigned short)2901, (unsigned short)2906, (unsigned short)2910, (unsigned short)2911, (unsigned short)2912, (unsigned short)2913, (unsigned short)2914, (unsigned short)2919, (unsigned short)2928, (unsigned short)2937, (unsigned short)2946, (unsigned short)2960, (unsigned short)2961, (unsigned short)3010, (unsigned short)3011, (unsigned short)3012, (unsigned short)3013, (unsigned short)3025, (unsigned short)3026, (unsigned short)3027, (unsigned short)3032, (unsigned short)3033, (unsigned short)3034, (unsigned short)3035, (unsigned short)3036, (unsigned short)3040, (unsigned short)3041, (unsigned short)3045, (unsigned short)3046, (unsigned short)3047, (unsigned short)3051, (unsigned short)3052, (unsigned short)3056, (unsigned short)3057, (unsigned short)3058, (unsigned short)3059, (unsigned short)3060, (unsigned short)3061, (unsigned short)3062, (unsigned short)3063, (unsigned short)3064, (unsigned short)3065, (unsigned short)3066, (unsigned short)3067, (unsigned short)3068, (unsigned short)3069, (unsigned short)3070, (unsigned short)3071, (unsigned short)3075, (unsigned short)3076, (unsigned short)3077, (unsigned short)3078, (unsigned short)3079, (unsigned short)3080, (unsigned short)3081, (unsigned short)3082, (unsigned short)3086, (unsigned short)3087, (unsigned short)3088, (unsigned short)3089, (unsigned short)3093, (unsigned short)3094, (unsigned short)3095, (unsigned short)3096, (unsigned short)3097, (unsigned short)3101, (unsigned short)3102, (unsigned short)3103, (unsigned short)3104, (unsigned short)3105, (unsigned short)3109, (unsigned short)3110, (unsigned short)3112, (unsigned short)3114, (unsigned short)3116, (unsigned short)3121, (unsigned short)3122, (unsigned short)3124, (unsigned short)3126, (unsigned short)3131, (unsigned short)3132, (unsigned short)3133, (unsigned short)3134, (unsigned short)3138, (unsigned short)3139, (unsigned short)3140, (unsigned short)3141, (unsigned short)3145, (unsigned short)3146, (unsigned short)3147, (unsigned short)3148, (unsigned short)3152, (unsigned short)3153, (unsigned short)3154, (unsigned short)3155, (unsigned short)3159, (unsigned short)3160, (unsigned short)3161, (unsigned short)3162, (unsigned short)3166, (unsigned short)3167, (unsigned short)3168, (unsigned short)3185, (unsigned short)3186, (unsigned short)3187, (unsigned short)3188, (unsigned short)3201, (unsigned short)3218, (unsigned short)3219, (unsigned short)3224, (unsigned short)3225, (unsigned short)3229, (unsigned short)3230, (unsigned short)3231, (unsigned short)3232, (unsigned short)3235, (unsigned short)3236, (unsigned short)3240, (unsigned short)3241, (unsigned short)3242, (unsigned short)3246, (unsigned short)3250, (unsigned short)3254, (unsigned short)3255, (unsigned short)3256, (unsigned short)3257, (unsigned short)3258, (unsigned short)3267, (unsigned short)3276, (unsigned short)3277, (unsigned short)3278, (unsigned short)3279, (unsigned short)3283, (unsigned short)3284, (unsigned short)3288, (unsigned short)3289, (unsigned short)3294, (unsigned short)3295, (unsigned short)3296, (unsigned short)3297, (unsigned short)3298, (unsigned short)3299, (unsigned short)3318, (unsigned short)3319, (unsigned short)3323, (unsigned short)3324, (unsigned short)3325, (unsigned short)3326, (unsigned short)3327, (unsigned short)3328, (unsigned short)3330, (unsigned short)3331, (unsigned short)3332, (unsigned short)3333, (unsigned short)3337, (unsigned short)3338, (unsigned short)3339, (unsigned short)3340, (unsigned short)3341, (unsigned short)3343, (unsigned short)3344, (unsigned short)3345, (unsigned short)3349, (unsigned short)3350, (unsigned short)3351, (unsigned short)3352, (unsigned short)3353, (unsigned short)3354, (unsigned short)3358, (unsigned short)3359, (unsigned short)3360, (unsigned short)3365, (unsigned short)3366, (unsigned short)3367, (unsigned short)3368, (unsigned short)3369, (unsigned short)3370, (unsigned short)3371, (unsigned short)3372, (unsigned short)3373, (unsigned short)3374, (unsigned short)3375, (unsigned short)3376, (unsigned short)3377, (unsigned short)3381, (unsigned short)3382, (unsigned short)3383, (unsigned short)3384, (unsigned short)3385, (unsigned short)3386, (unsigned short)3387, (unsigned short)3391, (unsigned short)3392, (unsigned short)3393, (unsigned short)3397, (unsigned short)3398, (unsigned short)3399, (unsigned short)3403, (unsigned short)3404, (unsigned short)3405, (unsigned short)3406, (unsigned short)3408, (unsigned short)3409, (unsigned short)3410, (unsigned short)3412, (unsigned short)3413, (unsigned short)3414, (unsigned short)3415, (unsigned short)3417, (unsigned short)3418, (unsigned short)3419, (unsigned short)3423, (unsigned short)3424, (unsigned short)3425, (unsigned short)3426, (unsigned short)3427, (unsigned short)3429, (unsigned short)3430, (unsigned short)3431, (unsigned short)3432, (unsigned short)3433, (unsigned short)3437, (unsigned short)3438, (unsigned short)3439, (unsigned short)3440, (unsigned short)3441, (unsigned short)3442, (unsigned short)3443, (unsigned short)3445, (unsigned short)3446, (unsigned short)3447, (unsigned short)3448, (unsigned short)3449, (unsigned short)3453, (unsigned short)3454, (unsigned short)3455, (unsigned short)3459, (unsigned short)3460, (unsigned short)3464, (unsigned short)3465, (unsigned short)3466, (unsigned short)3467, (unsigned short)3471, (unsigned short)3472, (unsigned short)3473, (unsigned short)3475, (unsigned short)3476, (unsigned short)3477, (unsigned short)3481, (unsigned short)3485, (unsigned short)3486, (unsigned short)3488, (unsigned short)3489, (unsigned short)3490, (unsigned short)3494, (unsigned short)3495, (unsigned short)3496, (unsigned short)3497, (unsigned short)3501, (unsigned short)3502, (unsigned short)3506, (unsigned short)3507, (unsigned short)3508, (unsigned short)3512, (unsigned short)3513, (unsigned short)3514, (unsigned short)3515, (unsigned short)3516, (unsigned short)3517, (unsigned short)3518, (unsigned short)3522, (unsigned short)3523, (unsigned short)3524, (unsigned short)3525, (unsigned short)3529, (unsigned short)3530, (unsigned short)3531, (unsigned short)3532, (unsigned short)3536, (unsigned short)3540, (unsigned short)3544, (unsigned short)3546, (unsigned short)3549, (unsigned short)3555, (unsigned short)3556, (unsigned short)3557, (unsigned short)3561, (unsigned short)3562, (unsigned short)3563, (unsigned short)3564, (unsigned short)3565, (unsigned short)3566, (unsigned short)3570, (unsigned short)3571, (unsigned short)3575, (unsigned short)3576, (unsigned short)3577, (unsigned short)3579, (unsigned short)3580, (unsigned short)3582, (unsigned short)3583, (unsigned short)3584, (unsigned short)3585, (unsigned short)3586, (unsigned short)3588, (unsigned short)3589, (unsigned short)3593, (unsigned short)3594, (unsigned short)3595, (unsigned short)3596, (unsigned short)3600, (unsigned short)3601, (unsigned short)3602, (unsigned short)3603, (unsigned short)3605, (unsigned short)3606, (unsigned short)3607, (unsigned short)3608, (unsigned short)3609, (unsigned short)3610, (unsigned short)3611, (unsigned short)3614, (unsigned short)3618, (unsigned short)3619, (unsigned short)3623, (unsigned short)3624, (unsigned short)3628, (unsigned short)3629, (unsigned short)3630, (unsigned short)3631, (unsigned short)3632, (unsigned short)3633, (unsigned short)3634, (unsigned short)3635, (unsigned short)3639, (unsigned short)3640, (unsigned short)3641, (unsigned short)3642, (unsigned short)3648, (unsigned short)3649, (unsigned short)3651, (unsigned short)3652, (unsigned short)3655, (unsigned short)3656, (unsigned short)3659, (unsigned short)3660, (unsigned short)3661, (unsigned short)3662, (unsigned short)3663, (unsigned short)3664, (unsigned short)3668, (unsigned short)3669, (unsigned short)3681, (unsigned short)3682, (unsigned short)3685, (unsigned short)3688, (unsigned short)3690, (unsigned short)3691, (unsigned short)3692, (unsigned short)3702, (unsigned short)3704, (unsigned short)3705, (unsigned short)3707, (unsigned short)3708, (unsigned short)3709, (unsigned short)3710, (unsigned short)3720, (unsigned short)3721, (unsigned short)3722, (unsigned short)3723, (unsigned short)3724, (unsigned short)3725, (unsigned short)3729, (unsigned short)3730, (unsigned short)3739, (unsigned short)3741, (unsigned short)3742, (unsigned short)3744, (unsigned short)3746, (unsigned short)3750, (unsigned short)3751, (unsigned short)3752, (unsigned short)3753, (unsigned short)3754, (unsigned short)3758, (unsigned short)3759, (unsigned short)3760, (unsigned short)3762, (unsigned short)3767, (unsigned short)3768, (unsigned short)3769, (unsigned short)3773, (unsigned short)3774, (unsigned short)3775, (unsigned short)3779, (unsigned short)3783, (unsigned short)3784, (unsigned short)3785, (unsigned short)3789, (unsigned short)3790, (unsigned short)3794, (unsigned short)3795, (unsigned short)3799, (unsigned short)3800, (unsigned short)3801, (unsigned short)3802, (unsigned short)3806, (unsigned short)3810, (unsigned short)3814, (unsigned short)3818
+(unsigned short)0, (unsigned short)282, (unsigned short)282, (unsigned short)301, (unsigned short)340, (unsigned short)341, (unsigned short)421, (unsigned short)425, (unsigned short)428, (unsigned short)429, (unsigned short)430, (unsigned short)469, (unsigned short)471, (unsigned short)476, (unsigned short)481, (unsigned short)486, (unsigned short)488, (unsigned short)493, (unsigned short)495, (unsigned short)500, (unsigned short)502, (unsigned short)507, (unsigned short)509, (unsigned short)511, (unsigned short)513, (unsigned short)515, (unsigned short)519, (unsigned short)523, (unsigned short)536, (unsigned short)538, (unsigned short)540, (unsigned short)542, (unsigned short)544, (unsigned short)550, (unsigned short)552, (unsigned short)557, (unsigned short)562, (unsigned short)567, (unsigned short)569, (unsigned short)571, (unsigned short)576, (unsigned short)577, (unsigned short)581, (unsigned short)582, (unsigned short)593, (unsigned short)597, (unsigned short)598, (unsigned short)600, (unsigned short)605, (unsigned short)606, (unsigned short)608, (unsigned short)611, (unsigned short)623, (unsigned short)634, (unsigned short)653, (unsigned short)655, (unsigned short)660, (unsigned short)661, (unsigned short)662, (unsigned short)663, (unsigned short)664, (unsigned short)665, (unsigned short)666, (unsigned short)667, (unsigned short)680, (unsigned short)684, (unsigned short)685, (unsigned short)686, (unsigned short)687, (unsigned short)691, (unsigned short)692, (unsigned short)693, (unsigned short)694, (unsigned short)695, (unsigned short)696, (unsigned short)697, (unsigned short)701, (unsigned short)703, (unsigned short)708, (unsigned short)710, (unsigned short)712, (unsigned short)714, (unsigned short)716, (unsigned short)746, (unsigned short)748, (unsigned short)753, (unsigned short)755, (unsigned short)757, (unsigned short)759, (unsigned short)761, (unsigned short)790, (unsigned short)792, (unsigned short)794, (unsigned short)799, (unsigned short)801, (unsigned short)806, (unsigned short)808, (unsigned short)812, (unsigned short)814, (unsigned short)816, (unsigned short)818, (unsigned short)823, (unsigned short)826, (unsigned short)829, (unsigned short)832, (unsigned short)897, (unsigned short)899, (unsigned short)904, (unsigned short)906, (unsigned short)908, (unsigned short)910, (unsigned short)912, (unsigned short)943, (unsigned short)947, (unsigned short)948, (unsigned short)949, (unsigned short)953, (unsigned short)954, (unsigned short)955, (unsigned short)959, (unsigned short)960, (unsigned short)961, (unsigned short)962, (unsigned short)966, (unsigned short)969, (unsigned short)972, (unsigned short)975, (unsigned short)978, (unsigned short)983, (unsigned short)984, (unsigned short)986, (unsigned short)988, (unsigned short)990, (unsigned short)992, (unsigned short)997, (unsigned short)1001, (unsigned short)1004, (unsigned short)1007, (unsigned short)1010, (unsigned short)1013, (unsigned short)1018, (unsigned short)1019, (unsigned short)1021, (unsigned short)1026, (unsigned short)1030, (unsigned short)1032, (unsigned short)1037, (unsigned short)1039, (unsigned short)1044, (unsigned short)1046, (unsigned short)1051, (unsigned short)1056, (unsigned short)1058, (unsigned short)1063, (unsigned short)1065, (unsigned short)1067, (unsigned short)1069, (unsigned short)1074, (unsigned short)1076, (unsigned short)1078, (unsigned short)1080, (unsigned short)1085, (unsigned short)1086, (unsigned short)1087, (unsigned short)1088, (unsigned short)1089, (unsigned short)1090, (unsigned short)1091, (unsigned short)1092, (unsigned short)1093, (unsigned short)1094, (unsigned short)1095, (unsigned short)1097, (unsigned short)1098, (unsigned short)1100, (unsigned short)1104, (unsigned short)1107, (unsigned short)1108, (unsigned short)1109, (unsigned short)1110, (unsigned short)1111, (unsigned short)1112, (unsigned short)1113, (unsigned short)1114, (unsigned short)1115, (unsigned short)1116, (unsigned short)1117, (unsigned short)1118, (unsigned short)1119, (unsigned short)1120, (unsigned short)1122, (unsigned short)1123, (unsigned short)1127, (unsigned short)1128, (unsigned short)1129, (unsigned short)1133, (unsigned short)1137, (unsigned short)1138, (unsigned short)1139, (unsigned short)1143, (unsigned short)1144, (unsigned short)1145, (unsigned short)1146, (unsigned short)1147, (unsigned short)1151, (unsigned short)1152, (unsigned short)1164, (unsigned short)1165, (unsigned short)1169, (unsigned short)1170, (unsigned short)1171, (unsigned short)1172, (unsigned short)1173, (unsigned short)1174, (unsigned short)1175, (unsigned short)1176, (unsigned short)1180, (unsigned short)1184, (unsigned short)1185, (unsigned short)1189, (unsigned short)1197, (unsigned short)1198, (unsigned short)1202, (unsigned short)1203, (unsigned short)1204, (unsigned short)1208, (unsigned short)1209, (unsigned short)1213, (unsigned short)1214, (unsigned short)1215, (unsigned short)1216, (unsigned short)1217, (unsigned short)1218, (unsigned short)1258, (unsigned short)1259, (unsigned short)1263, (unsigned short)1271, (unsigned short)1272, (unsigned short)1280, (unsigned short)1281, (unsigned short)1283, (unsigned short)1284, (unsigned short)1293, (unsigned short)1294, (unsigned short)1298, (unsigned short)1305, (unsigned short)1312, (unsigned short)1318, (unsigned short)1325, (unsigned short)1331, (unsigned short)1340, (unsigned short)1347, (unsigned short)1353, (unsigned short)1359, (unsigned short)1365, (unsigned short)1371, (unsigned short)1377, (unsigned short)1388, (unsigned short)1393, (unsigned short)1394, (unsigned short)1399, (unsigned short)1400, (unsigned short)1401, (unsigned short)1405, (unsigned short)1409, (unsigned short)1410, (unsigned short)1411, (unsigned short)1412, (unsigned short)1413, (unsigned short)1414, (unsigned short)1415, (unsigned short)1428, (unsigned short)1429, (unsigned short)1430, (unsigned short)1431, (unsigned short)1432, (unsigned short)1433, (unsigned short)1434, (unsigned short)1435, (unsigned short)1436, (unsigned short)1437, (unsigned short)1438, (unsigned short)1439, (unsigned short)1440, (unsigned short)1441, (unsigned short)1442, (unsigned short)1443, (unsigned short)1444, (unsigned short)1445, (unsigned short)1446, (unsigned short)1447, (unsigned short)1448, (unsigned short)1449, (unsigned short)1450, (unsigned short)1451, (unsigned short)1453, (unsigned short)1454, (unsigned short)1455, (unsigned short)1456, (unsigned short)1457, (unsigned short)1459, (unsigned short)1460, (unsigned short)1464, (unsigned short)1468, (unsigned short)1472, (unsigned short)1473, (unsigned short)1477, (unsigned short)1479, (unsigned short)1480, (unsigned short)1481, (unsigned short)1482, (unsigned short)1483, (unsigned short)1484, (unsigned short)1485, (unsigned short)1486, (unsigned short)1487, (unsigned short)1489, (unsigned short)1490, (unsigned short)1491, (unsigned short)1492, (unsigned short)1493, (unsigned short)1494, (unsigned short)1495, (unsigned short)1496, (unsigned short)1523, (unsigned short)1524, (unsigned short)1525, (unsigned short)1526, (unsigned short)1530, (unsigned short)1531, (unsigned short)1532, (unsigned short)1533, (unsigned short)1534, (unsigned short)1538, (unsigned short)1539, (unsigned short)1540, (unsigned short)1541, (unsigned short)1543, (unsigned short)1544, (unsigned short)1545, (unsigned short)1546, (unsigned short)1549, (unsigned short)1550, (unsigned short)1554, (unsigned short)1555, (unsigned short)1564, (unsigned short)1565, (unsigned short)1566, (unsigned short)1567, (unsigned short)1568, (unsigned short)1569, (unsigned short)1570, (unsigned short)1571, (unsigned short)1575, (unsigned short)1576, (unsigned short)1580, (unsigned short)1581, (unsigned short)1582, (unsigned short)1583, (unsigned short)1584, (unsigned short)1585, (unsigned short)1586, (unsigned short)1590, (unsigned short)1591, (unsigned short)1592, (unsigned short)1593, (unsigned short)1594, (unsigned short)1598, (unsigned short)1599, (unsigned short)1600, (unsigned short)1601, (unsigned short)1602, (unsigned short)1606, (unsigned short)1614, (unsigned short)1615, (unsigned short)1616, (unsigned short)1617, (unsigned short)1618, (unsigned short)1619, (unsigned short)1620, (unsigned short)1621, (unsigned short)1622, (unsigned short)1626, (unsigned short)1627, (unsigned short)1628, (unsigned short)1629, (unsigned short)1630, (unsigned short)1632, (unsigned short)1633, (unsigned short)1634, (unsigned short)1635, (unsigned short)1639, (unsigned short)1640, (unsigned short)1641, (unsigned short)1643, (unsigned short)1644, (unsigned short)1648, (unsigned short)1649, (unsigned short)1650, (unsigned short)1652, (unsigned short)1653, (unsigned short)1657, (unsigned short)1658, (unsigned short)1659, (unsigned short)1661, (unsigned short)1662, (unsigned short)1666, (unsigned short)1667, (unsigned short)1668, (unsigned short)1672, (unsigned short)1673, (unsigned short)1674, (unsigned short)1678, (unsigned short)1679, (unsigned short)1680, (unsigned short)1681, (unsigned short)1682, (unsigned short)1684, (unsigned short)1685, (unsigned short)1686, (unsigned short)1687, (unsigned short)1689, (unsigned short)1690, (unsigned short)1691, (unsigned short)1692, (unsigned short)1694, (unsigned short)1695, (unsigned short)1696, (unsigned short)1697, (unsigned short)1701, (unsigned short)1702, (unsigned short)1703, (unsigned short)1704, (unsigned short)1705, (unsigned short)1707, (unsigned short)1708, (unsigned short)1709, (unsigned short)1710, (unsigned short)1714, (unsigned short)1715, (unsigned short)1716, (unsigned short)1717, (unsigned short)1718, (unsigned short)1719, (unsigned short)1720, (unsigned short)1721, (unsigned short)1722, (unsigned short)1723, (unsigned short)1724, (unsigned short)1728, (unsigned short)1729, (unsigned short)1730, (unsigned short)1731, (unsigned short)1735, (unsigned short)1736, (unsigned short)1737, (unsigned short)1741, (unsigned short)1742, (unsigned short)1743, (unsigned short)1744, (unsigned short)1746, (unsigned short)1747, (unsigned short)1749, (unsigned short)1750, (unsigned short)1755, (unsigned short)1757, (unsigned short)1762, (unsigned short)1790, (unsigned short)1791, (unsigned short)1792, (unsigned short)1793, (unsigned short)1795, (unsigned short)1796, (unsigned short)1797, (unsigned short)1798, (unsigned short)1800, (unsigned short)1801, (unsigned short)1805, (unsigned short)1806, (unsigned short)1815, (unsigned short)1816, (unsigned short)1820, (unsigned short)1821, (unsigned short)1822, (unsigned short)1823, (unsigned short)1824, (unsigned short)1825, (unsigned short)1826, (unsigned short)1830, (unsigned short)1831, (unsigned short)1835, (unsigned short)1839, (unsigned short)1843, (unsigned short)1850, (unsigned short)1851, (unsigned short)1852, (unsigned short)1853, (unsigned short)1854, (unsigned short)1858, (unsigned short)1859, (unsigned short)1902, (unsigned short)1903, (unsigned short)1904, (unsigned short)1905, (unsigned short)1906, (unsigned short)1907, (unsigned short)1908, (unsigned short)1912, (unsigned short)1913, (unsigned short)1914, (unsigned short)1915, (unsigned short)1916, (unsigned short)1923, (unsigned short)1924, (unsigned short)1925, (unsigned short)1926, (unsigned short)1930, (unsigned short)1931, (unsigned short)1932, (unsigned short)1934, (unsigned short)1935, (unsigned short)1939, (unsigned short)1940, (unsigned short)1941, (unsigned short)1943, (unsigned short)1944, (unsigned short)1948, (unsigned short)1949, (unsigned short)1950, (unsigned short)1952, (unsigned short)1953, (unsigned short)1957, (unsigned short)1958, (unsigned short)1959, (unsigned short)1963, (unsigned short)1964, (unsigned short)1965, (unsigned short)1969, (unsigned short)1970, (unsigned short)1971, (unsigned short)1972, (unsigned short)1973, (unsigned short)1974, (unsigned short)1975, (unsigned short)1976, (unsigned short)1977, (unsigned short)1979, (unsigned short)1980, (unsigned short)1981, (unsigned short)1982, (unsigned short)1983, (unsigned short)1984, (unsigned short)1985, (unsigned short)1986, (unsigned short)1988, (unsigned short)1989, (unsigned short)1990, (unsigned short)1991, (unsigned short)1993, (unsigned short)1994, (unsigned short)1995, (unsigned short)1996, (unsigned short)1998, (unsigned short)2006, (unsigned short)2010, (unsigned short)2015, (unsigned short)2022, (unsigned short)2023, (unsigned short)2027, (unsigned short)2032, (unsigned short)2033, (unsigned short)2037, (unsigned short)2038, (unsigned short)2039, (unsigned short)2040, (unsigned short)2046, (unsigned short)2047, (unsigned short)2048, (unsigned short)2052, (unsigned short)2053, (unsigned short)2054, (unsigned short)2055, (unsigned short)2059, (unsigned short)2061, (unsigned short)2065, (unsigned short)2066, (unsigned short)2067, (unsigned short)2068, (unsigned short)2069, (unsigned short)2070, (unsigned short)2071, (unsigned short)2075, (unsigned short)2076, (unsigned short)2077, (unsigned short)2078, (unsigned short)2079, (unsigned short)2080, (unsigned short)2081, (unsigned short)2085, (unsigned short)2086, (unsigned short)2087, (unsigned short)2091, (unsigned short)2092, (unsigned short)2093, (unsigned short)2097, (unsigned short)2101, (unsigned short)2102, (unsigned short)2106, (unsigned short)2107, (unsigned short)2108, (unsigned short)2112, (unsigned short)2113, (unsigned short)2115, (unsigned short)2116, (unsigned short)2117, (unsigned short)2118, (unsigned short)2119, (unsigned short)2121, (unsigned short)2122, (unsigned short)2123, (unsigned short)2124, (unsigned short)2125, (unsigned short)2127, (unsigned short)2128, (unsigned short)2132, (unsigned short)2133, (unsigned short)2137, (unsigned short)2138, (unsigned short)2139, (unsigned short)2143, (unsigned short)2144, (unsigned short)2145, (unsigned short)2146, (unsigned short)2147, (unsigned short)2148, (unsigned short)2149, (unsigned short)2150, (unsigned short)2151, (unsigned short)2153, (unsigned short)2154, (unsigned short)2156, (unsigned short)2157, (unsigned short)2158, (unsigned short)2159, (unsigned short)2160, (unsigned short)2162, (unsigned short)2163, (unsigned short)2164, (unsigned short)2165, (unsigned short)2169, (unsigned short)2170, (unsigned short)2174, (unsigned short)2175, (unsigned short)2179, (unsigned short)2183, (unsigned short)2184, (unsigned short)2185, (unsigned short)2190, (unsigned short)2191, (unsigned short)2195, (unsigned short)2196, (unsigned short)2197, (unsigned short)2198, (unsigned short)2199, (unsigned short)2200, (unsigned short)2201, (unsigned short)2202, (unsigned short)2203, (unsigned short)2204, (unsigned short)2205, (unsigned short)2206, (unsigned short)2207, (unsigned short)2208, (unsigned short)2209, (unsigned short)2210, (unsigned short)2211, (unsigned short)2212, (unsigned short)2213, (unsigned short)2214, (unsigned short)2215, (unsigned short)2216, (unsigned short)2217, (unsigned short)2218, (unsigned short)2219, (unsigned short)2220, (unsigned short)2224, (unsigned short)2225, (unsigned short)2226, (unsigned short)2227, (unsigned short)2228, (unsigned short)2229, (unsigned short)2230, (unsigned short)2231, (unsigned short)2232, (unsigned short)2233, (unsigned short)2234, (unsigned short)2235, (unsigned short)2236, (unsigned short)2237, (unsigned short)2238, (unsigned short)2239, (unsigned short)2240, (unsigned short)2241, (unsigned short)2242, (unsigned short)2243, (unsigned short)2244, (unsigned short)2245, (unsigned short)2246, (unsigned short)2247, (unsigned short)2253, (unsigned short)2255, (unsigned short)2257, (unsigned short)2259, (unsigned short)2261, (unsigned short)2263, (unsigned short)2265, (unsigned short)2267, (unsigned short)2269, (unsigned short)2271, (unsigned short)2276, (unsigned short)2277, (unsigned short)2281, (unsigned short)2287, (unsigned short)2293, (unsigned short)2300, (unsigned short)2310, (unsigned short)2311, (unsigned short)2312, (unsigned short)2313, (unsigned short)2317, (unsigned short)2318, (unsigned short)2319, (unsigned short)2321, (unsigned short)2322, (unsigned short)2323, (unsigned short)2325, (unsigned short)2326, (unsigned short)2327, (unsigned short)2331, (unsigned short)2335, (unsigned short)2343, (unsigned short)2352, (unsigned short)2361, (unsigned short)2362, (unsigned short)2364, (unsigned short)2365, (unsigned short)2369, (unsigned short)2376, (unsigned short)2383, (unsigned short)2386, (unsigned short)2399, (unsigned short)2413, (unsigned short)2416, (unsigned short)2418, (unsigned short)2420, (unsigned short)2425, (unsigned short)2426, (unsigned short)2430, (unsigned short)2431, (unsigned short)2432, (unsigned short)2433, (unsigned short)2434, (unsigned short)2435, (unsigned short)2436, (unsigned short)2437, (unsigned short)2441, (unsigned short)2442, (unsigned short)2443, (unsigned short)2444, (unsigned short)2445, (unsigned short)2446, (unsigned short)2447, (unsigned short)2448, (unsigned short)2449, (unsigned short)2450, (unsigned short)2454, (unsigned short)2455, (unsigned short)2456, (unsigned short)2457, (unsigned short)2458, (unsigned short)2459, (unsigned short)2460, (unsigned short)2461, (unsigned short)2462, (unsigned short)2463, (unsigned short)2467, (unsigned short)2468, (unsigned short)2469, (unsigned short)2470, (unsigned short)2471, (unsigned short)2472, (unsigned short)2473, (unsigned short)2474, (unsigned short)2475, (unsigned short)2476, (unsigned short)2477, (unsigned short)2478, (unsigned short)2482, (unsigned short)2483, (unsigned short)2484, (unsigned short)2485, (unsigned short)2486, (unsigned short)2487, (unsigned short)2488, (unsigned short)2489, (unsigned short)2490, (unsigned short)2491, (unsigned short)2495, (unsigned short)2496, (unsigned short)2500, (unsigned short)2501, (unsigned short)2502, (unsigned short)2503, (unsigned short)2504, (unsigned short)2505, (unsigned short)2506, (unsigned short)2507, (unsigned short)2508, (unsigned short)2510, (unsigned short)2512, (unsigned short)2520, (unsigned short)2530, (unsigned short)2531, (unsigned short)2535, (unsigned short)2536, (unsigned short)2537, (unsigned short)2538, (unsigned short)2539, (unsigned short)2540, (unsigned short)2541, (unsigned short)2542, (unsigned short)2543, (unsigned short)2551, (unsigned short)2560, (unsigned short)2561, (unsigned short)2562, (unsigned short)2563, (unsigned short)2564, (unsigned short)2565, (unsigned short)2566, (unsigned short)2567, (unsigned short)2568, (unsigned short)2569, (unsigned short)2570, (unsigned short)2571, (unsigned short)2572, (unsigned short)2580, (unsigned short)2589, (unsigned short)2590, (unsigned short)2591, (unsigned short)2592, (unsigned short)2593, (unsigned short)2594, (unsigned short)2595, (unsigned short)2596, (unsigned short)2597, (unsigned short)2598, (unsigned short)2599, (unsigned short)2600, (unsigned short)2601, (unsigned short)2609, (unsigned short)2618, (unsigned short)2619, (unsigned short)2623, (unsigned short)2624, (unsigned short)2625, (unsigned short)2626, (unsigned short)2627, (unsigned short)2631, (unsigned short)2632, (unsigned short)2639, (unsigned short)2641, (unsigned short)2650, (unsigned short)2659, (unsigned short)2668, (unsigned short)2677, (unsigned short)2678, (unsigned short)2679, (unsigned short)2680, (unsigned short)2684, (unsigned short)2685, (unsigned short)2686, (unsigned short)2687, (unsigned short)2688, (unsigned short)2689, (unsigned short)2690, (unsigned short)2691, (unsigned short)2692, (unsigned short)2696, (unsigned short)2700, (unsigned short)2701, (unsigned short)2702, (unsigned short)2703, (unsigned short)2704, (unsigned short)2709, (unsigned short)2718, (unsigned short)2727, (unsigned short)2736, (unsigned short)2750, (unsigned short)2751, (unsigned short)2756, (unsigned short)2760, (unsigned short)2761, (unsigned short)2762, (unsigned short)2763, (unsigned short)2764, (unsigned short)2769, (unsigned short)2778, (unsigned short)2787, (unsigned short)2796, (unsigned short)2810, (unsigned short)2811, (unsigned short)2860, (unsigned short)2861, (unsigned short)2862, (unsigned short)2863, (unsigned short)2875, (unsigned short)2876, (unsigned short)2877, (unsigned short)2882, (unsigned short)2883, (unsigned short)2884, (unsigned short)2885, (unsigned short)2886, (unsigned short)2890, (unsigned short)2891, (unsigned short)2895, (unsigned short)2896, (unsigned short)2897, (unsigned short)2901, (unsigned short)2902, (unsigned short)2906, (unsigned short)2907, (unsigned short)2908, (unsigned short)2909, (unsigned short)2910, (unsigned short)2911, (unsigned short)2912, (unsigned short)2913, (unsigned short)2914, (unsigned short)2915, (unsigned short)2916, (unsigned short)2917, (unsigned short)2918, (unsigned short)2919, (unsigned short)2920, (unsigned short)2921, (unsigned short)2925, (unsigned short)2926, (unsigned short)2927, (unsigned short)2928, (unsigned short)2929, (unsigned short)2930, (unsigned short)2931, (unsigned short)2932, (unsigned short)2936, (unsigned short)2937, (unsigned short)2938, (unsigned short)2939, (unsigned short)2943, (unsigned short)2944, (unsigned short)2945, (unsigned short)2946, (unsigned short)2947, (unsigned short)2951, (unsigned short)2952, (unsigned short)2953, (unsigned short)2954, (unsigned short)2955, (unsigned short)2959, (unsigned short)2960, (unsigned short)2962, (unsigned short)2964, (unsigned short)2966, (unsigned short)2971, (unsigned short)2972, (unsigned short)2974, (unsigned short)2976, (unsigned short)2981, (unsigned short)2982, (unsigned short)2983, (unsigned short)2984, (unsigned short)2988, (unsigned short)2989, (unsigned short)2990, (unsigned short)2991, (unsigned short)2995, (unsigned short)2996, (unsigned short)2997, (unsigned short)2998, (unsigned short)3002, (unsigned short)3003, (unsigned short)3004, (unsigned short)3005, (unsigned short)3009, (unsigned short)3010, (unsigned short)3011, (unsigned short)3012, (unsigned short)3016, (unsigned short)3017, (unsigned short)3018, (unsigned short)3035, (unsigned short)3036, (unsigned short)3037, (unsigned short)3038, (unsigned short)3051, (unsigned short)3068, (unsigned short)3069, (unsigned short)3074, (unsigned short)3075, (unsigned short)3079, (unsigned short)3080, (unsigned short)3081, (unsigned short)3082, (unsigned short)3085, (unsigned short)3086, (unsigned short)3090, (unsigned short)3091, (unsigned short)3092, (unsigned short)3096, (unsigned short)3100, (unsigned short)3104, (unsigned short)3105, (unsigned short)3106, (unsigned short)3107, (unsigned short)3108, (unsigned short)3117, (unsigned short)3126, (unsigned short)3127, (unsigned short)3128, (unsigned short)3129, (unsigned short)3133, (unsigned short)3134, (unsigned short)3138, (unsigned short)3139, (unsigned short)3144, (unsigned short)3145, (unsigned short)3146, (unsigned short)3147, (unsigned short)3148, (unsigned short)3149, (unsigned short)3168, (unsigned short)3169, (unsigned short)3173, (unsigned short)3174, (unsigned short)3175, (unsigned short)3176, (unsigned short)3177, (unsigned short)3178, (unsigned short)3180, (unsigned short)3181, (unsigned short)3182, (unsigned short)3183, (unsigned short)3187, (unsigned short)3188, (unsigned short)3189, (unsigned short)3190, (unsigned short)3191, (unsigned short)3193, (unsigned short)3194, (unsigned short)3195, (unsigned short)3199, (unsigned short)3200, (unsigned short)3201, (unsigned short)3202, (unsigned short)3203, (unsigned short)3204, (unsigned short)3208, (unsigned short)3209, (unsigned short)3210, (unsigned short)3215, (unsigned short)3216, (unsigned short)3217, (unsigned short)3218, (unsigned short)3219, (unsigned short)3220, (unsigned short)3221, (unsigned short)3222, (unsigned short)3223, (unsigned short)3224, (unsigned short)3225, (unsigned short)3226, (unsigned short)3227, (unsigned short)3231, (unsigned short)3232, (unsigned short)3233, (unsigned short)3234, (unsigned short)3235, (unsigned short)3236, (unsigned short)3237, (unsigned short)3241, (unsigned short)3242, (unsigned short)3243, (unsigned short)3247, (unsigned short)3248, (unsigned short)3249, (unsigned short)3253, (unsigned short)3254, (unsigned short)3255, (unsigned short)3256, (unsigned short)3258, (unsigned short)3259, (unsigned short)3260, (unsigned short)3262, (unsigned short)3263, (unsigned short)3264, (unsigned short)3265, (unsigned short)3267, (unsigned short)3268, (unsigned short)3269, (unsigned short)3273, (unsigned short)3274, (unsigned short)3275, (unsigned short)3276, (unsigned short)3277, (unsigned short)3279, (unsigned short)3280, (unsigned short)3281, (unsigned short)3282, (unsigned short)3283, (unsigned short)3287, (unsigned short)3288, (unsigned short)3289, (unsigned short)3290, (unsigned short)3291, (unsigned short)3292, (unsigned short)3293, (unsigned short)3295, (unsigned short)3296, (unsigned short)3297, (unsigned short)3298, (unsigned short)3299, (unsigned short)3303, (unsigned short)3304, (unsigned short)3305, (unsigned short)3309, (unsigned short)3310, (unsigned short)3314, (unsigned short)3315, (unsigned short)3316, (unsigned short)3317, (unsigned short)3321, (unsigned short)3322, (unsigned short)3323, (unsigned short)3325, (unsigned short)3326, (unsigned short)3327, (unsigned short)3331, (unsigned short)3335, (unsigned short)3336, (unsigned short)3338, (unsigned short)3339, (unsigned short)3340, (unsigned short)3344, (unsigned short)3345, (unsigned short)3346, (unsigned short)3347, (unsigned short)3351, (unsigned short)3352, (unsigned short)3356, (unsigned short)3357, (unsigned short)3358, (unsigned short)3362, (unsigned short)3363, (unsigned short)3364, (unsigned short)3365, (unsigned short)3366, (unsigned short)3367, (unsigned short)3368, (unsigned short)3372, (unsigned short)3373, (unsigned short)3374, (unsigned short)3375, (unsigned short)3379, (unsigned short)3380, (unsigned short)3381, (unsigned short)3382, (unsigned short)3386, (unsigned short)3390, (unsigned short)3394, (unsigned short)3396, (unsigned short)3399, (unsigned short)3405, (unsigned short)3406, (unsigned short)3407, (unsigned short)3411, (unsigned short)3412, (unsigned short)3413, (unsigned short)3414, (unsigned short)3415, (unsigned short)3416, (unsigned short)3420, (unsigned short)3421, (unsigned short)3425, (unsigned short)3426, (unsigned short)3427, (unsigned short)3429, (unsigned short)3430, (unsigned short)3432, (unsigned short)3433, (unsigned short)3434, (unsigned short)3435, (unsigned short)3436, (unsigned short)3438, (unsigned short)3439, (unsigned short)3443, (unsigned short)3444, (unsigned short)3445, (unsigned short)3446, (unsigned short)3450, (unsigned short)3451, (unsigned short)3452, (unsigned short)3453, (unsigned short)3455, (unsigned short)3456, (unsigned short)3457, (unsigned short)3458, (unsigned short)3459, (unsigned short)3460, (unsigned short)3461, (unsigned short)3464, (unsigned short)3468, (unsigned short)3469, (unsigned short)3473, (unsigned short)3474, (unsigned short)3478, (unsigned short)3479, (unsigned short)3480, (unsigned short)3481, (unsigned short)3482, (unsigned short)3483, (unsigned short)3484, (unsigned short)3485, (unsigned short)3489, (unsigned short)3490, (unsigned short)3491, (unsigned short)3492, (unsigned short)3498, (unsigned short)3499, (unsigned short)3501, (unsigned short)3502, (unsigned short)3505, (unsigned short)3506, (unsigned short)3509, (unsigned short)3510, (unsigned short)3511, (unsigned short)3512, (unsigned short)3513, (unsigned short)3514, (unsigned short)3518, (unsigned short)3519, (unsigned short)3531, (unsigned short)3532, (unsigned short)3535, (unsigned short)3538, (unsigned short)3540, (unsigned short)3541, (unsigned short)3542, (unsigned short)3552, (unsigned short)3554, (unsigned short)3555, (unsigned short)3557, (unsigned short)3558, (unsigned short)3559, (unsigned short)3560, (unsigned short)3570, (unsigned short)3571, (unsigned short)3572, (unsigned short)3573, (unsigned short)3574, (unsigned short)3575, (unsigned short)3579, (unsigned short)3580, (unsigned short)3589, (unsigned short)3591, (unsigned short)3592, (unsigned short)3594, (unsigned short)3596, (unsigned short)3600, (unsigned short)3601, (unsigned short)3602, (unsigned short)3603, (unsigned short)3604, (unsigned short)3608, (unsigned short)3609, (unsigned short)3610, (unsigned short)3612, (unsigned short)3617, (unsigned short)3618, (unsigned short)3619, (unsigned short)3623, (unsigned short)3624, (unsigned short)3625, (unsigned short)3629, (unsigned short)3633, (unsigned short)3634, (unsigned short)3635, (unsigned short)3639, (unsigned short)3640, (unsigned short)3644, (unsigned short)3645, (unsigned short)3649, (unsigned short)3650, (unsigned short)3651, (unsigned short)3652, (unsigned short)3656, (unsigned short)3660, (unsigned short)3664, (unsigned short)3668
 };
 
 static const char * const yytname[] =
@@ -287,10 +287,6 @@ int pos;
 int included;
 } __attribute__ ((gcc_struct));
 
-extern char *  strcpy(char * , const char * );
-
-extern char *  strcat(char * , const char * );
-
 extern char *  __ecereNameSpace__ecere__sys__CopyString(const char *  string);
 
 struct ModuleImport;
@@ -305,6 +301,10 @@ extern const char *  __ecereNameSpace__ecere__GetTranslatedString(const char * n
 
 extern char *  __ecereNameSpace__ecere__sys__RSearchString(const char *  buffer, const char *  subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
 
+extern char *  strcpy(char * , const char * );
+
+extern char *  strcat(char * , const char * );
+
 extern void Compiler_Warning(const char *  format, ...);
 
 extern void *  memcpy(void * , const void * , size_t size);
@@ -1077,6 +1077,8 @@ extern struct External * MkExternalNameSpace(struct Identifier * identifier);
 
 struct Symbol;
 
+extern struct Symbol * _DeclClass(struct Specifier * _class, const char *  name);
+
 struct Identifier
 {
 struct Identifier * prev;
@@ -1103,6 +1105,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1120,8 +1123,6 @@ struct TemplateParameter * templateParameter;
 } __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
-extern struct Symbol * _DeclClass(const char *  name);
-
 struct ClassFunction
 {
 struct ClassFunction * prev;
@@ -1244,9 +1245,9 @@ struct Symbol * symbol;
 int declMode;
 } __attribute__ ((gcc_struct));
 
-extern struct Symbol * DeclClassAddNameSpace(const char *  className);
+extern struct Symbol * DeclClassAddNameSpace(struct Specifier * _class, const char *  className);
 
-extern struct Symbol * DeclClass(const char *  name);
+extern struct Symbol * DeclClass(struct Specifier * _class, const char *  name);
 
 struct ClassDefinition
 {
@@ -1410,6 +1411,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct AsmField;
@@ -3129,17 +3131,7 @@ switch(yyn)
 case 2:
 {
 yyval.specifier = (((void *)0));
-if(yyvsp[(1) - (2)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (2)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (2)].id->string);
+_DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 FreeIdentifier(yyvsp[(1) - (2)].id);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
@@ -3169,17 +3161,7 @@ break;
 case 3:
 {
 yyval.specifier = (((void *)0));
-if(yyvsp[(1) - (2)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (2)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (2)].id->string);
+_DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 FreeIdentifier(yyvsp[(1) - (2)].id);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
@@ -3222,17 +3204,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 }
 else
 {
-if(yyvsp[(1) - (2)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (2)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (2)].id->string);
+_DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 FreeIdentifier(yyvsp[(1) - (2)].id);
 FreeIdentifier(yyvsp[(2) - (2)].id);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
@@ -5072,7 +5044,7 @@ break;
 case 236:
 {
 (void)yyvsp[(1) - (2)].context;
-yyval.symbol = DeclClassAddNameSpace(yyvsp[(2) - (2)].id->string);
+yyval.symbol = DeclClassAddNameSpace(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 FreeIdentifier(yyvsp[(2) - (2)].id);
 yyval.symbol->nameLoc = (yylsp[(2) - (2)]);
 memberAccessStack[++defaultMemberAccess] = 2;
@@ -5082,7 +5054,7 @@ break;
 case 237:
 {
 (void)yyvsp[(1) - (2)].context;
-yyval.symbol = DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+yyval.symbol = DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 yyval.symbol->nameLoc = (yylsp[(2) - (2)]);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ++defaultMemberAccess;
@@ -5093,7 +5065,7 @@ break;
 case 238:
 {
 (void)yyvsp[(2) - (3)].context;
-yyval.symbol = DeclClassAddNameSpace(yyvsp[(3) - (3)].id->string);
+yyval.symbol = DeclClassAddNameSpace(yyvsp[(3) - (3)].id->_class, yyvsp[(3) - (3)].id->string);
 FreeIdentifier(yyvsp[(1) - (3)].id);
 FreeIdentifier(yyvsp[(3) - (3)].id);
 yyval.symbol->nameLoc = (yylsp[(3) - (3)]);
@@ -5105,7 +5077,7 @@ break;
 case 239:
 {
 (void)yyvsp[(2) - (3)].context;
-yyval.symbol = DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
+yyval.symbol = DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
 FreeIdentifier(yyvsp[(1) - (3)].id);
 yyval.symbol->nameLoc = (yylsp[(3) - (3)]);
 yyval.symbol->isRemote = 1;
@@ -5117,7 +5089,7 @@ break;
 case 240:
 {
 (void)yyvsp[(1) - (5)].context;
-yyval.symbol = DeclClassAddNameSpace(yyvsp[(2) - (5)].id->string);
+yyval.symbol = DeclClassAddNameSpace(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 yyval.symbol->templateParams = yyvsp[(4) - (5)].list;
 FreeIdentifier(yyvsp[(2) - (5)].id);
 yyval.symbol->nameLoc = (yylsp[(2) - (5)]);
@@ -5128,7 +5100,7 @@ break;
 case 241:
 {
 (void)yyvsp[(1) - (5)].context;
-yyval.symbol = DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
+yyval.symbol = DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
 yyval.symbol->templateParams = yyvsp[(4) - (5)].list;
 yyval.symbol->nameLoc = (yylsp[(2) - (5)]);
 FreeSpecifier(yyvsp[(2) - (5)].specifier);
@@ -5140,7 +5112,7 @@ break;
 case 242:
 {
 (void)yyvsp[(2) - (6)].context;
-yyval.symbol = DeclClassAddNameSpace(yyvsp[(3) - (6)].id->string);
+yyval.symbol = DeclClassAddNameSpace(yyvsp[(3) - (6)].id->_class, yyvsp[(3) - (6)].id->string);
 yyval.symbol->templateParams = yyvsp[(5) - (6)].list;
 FreeIdentifier(yyvsp[(1) - (6)].id);
 FreeIdentifier(yyvsp[(3) - (6)].id);
@@ -5153,7 +5125,7 @@ break;
 case 243:
 {
 (void)yyvsp[(2) - (6)].context;
-yyval.symbol = DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
+yyval.symbol = DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
 yyval.symbol->templateParams = yyvsp[(5) - (6)].list;
 FreeIdentifier(yyvsp[(1) - (6)].id);
 yyval.symbol->nameLoc = (yylsp[(3) - (6)]);
@@ -5208,7 +5180,7 @@ break;
 case 248:
 {
 (void)yyvsp[(1) - (3)].context;
-yyval._class = MkClass(DeclClassAddNameSpace(yyvsp[(2) - (3)].id->string), (((void *)0)), (((void *)0)));
+yyval._class = MkClass(DeclClassAddNameSpace(yyvsp[(2) - (3)].id->_class, yyvsp[(2) - (3)].id->string), (((void *)0)), (((void *)0)));
 FreeIdentifier(yyvsp[(2) - (3)].id);
 if(defaultMemberAccess > -1)
 defaultMemberAccess--;
@@ -5219,7 +5191,7 @@ break;
 case 249:
 {
 (void)yyvsp[(1) - (3)].context;
-yyval._class = MkClass(DeclClass(yyvsp[(2) - (3)].specifier->__anon1.__anon1.name), (((void *)0)), (((void *)0)));
+yyval._class = MkClass(DeclClass(yyvsp[(2) - (3)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (3)].specifier->__anon1.__anon1.name), (((void *)0)), (((void *)0)));
 FreeSpecifier(yyvsp[(2) - (3)].specifier);
 if(defaultMemberAccess > -1)
 defaultMemberAccess--;
@@ -6830,16 +6802,7 @@ case 499:
 {
 if(yyvsp[(1) - (2)].exp->type == 0)
 {
-if(yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->_class && !yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->string);
+_DeclClass(yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->_class, yyvsp[(1) - (2)].exp->__anon1.__anon1.identifier->string);
 skipErrors = 0;
 FreeExpression(yyvsp[(1) - (2)].exp);
 FreeExpression(yyvsp[(2) - (2)].exp);
@@ -7721,7 +7684,7 @@ case 624:
 {
 yyval.id = yyvsp[(2) - (2)].id;
 if(declMode)
-DeclClassAddNameSpace(yyvsp[(2) - (2)].id->string);
+DeclClassAddNameSpace(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ;
 }
 break;
@@ -7729,7 +7692,7 @@ case 625:
 {
 yyval.id = MkIdentifier(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ;
 }
@@ -8089,7 +8052,7 @@ yyval.specifier = MkSpecifierSubClass(yyvsp[(3) - (4)].specifier);
 break;
 case 677:
 {
-_DeclClass(yyvsp[(3) - (4)].id->string);
+_DeclClass(yyvsp[(3) - (4)].id->_class, yyvsp[(3) - (4)].id->string);
 yyval.specifier = MkSpecifierSubClass(MkSpecifierName(yyvsp[(3) - (4)].id->string));
 FreeIdentifier(yyvsp[(3) - (4)].id);
 ;
@@ -8253,7 +8216,7 @@ yyval.specifier = MkSpecifierSubClass(yyvsp[(3) - (4)].specifier);
 break;
 case 707:
 {
-_DeclClass(yyvsp[(3) - (4)].id->string);
+_DeclClass(yyvsp[(3) - (4)].id->_class, yyvsp[(3) - (4)].id->string);
 yyval.specifier = MkSpecifierSubClass(MkSpecifierName(yyvsp[(3) - (4)].id->string));
 FreeIdentifier(yyvsp[(3) - (4)].id);
 ;
@@ -8518,14 +8481,14 @@ case 739:
 yyval.specifier = yyvsp[(1) - (1)].specifier;
 if(declMode)
 {
-(yyvsp[(1) - (1)].specifier->__anon1.__anon2.addNameSpace ? DeclClassAddNameSpace : DeclClass)(yyvsp[(1) - (1)].specifier->__anon1.__anon2.id->string);
+(yyvsp[(1) - (1)].specifier->__anon1.__anon2.addNameSpace ? DeclClassAddNameSpace : DeclClass)(yyvsp[(1) - (1)].specifier->__anon1.__anon2.id->_class, yyvsp[(1) - (1)].specifier->__anon1.__anon2.id->string);
 }
 ;
 }
 break;
 case 740:
 {
-struct Symbol * symbol = (yyvsp[(1) - (4)].specifier->__anon1.__anon2.addNameSpace ? DeclClassAddNameSpace : DeclClass)(yyvsp[(1) - (4)].specifier->__anon1.__anon2.id->string);
+struct Symbol * symbol = (yyvsp[(1) - (4)].specifier->__anon1.__anon2.addNameSpace ? DeclClassAddNameSpace : DeclClass)(yyvsp[(1) - (4)].specifier->__anon1.__anon2.id->_class, yyvsp[(1) - (4)].specifier->__anon1.__anon2.id->string);
 
 yyval.specifier = yyvsp[(1) - (4)].specifier;
 symbol->templateParams = yyvsp[(3) - (4)].list;
@@ -9103,7 +9066,7 @@ ListAdd(yyvsp[(1) - (2)].list, yyvsp[(2) - (2)].specifier);
 break;
 case 817:
 {
-_DeclClass(yyvsp[(1) - (1)].id->string);
+_DeclClass(yyvsp[(1) - (1)].id->_class, yyvsp[(1) - (1)].id->string);
 yyval.list = MkListOne(MkSpecifierName(yyvsp[(1) - (1)].id->string));
 FreeIdentifier(yyvsp[(1) - (1)].id);
 ;
@@ -9112,7 +9075,7 @@ break;
 case 818:
 {
 yyval.list = yyvsp[(1) - (2)].list;
-_DeclClass(yyvsp[(2) - (2)].id->string);
+_DeclClass(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ListAdd(yyvsp[(1) - (2)].list, MkSpecifierName(yyvsp[(2) - (2)].id->string));
 FreeIdentifier(yyvsp[(2) - (2)].id);
 ;
@@ -9120,17 +9083,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 819:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -9140,16 +9093,7 @@ break;
 case 820:
 {
 yyval.list = yyvsp[(1) - (5)].list;
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -9221,17 +9165,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 831:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -9240,16 +9174,7 @@ FreeIdentifier(yyvsp[(1) - (4)].id);
 break;
 case 832:
 {
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -9341,17 +9266,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 845:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -9360,16 +9275,7 @@ FreeIdentifier(yyvsp[(1) - (4)].id);
 break;
 case 846:
 {
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -9461,17 +9367,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 859:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -9480,16 +9376,7 @@ FreeIdentifier(yyvsp[(1) - (4)].id);
 break;
 case 860:
 {
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -12476,7 +12363,7 @@ ast = MkList();
 break;
 case 1290:
 {
-struct Symbol * symbol = DeclClassAddNameSpace(yyvsp[(3) - (6)].id->string);
+struct Symbol * symbol = DeclClassAddNameSpace(yyvsp[(3) - (6)].id->_class, yyvsp[(3) - (6)].id->string);
 
 FreeIdentifier(yyvsp[(3) - (6)].id);
 yyval.dbtableDef = MkDBTableDef(yyvsp[(2) - (6)].string, symbol, yyvsp[(5) - (6)].list);
@@ -12485,7 +12372,7 @@ yyval.dbtableDef = MkDBTableDef(yyvsp[(2) - (6)].string, symbol, yyvsp[(5) - (6)
 break;
 case 1291:
 {
-struct Symbol * symbol = DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
+struct Symbol * symbol = DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
 
 FreeSpecifier(yyvsp[(3) - (6)].specifier);
 yyval.dbtableDef = MkDBTableDef(yyvsp[(2) - (6)].string, symbol, yyvsp[(5) - (6)].list);
index 00aa5e1..24580ba 100644 (file)
@@ -157,9 +157,9 @@ static int yy_get_next_buffer(void);
 
 static void yy_fatal_error(const char msg[]);
 
-static const short int yy_accept[723] =
+static const short int yy_accept[721] =
 {
-(short)0, (short)112, (short)112, (short)178, (short)176, (short)174, (short)173, (short)172, (short)175, (short)159, (short)176, (short)1, (short)171, (short)165, (short)158, (short)176, (short)153, (short)154, (short)163, (short)162, (short)150, (short)161, (short)157, (short)164, (short)118, (short)118, (short)151, (short)147, (short)166, (short)152, (short)167, (short)170, (short)112, (short)112, (short)112, (short)155, (short)156, (short)168, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)148, (short)169, (short)149, (short)160, (short)146, (short)0, (short)123, (short)0, (short)132, (short)149, (short)141, (short)133, (short)0, (short)0, (short)130, (short)138, (short)128, (short)139, (short)129, (short)140, (short)0, (short)121, (short)2, (short)3, (short)131, (short)122, (short)117, (short)0, (short)118, (short)0, (short)118, (short)112, (short)156, (short)148, (short)155, (short)137, (short)143, (short)145, (short)144, (short)136, (short)0, (short)112, (short)0, (short)112, (short)0, (short)0, (short)134, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)11, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)19, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)135, (short)142, (short)119, (short)125, (short)0, (short)121, (short)121, (short)0, (short)122, (short)117, (short)0, (short)120, (short)0, (short)113, (short)112, (short)127, (short)126, (short)112, (short)112, (short)0, (short)124, (short)0, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)92, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)17, (short)45, (short)112, (short)112, (short)112, (short)112, (short)20, (short)112, (short)112, (short)112, (short)51, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)44, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)0, (short)121, (short)0, (short)121, (short)0, (short)122, (short)120, (short)115, (short)116, (short)113, (short)0, (short)112, (short)112, (short)61, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)4, (short)112, (short)6, (short)7, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)13, (short)14, (short)112, (short)112, (short)112, (short)18, (short)112, (short)112, (short)112, (short)112, (short)112, (short)22, (short)112, (short)52, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)21, (short)112, (short)112, (short)112, (short)38, (short)112, (short)112, (short)112, (short)0, (short)121, (short)115, (short)115, (short)0, (short)115, (short)115, (short)116, (short)0, (short)0, (short)114, (short)62, (short)112, (short)112, (short)112, (short)93, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)5, (short)47, (short)8, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)16, (short)112, (short)112, (short)112, (short)58, (short)46, (short)112, (short)112, (short)112, (short)112, (short)112, (short)53, (short)112, (short)112, (short)25, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)36, (short)112, (short)112, (short)112, (short)95, (short)42, (short)0, (short)115, (short)115, (short)115, (short)0, (short)0, (short)116, (short)114, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)56, (short)50, (short)112, (short)112, (short)12, (short)15, (short)112, (short)55, (short)88, (short)72, (short)112, (short)112, (short)112, (short)84, (short)112, (short)54, (short)112, (short)24, (short)26, (short)29, (short)31, (short)112, (short)112, (short)33, (short)112, (short)34, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)0, (short)115, (short)112, (short)112, (short)112, (short)91, (short)112, (short)112, (short)76, (short)82, (short)112, (short)112, (short)112, (short)57, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)70, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)109, (short)110, (short)108, (short)10, (short)112, (short)112, (short)112, (short)112, (short)85, (short)112, (short)112, (short)112, (short)80, (short)112, (short)112, (short)112, (short)112, (short)35, (short)112, (short)49, (short)112, (short)112, (short)63, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)71, (short)112, (short)27, (short)112, (short)32, (short)94, (short)112, (short)112, (short)79, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)9, (short)112, (short)112, (short)112, (short)112, (short)112, (short)43, (short)23, (short)65, (short)112, (short)106, (short)112, (short)112, (short)37, (short)39, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)77, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)74, (short)75, (short)112, (short)107, (short)112, (short)112, (short)48, (short)112, (short)98, (short)64, (short)112, (short)112, (short)112, (short)112, (short)112, (short)69, (short)81, (short)28, (short)112, (short)41, (short)112, (short)87, (short)104, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)30, (short)68, (short)112, (short)0, (short)112, (short)112, (short)78, (short)112, (short)90, (short)112, (short)112, (short)101, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)73, (short)0, (short)112, (short)83, (short)40, (short)112, (short)112, (short)112, (short)112, (short)112, (short)97, (short)112, (short)96, (short)86, (short)67, (short)112, (short)112, (short)89, (short)112, (short)112, (short)112, (short)112, (short)111, (short)112, (short)112, (short)112, (short)112, (short)112, (short)99, (short)112, (short)105, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)60, (short)112, (short)112, (short)112, (short)112, (short)112, (short)59, (short)112, (short)112, (short)103, (short)112, (short)112, (short)100, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)102, (short)112, (short)66, (short)0
+(short)0, (short)112, (short)112, (short)178, (short)176, (short)174, (short)173, (short)172, (short)175, (short)159, (short)176, (short)1, (short)171, (short)165, (short)158, (short)176, (short)153, (short)154, (short)163, (short)162, (short)150, (short)161, (short)157, (short)164, (short)118, (short)118, (short)151, (short)147, (short)166, (short)152, (short)167, (short)170, (short)112, (short)112, (short)112, (short)155, (short)156, (short)168, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)148, (short)169, (short)149, (short)160, (short)146, (short)0, (short)123, (short)0, (short)132, (short)149, (short)141, (short)133, (short)0, (short)0, (short)130, (short)138, (short)128, (short)139, (short)129, (short)140, (short)0, (short)121, (short)2, (short)3, (short)131, (short)122, (short)117, (short)0, (short)118, (short)0, (short)118, (short)112, (short)156, (short)148, (short)155, (short)137, (short)143, (short)145, (short)144, (short)136, (short)0, (short)112, (short)0, (short)112, (short)0, (short)0, (short)134, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)11, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)19, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)135, (short)142, (short)119, (short)125, (short)0, (short)121, (short)121, (short)0, (short)122, (short)117, (short)0, (short)120, (short)0, (short)113, (short)112, (short)127, (short)126, (short)112, (short)112, (short)0, (short)124, (short)0, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)92, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)17, (short)45, (short)112, (short)112, (short)112, (short)112, (short)20, (short)112, (short)112, (short)112, (short)51, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)44, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)0, (short)121, (short)0, (short)121, (short)0, (short)122, (short)120, (short)115, (short)116, (short)113, (short)0, (short)61, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)4, (short)112, (short)6, (short)7, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)13, (short)14, (short)112, (short)112, (short)112, (short)18, (short)112, (short)112, (short)112, (short)112, (short)112, (short)22, (short)112, (short)52, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)21, (short)112, (short)112, (short)112, (short)38, (short)112, (short)112, (short)112, (short)0, (short)121, (short)115, (short)115, (short)0, (short)115, (short)115, (short)116, (short)0, (short)0, (short)114, (short)62, (short)112, (short)112, (short)112, (short)93, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)5, (short)47, (short)8, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)16, (short)112, (short)112, (short)112, (short)58, (short)46, (short)112, (short)112, (short)112, (short)112, (short)112, (short)53, (short)112, (short)112, (short)25, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)36, (short)112, (short)112, (short)112, (short)95, (short)42, (short)0, (short)115, (short)115, (short)115, (short)0, (short)0, (short)116, (short)114, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)56, (short)50, (short)112, (short)112, (short)12, (short)15, (short)112, (short)55, (short)88, (short)72, (short)112, (short)112, (short)112, (short)84, (short)112, (short)54, (short)112, (short)24, (short)26, (short)29, (short)31, (short)112, (short)112, (short)33, (short)112, (short)34, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)0, (short)115, (short)112, (short)112, (short)112, (short)91, (short)112, (short)112, (short)76, (short)82, (short)112, (short)112, (short)112, (short)57, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)70, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)109, (short)110, (short)108, (short)10, (short)112, (short)112, (short)112, (short)112, (short)85, (short)112, (short)112, (short)112, (short)80, (short)112, (short)112, (short)112, (short)112, (short)35, (short)112, (short)49, (short)112, (short)112, (short)63, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)71, (short)112, (short)27, (short)112, (short)32, (short)94, (short)112, (short)112, (short)79, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)9, (short)112, (short)112, (short)112, (short)112, (short)112, (short)43, (short)23, (short)65, (short)112, (short)106, (short)112, (short)112, (short)37, (short)39, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)77, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)74, (short)75, (short)112, (short)107, (short)112, (short)112, (short)48, (short)112, (short)98, (short)64, (short)112, (short)112, (short)112, (short)112, (short)112, (short)69, (short)81, (short)28, (short)112, (short)41, (short)112, (short)87, (short)104, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)30, (short)68, (short)112, (short)0, (short)112, (short)112, (short)78, (short)112, (short)90, (short)112, (short)112, (short)101, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)73, (short)0, (short)112, (short)83, (short)40, (short)112, (short)112, (short)112, (short)112, (short)112, (short)97, (short)112, (short)96, (short)86, (short)67, (short)112, (short)112, (short)89, (short)112, (short)112, (short)112, (short)112, (short)111, (short)112, (short)112, (short)112, (short)112, (short)112, (short)99, (short)112, (short)105, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)60, (short)112, (short)112, (short)112, (short)112, (short)112, (short)59, (short)112, (short)112, (short)103, (short)112, (short)112, (short)100, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)112, (short)102, (short)112, (short)66, (short)0
 };
 
 static const int yy_ec[256] =
@@ -172,24 +172,24 @@ static const int yy_meta[77] =
 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 1, 1, 1, 1, 5, 1, 6, 6, 6, 6, 2, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1
 };
 
-static const short int yy_base[733] =
+static const short int yy_base[729] =
 {
-(short)0, (short)0, (short)0, (short)254, (short)2565, (short)2565, (short)2565, (short)2565, (short)2565, (short)219, (short)70, (short)2565, (short)2565, (short)50, (short)69, (short)201, (short)2565, (short)2565, (short)199, (short)65, (short)2565, (short)66, (short)64, (short)76, (short)96, (short)79, (short)80, (short)2565, (short)97, (short)194, (short)61, (short)2565, (short)81, (short)88, (short)116, (short)2565, (short)2565, (short)183, (short)132, (short)115, (short)87, (short)143, (short)147, (short)131, (short)148, (short)156, (short)160, (short)121, (short)164, (short)136, (short)203, (short)204, (short)206, (short)208, (short)212, (short)224, (short)2565, (short)88, (short)2565, (short)2565, (short)2565, (short)101, (short)2565, (short)184, (short)2565, (short)2565, (short)2565, (short)2565, (short)182, (short)174, (short)2565, (short)2565, (short)2565, (short)2565, (short)2565, (short)2565, (short)159, (short)259, (short)2565, (short)2565, (short)2565, (short)298, (short)339, (short)218, (short)247, (short)151, (short)0, (short)0, (short)2565, (short)2565, (short)2565, (short)116, (short)2565, (short)2565, (short)2565, (short)111, (short)111, (short)149, (short)106, (short)213, (short)186, (short)85, (short)2565, (short)233, (short)237, (short)232, (short)396, (short)221, (short)240, (short)241, (short)242, (short)265, (short)298, (short)313, (short)306, (short)318, (short)319, (short)323, (short)315, (short)316, (short)334, (short)331, (short)363, (short)364, (short)372, (short)328, (short)374, (short)375, (short)390, (short)391, (short)392, (short)393, (short)400, (short)409, (short)401, (short)394, (short)411, (short)398, (short)416, (short)424, (short)431, (short)399, (short)458, (short)459, (short)463, (short)466, (short)465, (short)468, (short)469, (short)475, (short)470, (short)476, (short)478, (short)487, (short)491, (short)2565, (short)2565, (short)2565, (short)2565, (short)527, (short)517, (short)556, (short)541, (short)546, (short)530, (short)483, (short)595, (short)0, (short)601, (short)0, (short)2565, (short)2565, (short)0, (short)533, (short)243, (short)2565, (short)108, (short)498, (short)550, (short)403, (short)596, (short)589, (short)612, (short)618, (short)611, (short)624, (short)620, (short)642, (short)517, (short)648, (short)600, (short)654, (short)658, (short)664, (short)497, (short)665, (short)666, (short)667, (short)669, (short)671, (short)675, (short)676, (short)571, (short)677, (short)682, (short)695, (short)692, (short)693, (short)701, (short)704, (short)710, (short)712, (short)714, (short)717, (short)508, (short)721, (short)723, (short)736, (short)742, (short)743, (short)747, (short)744, (short)748, (short)749, (short)765, (short)752, (short)764, (short)767, (short)768, (short)769, (short)770, (short)772, (short)780, (short)789, (short)793, (short)792, (short)797, (short)798, (short)804, (short)805, (short)800, (short)808, (short)817, (short)821, (short)820, (short)826, (short)824, (short)827, (short)830, (short)836, (short)845, (short)832, (short)854, (short)875, (short)884, (short)875, (short)894, (short)899, (short)900, (short)905, (short)948, (short)936, (short)992, (short)0, (short)854, (short)858, (short)860, (short)878, (short)876, (short)935, (short)965, (short)900, (short)938, (short)995, (short)998, (short)879, (short)1001, (short)1006, (short)1008, (short)1007, (short)1011, (short)925, (short)1013, (short)1010, (short)1016, (short)1018, (short)1028, (short)1017, (short)1019, (short)1023, (short)1026, (short)1029, (short)1035, (short)1038, (short)1039, (short)1041, (short)1045, (short)1060, (short)1064, (short)1066, (short)1069, (short)1071, (short)1073, (short)1076, (short)1081, (short)1077, (short)1082, (short)1092, (short)1094, (short)1098, (short)1097, (short)1101, (short)1099, (short)1107, (short)1104, (short)1103, (short)1109, (short)1110, (short)1114, (short)1130, (short)1120, (short)1127, (short)1133, (short)1135, (short)1136, (short)1137, (short)1142, (short)1155, (short)1148, (short)1146, (short)1163, (short)1159, (short)1165, (short)1166, (short)1168, (short)1170, (short)1171, (short)1174, (short)1178, (short)1181, (short)1194, (short)1198, (short)1201, (short)1202, (short)1206, (short)1219, (short)1225, (short)0, (short)1215, (short)1257, (short)1247, (short)0, (short)1255, (short)1297, (short)1241, (short)1301, (short)1205, (short)1258, (short)1245, (short)1277, (short)1213, (short)1280, (short)1284, (short)1226, (short)1305, (short)1316, (short)1317, (short)1321, (short)1323, (short)1324, (short)1326, (short)1334, (short)1339, (short)1341, (short)1351, (short)1342, (short)1354, (short)1357, (short)1360, (short)1361, (short)1363, (short)1367, (short)1369, (short)1370, (short)1372, (short)1387, (short)1389, (short)1391, (short)1395, (short)1397, (short)1396, (short)1400, (short)1402, (short)1408, (short)1412, (short)1413, (short)1415, (short)1417, (short)1421, (short)1418, (short)1430, (short)1433, (short)1440, (short)1441, (short)1442, (short)1446, (short)1451, (short)1453, (short)1450, (short)1457, (short)1463, (short)1466, (short)1468, (short)1469, (short)1472, (short)1473, (short)1474, (short)1475, (short)1476, (short)1479, (short)1478, (short)1491, (short)1496, (short)1499, (short)1502, (short)1504, (short)1275, (short)1535, (short)0, (short)1508, (short)1559, (short)1563, (short)1574, (short)1564, (short)1526, (short)1529, (short)1568, (short)1589, (short)1551, (short)1523, (short)1593, (short)1594, (short)1597, (short)1613, (short)1614, (short)1617, (short)1621, (short)1624, (short)1623, (short)1630, (short)1626, (short)1632, (short)1634, (short)1639, (short)1633, (short)1636, (short)1643, (short)1642, (short)1645, (short)1652, (short)1654, (short)1655, (short)1661, (short)1538, (short)1658, (short)1670, (short)1676, (short)1686, (short)1689, (short)1691, (short)1694, (short)1697, (short)1701, (short)1704, (short)1706, (short)1709, (short)1710, (short)1712, (short)1714, (short)1717, (short)1719, (short)1722, (short)1725, (short)1729, (short)1730, (short)1734, (short)1735, (short)1737, (short)1738, (short)1740, (short)1745, (short)1755, (short)1757, (short)1758, (short)1760, (short)1761, (short)1755, (short)1799, (short)1762, (short)1770, (short)1773, (short)1779, (short)1780, (short)1786, (short)1781, (short)1788, (short)1790, (short)1801, (short)1805, (short)1803, (short)1814, (short)1816, (short)1820, (short)1822, (short)1829, (short)1835, (short)1837, (short)1838, (short)1839, (short)1840, (short)1858, (short)1860, (short)1850, (short)1861, (short)1863, (short)1865, (short)1869, (short)1870, (short)1876, (short)1878, (short)1886, (short)1888, (short)1889, (short)1893, (short)1894, (short)1896, (short)1897, (short)1898, (short)1909, (short)1913, (short)1915, (short)1916, (short)1917, (short)1919, (short)1920, (short)1921, (short)1922, (short)1924, (short)1926, (short)1937, (short)1943, (short)1944, (short)1945, (short)1947, (short)1948, (short)1965, (short)1964, (short)1966, (short)1967, (short)1954, (short)1973, (short)1975, (short)1977, (short)1982, (short)1983, (short)1984, (short)1992, (short)1994, (short)1999, (short)2004, (short)2005, (short)2007, (short)2010, (short)2011, (short)2012, (short)2016, (short)2027, (short)2017, (short)2033, (short)2036, (short)2037, (short)2038, (short)2040, (short)2044, (short)2045, (short)2048, (short)2060, (short)2061, (short)2064, (short)2067, (short)2068, (short)2070, (short)2069, (short)2071, (short)2073, (short)2076, (short)2077, (short)2079, (short)2088, (short)2094, (short)2096, (short)2099, (short)2100, (short)2101, (short)2111, (short)2116, (short)2122, (short)2123, (short)2124, (short)2132, (short)2134, (short)2135, (short)2139, (short)2140, (short)2145, (short)2147, (short)2150, (short)2152, (short)2155, (short)2156, (short)2157, (short)2160, (short)2162, (short)2168, (short)2175, (short)2177, (short)2178, (short)2183, (short)2185, (short)2187, (short)2188, (short)2190, (short)2194, (short)2195, (short)2196, (short)2203, (short)2205, (short)2215, (short)2206, (short)2218, (short)2221, (short)2223, (short)96, (short)2225, (short)2226, (short)2224, (short)2227, (short)2233, (short)2244, (short)2250, (short)2252, (short)2254, (short)2255, (short)2270, (short)2259, (short)2267, (short)2271, (short)2272, (short)2276, (short)2274, (short)2565, (short)68, (short)2279, (short)2275, (short)2277, (short)2280, (short)2282, (short)2283, (short)2287, (short)2295, (short)2303, (short)2305, (short)2304, (short)2307, (short)2324, (short)2325, (short)2326, (short)2329, (short)2333, (short)2330, (short)2334, (short)2336, (short)2337, (short)2354, (short)2341, (short)2353, (short)2356, (short)2357, (short)2358, (short)2359, (short)2361, (short)2364, (short)2365, (short)2362, (short)2377, (short)2380, (short)2381, (short)2385, (short)2386, (short)2388, (short)2389, (short)2390, (short)2398, (short)2407, (short)2408, (short)2410, (short)2411, (short)2414, (short)2416, (short)2420, (short)2429, (short)2423, (short)2432, (short)2436, (short)2439, (short)2440, (short)2442, (short)2445, (short)2448, (short)2451, (short)2452, (short)2455, (short)2565, (short)2516, (short)2524, (short)2531, (short)2535, (short)2536, (short)2544, (short)2547, (short)2549, (short)2551, (short)2556
+(short)0, (short)0, (short)0, (short)254, (short)2575, (short)2575, (short)2575, (short)2575, (short)2575, (short)219, (short)70, (short)2575, (short)2575, (short)50, (short)69, (short)201, (short)2575, (short)2575, (short)199, (short)65, (short)2575, (short)66, (short)64, (short)76, (short)96, (short)79, (short)80, (short)2575, (short)97, (short)194, (short)61, (short)2575, (short)81, (short)88, (short)116, (short)2575, (short)2575, (short)183, (short)132, (short)115, (short)87, (short)143, (short)147, (short)131, (short)148, (short)156, (short)160, (short)121, (short)164, (short)136, (short)203, (short)204, (short)206, (short)208, (short)212, (short)224, (short)2575, (short)88, (short)2575, (short)2575, (short)2575, (short)101, (short)2575, (short)184, (short)2575, (short)2575, (short)2575, (short)2575, (short)182, (short)174, (short)2575, (short)2575, (short)2575, (short)2575, (short)2575, (short)2575, (short)159, (short)259, (short)2575, (short)2575, (short)2575, (short)298, (short)339, (short)218, (short)247, (short)151, (short)0, (short)0, (short)2575, (short)2575, (short)2575, (short)116, (short)2575, (short)2575, (short)2575, (short)111, (short)111, (short)149, (short)106, (short)213, (short)186, (short)85, (short)2575, (short)233, (short)237, (short)232, (short)396, (short)221, (short)240, (short)241, (short)242, (short)265, (short)298, (short)313, (short)306, (short)318, (short)319, (short)323, (short)315, (short)316, (short)334, (short)331, (short)363, (short)364, (short)372, (short)328, (short)374, (short)375, (short)390, (short)391, (short)392, (short)393, (short)400, (short)409, (short)401, (short)394, (short)411, (short)398, (short)416, (short)424, (short)431, (short)399, (short)458, (short)459, (short)463, (short)466, (short)465, (short)468, (short)469, (short)475, (short)470, (short)476, (short)478, (short)487, (short)491, (short)2575, (short)2575, (short)2575, (short)2575, (short)527, (short)517, (short)556, (short)541, (short)546, (short)530, (short)483, (short)595, (short)0, (short)601, (short)403, (short)2575, (short)2575, (short)0, (short)533, (short)243, (short)2575, (short)108, (short)498, (short)550, (short)589, (short)596, (short)600, (short)618, (short)571, (short)611, (short)624, (short)620, (short)645, (short)517, (short)648, (short)652, (short)654, (short)663, (short)665, (short)497, (short)664, (short)667, (short)671, (short)672, (short)673, (short)675, (short)680, (short)683, (short)682, (short)684, (short)705, (short)692, (short)695, (short)708, (short)710, (short)720, (short)723, (short)731, (short)738, (short)508, (short)735, (short)739, (short)741, (short)743, (short)744, (short)747, (short)754, (short)748, (short)756, (short)763, (short)765, (short)766, (short)767, (short)771, (short)784, (short)774, (short)786, (short)787, (short)793, (short)794, (short)799, (short)803, (short)806, (short)805, (short)809, (short)810, (short)812, (short)814, (short)821, (short)827, (short)833, (short)834, (short)836, (short)837, (short)838, (short)839, (short)855, (short)860, (short)875, (short)889, (short)880, (short)899, (short)907, (short)905, (short)910, (short)953, (short)941, (short)997, (short)860, (short)866, (short)883, (short)881, (short)876, (short)970, (short)945, (short)927, (short)1003, (short)946, (short)1006, (short)1011, (short)1012, (short)1014, (short)940, (short)1013, (short)1016, (short)1018, (short)1015, (short)1021, (short)943, (short)1022, (short)1023, (short)1024, (short)1033, (short)1034, (short)1040, (short)1041, (short)1042, (short)1043, (short)1051, (short)1050, (short)1058, (short)1071, (short)1059, (short)1076, (short)1078, (short)1079, (short)1082, (short)1086, (short)1087, (short)1094, (short)1099, (short)1102, (short)1103, (short)1104, (short)1106, (short)1105, (short)1107, (short)1110, (short)1111, (short)1114, (short)1123, (short)1127, (short)1130, (short)1129, (short)1135, (short)1136, (short)1139, (short)1140, (short)1142, (short)1147, (short)1148, (short)1155, (short)1151, (short)1164, (short)1168, (short)1171, (short)1172, (short)1173, (short)1174, (short)1184, (short)1191, (short)1194, (short)1200, (short)1203, (short)1204, (short)1207, (short)1209, (short)1211, (short)1217, (short)1222, (short)0, (short)1212, (short)1259, (short)1249, (short)0, (short)1257, (short)1299, (short)1236, (short)1303, (short)1237, (short)1241, (short)1242, (short)1265, (short)1282, (short)1286, (short)1274, (short)1293, (short)1319, (short)1320, (short)1321, (short)1324, (short)1323, (short)1326, (short)1328, (short)1341, (short)1343, (short)1344, (short)1346, (short)1347, (short)1350, (short)1352, (short)1353, (short)1356, (short)1363, (short)1365, (short)1372, (short)1374, (short)1376, (short)1382, (short)1387, (short)1392, (short)1393, (short)1395, (short)1394, (short)1398, (short)1402, (short)1403, (short)1404, (short)1405, (short)1413, (short)1414, (short)1425, (short)1415, (short)1430, (short)1431, (short)1433, (short)1437, (short)1438, (short)1448, (short)1449, (short)1455, (short)1457, (short)1458, (short)1461, (short)1460, (short)1465, (short)1464, (short)1473, (short)1467, (short)1480, (short)1470, (short)1482, (short)1485, (short)1491, (short)1492, (short)1495, (short)1511, (short)1513, (short)1515, (short)1523, (short)1547, (short)0, (short)1519, (short)1571, (short)1527, (short)1586, (short)1576, (short)1549, (short)1541, (short)1566, (short)1572, (short)1601, (short)1554, (short)1605, (short)1606, (short)1611, (short)1623, (short)1626, (short)1627, (short)1629, (short)1630, (short)1548, (short)1633, (short)1635, (short)1636, (short)1638, (short)1642, (short)1645, (short)1648, (short)1655, (short)1654, (short)1658, (short)1660, (short)1663, (short)1667, (short)1664, (short)1666, (short)1675, (short)1684, (short)1685, (short)1687, (short)1688, (short)1690, (short)1703, (short)1706, (short)1709, (short)1711, (short)1713, (short)1714, (short)1715, (short)1716, (short)1718, (short)1724, (short)1726, (short)1733, (short)1737, (short)1739, (short)1741, (short)1742, (short)1744, (short)1746, (short)1750, (short)1759, (short)1752, (short)1762, (short)1761, (short)1765, (short)1767, (short)1768, (short)1773, (short)1806, (short)1777, (short)1774, (short)1778, (short)1780, (short)1787, (short)1793, (short)1795, (short)1798, (short)1808, (short)1810, (short)1814, (short)1821, (short)1823, (short)1826, (short)1827, (short)1831, (short)1839, (short)1842, (short)1843, (short)1844, (short)1847, (short)1849, (short)1859, (short)1862, (short)1865, (short)1869, (short)1870, (short)1872, (short)1877, (short)1878, (short)1880, (short)1885, (short)1889, (short)1898, (short)1901, (short)1904, (short)1905, (short)1906, (short)1909, (short)1910, (short)1914, (short)1917, (short)1921, (short)1925, (short)1930, (short)1927, (short)1932, (short)1933, (short)1936, (short)1934, (short)1938, (short)1945, (short)1949, (short)1953, (short)1955, (short)1960, (short)1957, (short)1964, (short)1973, (short)1970, (short)1976, (short)1980, (short)1981, (short)1983, (short)1985, (short)1989, (short)1993, (short)1996, (short)2004, (short)2008, (short)2011, (short)2013, (short)2014, (short)2016, (short)2015, (short)2019, (short)2021, (short)2020, (short)2023, (short)2026, (short)2039, (short)2041, (short)2042, (short)2043, (short)2048, (short)2049, (short)2054, (short)2066, (short)2069, (short)2072, (short)2073, (short)2075, (short)2076, (short)2079, (short)2077, (short)2078, (short)2081, (short)2082, (short)2084, (short)2088, (short)2100, (short)2105, (short)2106, (short)2109, (short)2110, (short)2112, (short)2121, (short)2127, (short)2122, (short)2131, (short)2134, (short)2132, (short)2144, (short)2147, (short)2149, (short)2150, (short)2152, (short)2156, (short)2157, (short)2160, (short)2162, (short)2165, (short)2168, (short)2172, (short)2180, (short)2181, (short)2184, (short)2185, (short)2188, (short)2189, (short)2190, (short)2196, (short)2197, (short)2208, (short)2200, (short)2209, (short)2212, (short)2213, (short)2217, (short)2215, (short)2228, (short)2225, (short)2232, (short)2233, (short)96, (short)2235, (short)2237, (short)2230, (short)2241, (short)2243, (short)2258, (short)2260, (short)2261, (short)2262, (short)2269, (short)2278, (short)2279, (short)2280, (short)2281, (short)2282, (short)2285, (short)2284, (short)2575, (short)68, (short)2287, (short)2286, (short)2288, (short)2289, (short)2290, (short)2291, (short)2297, (short)2312, (short)2313, (short)2315, (short)2316, (short)2318, (short)2334, (short)2336, (short)2339, (short)2340, (short)2343, (short)2341, (short)2345, (short)2346, (short)2347, (short)2349, (short)2351, (short)2358, (short)2364, (short)2366, (short)2367, (short)2368, (short)2369, (short)2370, (short)2371, (short)2374, (short)2375, (short)2386, (short)2390, (short)2391, (short)2393, (short)2396, (short)2398, (short)2399, (short)2401, (short)2402, (short)2419, (short)2414, (short)2423, (short)2426, (short)2427, (short)2431, (short)2432, (short)2442, (short)2443, (short)2447, (short)2449, (short)2451, (short)2455, (short)2460, (short)2466, (short)2464, (short)2467, (short)2470, (short)2575, (short)2531, (short)2539, (short)2546, (short)2550, (short)2551, (short)2559, (short)2562, (short)2566
 };
 
-static const short int yy_def[733] =
+static const short int yy_def[729] =
 {
-(short)0, (short)722, (short)1, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)723, (short)722, (short)722, (short)722, (short)722, (short)724, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)24, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)725, (short)725, (short)725, (short)722, (short)722, (short)722, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)722, (short)722, (short)722, (short)722, (short)723, (short)722, (short)723, (short)722, (short)722, (short)722, (short)722, (short)724, (short)724, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)726, (short)25, (short)727, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)725, (short)722, (short)725, (short)728, (short)724, (short)722, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)729, (short)726, (short)730, (short)722, (short)722, (short)731, (short)725, (short)728, (short)722, (short)728, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)77, (short)722, (short)722, (short)722, (short)81, (short)722, (short)729, (short)722, (short)722, (short)722, (short)730, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)161, (short)259, (short)722, (short)722, (short)260, (short)350, (short)722, (short)722, (short)722, (short)722, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)722, (short)350, (short)722, (short)722, (short)722, (short)722, (short)722, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)722, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)732, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)722, (short)732, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)725, (short)0, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722
+(short)0, (short)720, (short)1, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)721, (short)720, (short)720, (short)720, (short)720, (short)722, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)24, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)723, (short)723, (short)723, (short)720, (short)720, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)720, (short)720, (short)720, (short)720, (short)721, (short)720, (short)721, (short)720, (short)720, (short)720, (short)720, (short)722, (short)722, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)724, (short)25, (short)725, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)723, (short)720, (short)723, (short)726, (short)722, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)727, (short)724, (short)723, (short)720, (short)720, (short)725, (short)723, (short)726, (short)720, (short)726, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)77, (short)720, (short)720, (short)720, (short)81, (short)720, (short)727, (short)720, (short)720, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)161, (short)259, (short)720, (short)720, (short)260, (short)348, (short)720, (short)720, (short)720, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)720, (short)348, (short)720, (short)720, (short)720, (short)720, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)720, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)728, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)720, (short)728, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)0, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720
 };
 
-static const short int yy_nxt[2642] =
+static const short int yy_nxt[2652] =
 {
-(short)0, (short)4, (short)5, (short)6, (short)7, (short)8, (short)9, (short)10, (short)11, (short)12, (short)13, (short)14, (short)15, (short)16, (short)17, (short)18, (short)19, (short)20, (short)21, (short)22, (short)23, (short)24, (short)25, (short)25, (short)25, (short)26, (short)27, (short)28, (short)29, (short)30, (short)31, (short)32, (short)33, (short)32, (short)32, (short)32, (short)32, (short)32, (short)32, (short)34, (short)32, (short)32, (short)32, (short)35, (short)4, (short)36, (short)37, (short)38, (short)39, (short)40, (short)41, (short)42, (short)43, (short)44, (short)45, (short)32, (short)46, (short)32, (short)32, (short)47, (short)32, (short)48, (short)32, (short)49, (short)50, (short)51, (short)52, (short)53, (short)54, (short)55, (short)32, (short)32, (short)32, (short)56, (short)57, (short)58, (short)59, (short)62, (short)64, (short)65, (short)66, (short)71, (short)660, (short)76, (short)73, (short)77, (short)77, (short)77, (short)77, (short)94, (short)95, (short)78, (short)96, (short)72, (short)74, (short)75, (short)79, (short)67, (short)96, (short)96, (short)86, (short)86, (short)86, (short)86, (short)80, (short)87, (short)98, (short)89, (short)62, (short)88, (short)660, (short)722, (short)98, (short)98, (short)63, (short)81, (short)155, (short)82, (short)82, (short)82, (short)82, (short)722, (short)90, (short)100, (short)91, (short)92, (short)96, (short)96, (short)101, (short)69, (short)83, (short)172, (short)96, (short)84, (short)84, (short)84, (short)98, (short)84, (short)85, (short)171, (short)98, (short)98, (short)96, (short)96, (short)170, (short)63, (short)98, (short)96, (short)83, (short)722, (short)99, (short)113, (short)84, (short)84, (short)96, (short)84, (short)98, (short)98, (short)96, (short)96, (short)96, (short)98, (short)156, (short)84, (short)103, (short)104, (short)85, (short)96, (short)98, (short)105, (short)167, (short)96, (short)98, (short)98, (short)98, (short)96, (short)110, (short)722, (short)158, (short)106, (short)111, (short)98, (short)112, (short)135, (short)107, (short)98, (short)68, (short)722, (short)108, (short)98, (short)123, (short)114, (short)124, (short)175, (short)157, (short)118, (short)119, (short)109, (short)115, (short)120, (short)138, (short)125, (short)116, (short)139, (short)126, (short)117, (short)121, (short)127, (short)129, (short)122, (short)128, (short)102, (short)136, (short)131, (short)96, (short)96, (short)137, (short)96, (short)130, (short)96, (short)132, (short)133, (short)93, (short)96, (short)96, (short)134, (short)69, (short)70, (short)98, (short)98, (short)176, (short)98, (short)96, (short)98, (short)165, (short)96, (short)165, (short)98, (short)98, (short)166, (short)166, (short)166, (short)166, (short)96, (short)96, (short)69, (short)98, (short)60, (short)96, (short)98, (short)175, (short)96, (short)96, (short)96, (short)722, (short)140, (short)141, (short)98, (short)98, (short)142, (short)143, (short)147, (short)98, (short)722, (short)149, (short)98, (short)98, (short)98, (short)151, (short)150, (short)144, (short)145, (short)153, (short)146, (short)152, (short)173, (short)96, (short)148, (short)722, (short)154, (short)77, (short)77, (short)77, (short)77, (short)84, (short)84, (short)84, (short)176, (short)84, (short)722, (short)98, (short)190, (short)179, (short)159, (short)160, (short)177, (short)160, (short)160, (short)160, (short)178, (short)722, (short)191, (short)722, (short)84, (short)84, (short)722, (short)84, (short)192, (short)722, (short)96, (short)722, (short)159, (short)160, (short)193, (short)84, (short)160, (short)160, (short)96, (short)160, (short)161, (short)161, (short)161, (short)161, (short)98, (short)96, (short)194, (short)96, (short)96, (short)722, (short)96, (short)96, (short)98, (short)162, (short)163, (short)96, (short)163, (short)163, (short)163, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)98, (short)96, (short)722, (short)722, (short)98, (short)722, (short)162, (short)163, (short)722, (short)98, (short)163, (short)163, (short)98, (short)163, (short)81, (short)98, (short)82, (short)82, (short)82, (short)82, (short)195, (short)196, (short)198, (short)199, (short)722, (short)202, (short)722, (short)197, (short)203, (short)83, (short)96, (short)96, (short)164, (short)164, (short)164, (short)722, (short)164, (short)201, (short)204, (short)96, (short)200, (short)96, (short)96, (short)205, (short)98, (short)98, (short)207, (short)83, (short)722, (short)206, (short)211, (short)164, (short)164, (short)98, (short)164, (short)98, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)164, (short)96, (short)722, (short)96, (short)96, (short)96, (short)96, (short)722, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)209, (short)208, (short)722, (short)722, (short)722, (short)98, (short)96, (short)98, (short)213, (short)212, (short)210, (short)722, (short)98, (short)96, (short)722, (short)180, (short)181, (short)182, (short)183, (short)184, (short)98, (short)722, (short)268, (short)185, (short)722, (short)214, (short)222, (short)98, (short)215, (short)216, (short)218, (short)186, (short)187, (short)188, (short)217, (short)189, (short)232, (short)221, (short)224, (short)219, (short)96, (short)96, (short)223, (short)225, (short)227, (short)96, (short)220, (short)96, (short)96, (short)226, (short)96, (short)96, (short)96, (short)722, (short)98, (short)98, (short)228, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)229, (short)98, (short)98, (short)98, (short)230, (short)231, (short)96, (short)722, (short)98, (short)98, (short)96, (short)98, (short)166, (short)166, (short)166, (short)166, (short)96, (short)96, (short)722, (short)236, (short)98, (short)234, (short)237, (short)240, (short)98, (short)722, (short)722, (short)96, (short)233, (short)241, (short)98, (short)98, (short)242, (short)238, (short)245, (short)239, (short)96, (short)722, (short)722, (short)235, (short)243, (short)98, (short)248, (short)246, (short)244, (short)249, (short)722, (short)722, (short)247, (short)722, (short)98, (short)252, (short)96, (short)252, (short)722, (short)251, (short)253, (short)253, (short)253, (short)253, (short)160, (short)250, (short)160, (short)160, (short)160, (short)256, (short)98, (short)256, (short)266, (short)96, (short)257, (short)257, (short)257, (short)257, (short)722, (short)164, (short)164, (short)164, (short)160, (short)164, (short)281, (short)160, (short)160, (short)98, (short)160, (short)161, (short)161, (short)161, (short)161, (short)163, (short)96, (short)163, (short)163, (short)163, (short)164, (short)164, (short)282, (short)164, (short)254, (short)255, (short)265, (short)255, (short)255, (short)255, (short)98, (short)164, (short)722, (short)163, (short)96, (short)722, (short)163, (short)163, (short)722, (short)163, (short)722, (short)96, (short)254, (short)255, (short)267, (short)96, (short)255, (short)255, (short)98, (short)255, (short)166, (short)166, (short)166, (short)166, (short)260, (short)98, (short)96, (short)96, (short)722, (short)98, (short)722, (short)296, (short)722, (short)96, (short)258, (short)96, (short)258, (short)258, (short)258, (short)96, (short)98, (short)98, (short)261, (short)261, (short)261, (short)262, (short)261, (short)98, (short)722, (short)98, (short)722, (short)722, (short)258, (short)98, (short)722, (short)258, (short)258, (short)96, (short)258, (short)269, (short)272, (short)261, (short)261, (short)96, (short)261, (short)270, (short)271, (short)273, (short)262, (short)96, (short)284, (short)98, (short)261, (short)96, (short)275, (short)722, (short)278, (short)98, (short)274, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)276, (short)96, (short)98, (short)722, (short)277, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)722, (short)98, (short)722, (short)279, (short)722, (short)98, (short)98, (short)98, (short)96, (short)96, (short)722, (short)96, (short)98, (short)280, (short)286, (short)283, (short)287, (short)96, (short)285, (short)289, (short)96, (short)722, (short)98, (short)98, (short)290, (short)98, (short)96, (short)722, (short)96, (short)295, (short)96, (short)98, (short)288, (short)96, (short)98, (short)298, (short)722, (short)96, (short)291, (short)96, (short)98, (short)292, (short)98, (short)297, (short)98, (short)293, (short)294, (short)98, (short)299, (short)301, (short)302, (short)98, (short)96, (short)98, (short)303, (short)304, (short)300, (short)722, (short)96, (short)96, (short)96, (short)305, (short)722, (short)96, (short)96, (short)96, (short)98, (short)722, (short)96, (short)307, (short)309, (short)308, (short)98, (short)98, (short)98, (short)306, (short)314, (short)98, (short)98, (short)98, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)722, (short)96, (short)722, (short)310, (short)318, (short)722, (short)722, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)315, (short)98, (short)311, (short)313, (short)96, (short)317, (short)316, (short)96, (short)96, (short)98, (short)312, (short)722, (short)96, (short)96, (short)722, (short)96, (short)722, (short)722, (short)98, (short)96, (short)96, (short)98, (short)98, (short)96, (short)319, (short)323, (short)98, (short)98, (short)322, (short)98, (short)321, (short)320, (short)96, (short)98, (short)98, (short)96, (short)96, (short)98, (short)722, (short)96, (short)324, (short)96, (short)96, (short)325, (short)722, (short)96, (short)98, (short)96, (short)328, (short)98, (short)98, (short)96, (short)330, (short)98, (short)333, (short)98, (short)98, (short)326, (short)327, (short)98, (short)96, (short)98, (short)722, (short)722, (short)722, (short)98, (short)722, (short)329, (short)722, (short)96, (short)722, (short)331, (short)722, (short)96, (short)98, (short)96, (short)332, (short)336, (short)334, (short)253, (short)253, (short)253, (short)253, (short)98, (short)339, (short)341, (short)335, (short)98, (short)342, (short)98, (short)337, (short)96, (short)338, (short)96, (short)96, (short)344, (short)722, (short)340, (short)722, (short)343, (short)253, (short)253, (short)253, (short)253, (short)345, (short)98, (short)345, (short)98, (short)98, (short)346, (short)346, (short)346, (short)346, (short)722, (short)255, (short)96, (short)255, (short)255, (short)255, (short)257, (short)257, (short)257, (short)257, (short)356, (short)257, (short)257, (short)257, (short)257, (short)722, (short)98, (short)722, (short)722, (short)255, (short)365, (short)358, (short)255, (short)255, (short)722, (short)255, (short)258, (short)96, (short)258, (short)258, (short)258, (short)347, (short)357, (short)348, (short)348, (short)348, (short)349, (short)96, (short)722, (short)722, (short)96, (short)98, (short)722, (short)722, (short)258, (short)722, (short)722, (short)258, (short)258, (short)347, (short)258, (short)98, (short)348, (short)348, (short)98, (short)348, (short)722, (short)361, (short)722, (short)349, (short)350, (short)350, (short)350, (short)350, (short)261, (short)261, (short)261, (short)96, (short)261, (short)722, (short)350, (short)350, (short)350, (short)350, (short)351, (short)722, (short)352, (short)352, (short)352, (short)353, (short)372, (short)98, (short)359, (short)261, (short)261, (short)362, (short)261, (short)350, (short)350, (short)350, (short)350, (short)350, (short)351, (short)722, (short)261, (short)352, (short)352, (short)96, (short)352, (short)354, (short)96, (short)354, (short)353, (short)96, (short)355, (short)355, (short)355, (short)355, (short)96, (short)96, (short)96, (short)98, (short)96, (short)96, (short)98, (short)96, (short)360, (short)98, (short)96, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)722, (short)96, (short)363, (short)98, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)722, (short)96, (short)722, (short)722, (short)364, (short)98, (short)370, (short)371, (short)98, (short)98, (short)367, (short)98, (short)366, (short)375, (short)374, (short)98, (short)96, (short)368, (short)369, (short)376, (short)96, (short)373, (short)96, (short)377, (short)378, (short)96, (short)379, (short)96, (short)722, (short)96, (short)98, (short)722, (short)96, (short)96, (short)98, (short)383, (short)98, (short)96, (short)96, (short)98, (short)382, (short)98, (short)384, (short)98, (short)722, (short)380, (short)98, (short)98, (short)96, (short)381, (short)96, (short)98, (short)98, (short)96, (short)96, (short)96, (short)385, (short)96, (short)386, (short)96, (short)96, (short)722, (short)98, (short)96, (short)98, (short)96, (short)96, (short)98, (short)98, (short)98, (short)96, (short)98, (short)399, (short)98, (short)98, (short)388, (short)96, (short)98, (short)387, (short)98, (short)98, (short)391, (short)389, (short)96, (short)98, (short)392, (short)96, (short)722, (short)390, (short)96, (short)98, (short)96, (short)96, (short)96, (short)722, (short)722, (short)397, (short)98, (short)96, (short)722, (short)98, (short)393, (short)96, (short)98, (short)96, (short)98, (short)98, (short)98, (short)394, (short)395, (short)396, (short)96, (short)98, (short)398, (short)400, (short)96, (short)98, (short)403, (short)98, (short)96, (short)401, (short)96, (short)96, (short)402, (short)96, (short)98, (short)96, (short)96, (short)404, (short)98, (short)96, (short)722, (short)722, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)722, (short)98, (short)98, (short)722, (short)405, (short)98, (short)407, (short)408, (short)412, (short)98, (short)406, (short)96, (short)98, (short)410, (short)409, (short)96, (short)411, (short)413, (short)96, (short)96, (short)722, (short)415, (short)96, (short)96, (short)417, (short)98, (short)418, (short)722, (short)419, (short)98, (short)96, (short)416, (short)98, (short)98, (short)414, (short)722, (short)98, (short)98, (short)722, (short)722, (short)722, (short)421, (short)722, (short)96, (short)98, (short)420, (short)346, (short)346, (short)346, (short)346, (short)722, (short)722, (short)346, (short)346, (short)346, (short)346, (short)348, (short)98, (short)348, (short)348, (short)348, (short)722, (short)96, (short)424, (short)425, (short)722, (short)437, (short)422, (short)355, (short)355, (short)355, (short)355, (short)722, (short)423, (short)348, (short)96, (short)98, (short)348, (short)348, (short)426, (short)348, (short)426, (short)440, (short)722, (short)427, (short)427, (short)427, (short)427, (short)428, (short)98, (short)429, (short)429, (short)429, (short)430, (short)96, (short)722, (short)352, (short)96, (short)352, (short)352, (short)352, (short)96, (short)427, (short)427, (short)427, (short)427, (short)428, (short)435, (short)98, (short)429, (short)429, (short)98, (short)429, (short)722, (short)352, (short)98, (short)430, (short)352, (short)352, (short)431, (short)352, (short)431, (short)96, (short)434, (short)432, (short)432, (short)432, (short)432, (short)355, (short)355, (short)355, (short)355, (short)722, (short)96, (short)96, (short)722, (short)98, (short)436, (short)96, (short)722, (short)96, (short)96, (short)433, (short)96, (short)433, (short)433, (short)433, (short)98, (short)98, (short)439, (short)438, (short)96, (short)98, (short)445, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)433, (short)722, (short)722, (short)433, (short)433, (short)98, (short)433, (short)722, (short)96, (short)722, (short)98, (short)96, (short)98, (short)98, (short)96, (short)443, (short)441, (short)96, (short)96, (short)722, (short)96, (short)442, (short)98, (short)444, (short)96, (short)98, (short)96, (short)96, (short)98, (short)96, (short)448, (short)98, (short)98, (short)447, (short)98, (short)722, (short)446, (short)449, (short)98, (short)450, (short)98, (short)98, (short)722, (short)98, (short)96, (short)451, (short)96, (short)722, (short)96, (short)452, (short)722, (short)454, (short)96, (short)96, (short)96, (short)455, (short)456, (short)96, (short)98, (short)96, (short)98, (short)453, (short)98, (short)722, (short)458, (short)96, (short)98, (short)98, (short)98, (short)96, (short)96, (short)98, (short)96, (short)98, (short)96, (short)96, (short)457, (short)459, (short)96, (short)98, (short)722, (short)722, (short)722, (short)98, (short)98, (short)460, (short)98, (short)96, (short)98, (short)98, (short)96, (short)722, (short)98, (short)463, (short)461, (short)464, (short)462, (short)96, (short)96, (short)96, (short)467, (short)98, (short)722, (short)96, (short)98, (short)465, (short)469, (short)96, (short)96, (short)466, (short)96, (short)98, (short)98, (short)98, (short)96, (short)468, (short)471, (short)98, (short)478, (short)472, (short)96, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)470, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)96, (short)98, (short)476, (short)98, (short)98, (short)722, (short)473, (short)98, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)98, (short)475, (short)474, (short)96, (short)722, (short)479, (short)96, (short)480, (short)477, (short)96, (short)481, (short)96, (short)98, (short)722, (short)483, (short)482, (short)485, (short)98, (short)487, (short)722, (short)98, (short)722, (short)490, (short)98, (short)484, (short)98, (short)488, (short)491, (short)722, (short)722, (short)96, (short)489, (short)722, (short)96, (short)722, (short)486, (short)96, (short)722, (short)722, (short)429, (short)493, (short)429, (short)429, (short)429, (short)98, (short)96, (short)495, (short)98, (short)492, (short)722, (short)98, (short)494, (short)427, (short)427, (short)427, (short)427, (short)722, (short)429, (short)96, (short)98, (short)429, (short)429, (short)722, (short)429, (short)722, (short)722, (short)348, (short)722, (short)348, (short)348, (short)348, (short)496, (short)98, (short)496, (short)498, (short)96, (short)497, (short)497, (short)497, (short)497, (short)432, (short)432, (short)432, (short)432, (short)348, (short)503, (short)499, (short)348, (short)348, (short)98, (short)348, (short)432, (short)432, (short)432, (short)432, (short)433, (short)96, (short)433, (short)433, (short)433, (short)96, (short)96, (short)722, (short)502, (short)96, (short)352, (short)722, (short)352, (short)352, (short)352, (short)98, (short)722, (short)722, (short)433, (short)98, (short)98, (short)433, (short)433, (short)98, (short)433, (short)96, (short)96, (short)722, (short)352, (short)96, (short)500, (short)352, (short)352, (short)96, (short)352, (short)96, (short)96, (short)501, (short)96, (short)98, (short)98, (short)509, (short)96, (short)98, (short)96, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)504, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)98, (short)505, (short)98, (short)506, (short)96, (short)98, (short)96, (short)96, (short)98, (short)98, (short)96, (short)98, (short)512, (short)96, (short)722, (short)507, (short)508, (short)511, (short)98, (short)513, (short)98, (short)98, (short)96, (short)722, (short)98, (short)722, (short)510, (short)98, (short)96, (short)514, (short)722, (short)722, (short)517, (short)518, (short)519, (short)520, (short)98, (short)521, (short)96, (short)515, (short)516, (short)96, (short)98, (short)96, (short)526, (short)522, (short)96, (short)523, (short)528, (short)96, (short)524, (short)525, (short)98, (short)96, (short)722, (short)98, (short)96, (short)98, (short)96, (short)722, (short)98, (short)96, (short)96, (short)98, (short)96, (short)527, (short)96, (short)98, (short)529, (short)96, (short)98, (short)96, (short)98, (short)530, (short)96, (short)98, (short)98, (short)96, (short)98, (short)531, (short)98, (short)96, (short)96, (short)98, (short)722, (short)98, (short)96, (short)96, (short)98, (short)96, (short)96, (short)98, (short)96, (short)533, (short)722, (short)98, (short)98, (short)96, (short)532, (short)534, (short)98, (short)98, (short)722, (short)98, (short)98, (short)536, (short)98, (short)96, (short)537, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)722, (short)535, (short)497, (short)497, (short)497, (short)497, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)541, (short)538, (short)96, (short)96, (short)96, (short)722, (short)722, (short)98, (short)722, (short)96, (short)98, (short)96, (short)539, (short)96, (short)540, (short)722, (short)98, (short)98, (short)98, (short)542, (short)543, (short)544, (short)547, (short)98, (short)96, (short)98, (short)96, (short)98, (short)96, (short)545, (short)549, (short)546, (short)497, (short)497, (short)497, (short)497, (short)722, (short)96, (short)98, (short)96, (short)98, (short)551, (short)98, (short)96, (short)548, (short)96, (short)429, (short)550, (short)429, (short)429, (short)429, (short)98, (short)96, (short)98, (short)552, (short)722, (short)722, (short)98, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)429, (short)553, (short)98, (short)429, (short)429, (short)555, (short)429, (short)722, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)554, (short)557, (short)722, (short)96, (short)556, (short)96, (short)96, (short)559, (short)96, (short)98, (short)96, (short)722, (short)722, (short)558, (short)96, (short)96, (short)560, (short)98, (short)722, (short)98, (short)98, (short)96, (short)98, (short)96, (short)98, (short)561, (short)564, (short)562, (short)98, (short)98, (short)722, (short)96, (short)563, (short)96, (short)96, (short)98, (short)722, (short)98, (short)96, (short)96, (short)565, (short)96, (short)96, (short)96, (short)566, (short)98, (short)568, (short)98, (short)98, (short)570, (short)567, (short)571, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)96, (short)569, (short)96, (short)96, (short)96, (short)722, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)722, (short)96, (short)98, (short)574, (short)98, (short)98, (short)98, (short)575, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)572, (short)98, (short)573, (short)722, (short)96, (short)96, (short)96, (short)722, (short)96, (short)96, (short)722, (short)577, (short)98, (short)579, (short)578, (short)96, (short)582, (short)576, (short)98, (short)98, (short)98, (short)583, (short)98, (short)98, (short)584, (short)96, (short)96, (short)96, (short)96, (short)98, (short)580, (short)581, (short)722, (short)585, (short)96, (short)722, (short)96, (short)722, (short)96, (short)98, (short)98, (short)98, (short)98, (short)96, (short)96, (short)96, (short)587, (short)722, (short)98, (short)590, (short)98, (short)586, (short)98, (short)96, (short)591, (short)96, (short)589, (short)98, (short)98, (short)98, (short)96, (short)588, (short)592, (short)594, (short)593, (short)96, (short)96, (short)98, (short)96, (short)98, (short)722, (short)96, (short)96, (short)96, (short)98, (short)722, (short)595, (short)96, (short)96, (short)98, (short)98, (short)722, (short)98, (short)598, (short)596, (short)98, (short)98, (short)98, (short)96, (short)597, (short)722, (short)98, (short)98, (short)722, (short)96, (short)600, (short)603, (short)96, (short)96, (short)96, (short)599, (short)96, (short)98, (short)722, (short)605, (short)96, (short)96, (short)601, (short)98, (short)96, (short)722, (short)98, (short)98, (short)98, (short)602, (short)98, (short)604, (short)608, (short)609, (short)98, (short)98, (short)96, (short)96, (short)98, (short)610, (short)96, (short)606, (short)607, (short)96, (short)96, (short)96, (short)96, (short)96, (short)722, (short)96, (short)98, (short)98, (short)96, (short)96, (short)98, (short)96, (short)611, (short)98, (short)98, (short)98, (short)98, (short)98, (short)613, (short)98, (short)96, (short)614, (short)98, (short)98, (short)612, (short)98, (short)96, (short)722, (short)96, (short)616, (short)722, (short)96, (short)96, (short)96, (short)98, (short)618, (short)722, (short)621, (short)722, (short)619, (short)98, (short)623, (short)98, (short)96, (short)624, (short)98, (short)98, (short)98, (short)96, (short)722, (short)625, (short)617, (short)615, (short)620, (short)96, (short)96, (short)96, (short)98, (short)622, (short)722, (short)722, (short)626, (short)98, (short)628, (short)96, (short)629, (short)96, (short)96, (short)98, (short)98, (short)98, (short)96, (short)96, (short)631, (short)632, (short)627, (short)630, (short)96, (short)98, (short)96, (short)98, (short)98, (short)96, (short)722, (short)96, (short)98, (short)98, (short)96, (short)96, (short)96, (short)642, (short)98, (short)96, (short)98, (short)96, (short)633, (short)98, (short)635, (short)98, (short)634, (short)96, (short)98, (short)98, (short)98, (short)722, (short)636, (short)98, (short)96, (short)98, (short)96, (short)96, (short)722, (short)637, (short)638, (short)98, (short)96, (short)722, (short)96, (short)639, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)640, (short)96, (short)96, (short)96, (short)98, (short)644, (short)98, (short)722, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)643, (short)98, (short)98, (short)98, (short)645, (short)641, (short)646, (short)647, (short)96, (short)722, (short)98, (short)96, (short)98, (short)98, (short)96, (short)722, (short)96, (short)96, (short)96, (short)96, (short)96, (short)722, (short)98, (short)650, (short)649, (short)98, (short)96, (short)722, (short)98, (short)652, (short)98, (short)98, (short)98, (short)98, (short)98, (short)655, (short)648, (short)96, (short)657, (short)722, (short)98, (short)653, (short)722, (short)96, (short)722, (short)96, (short)651, (short)96, (short)96, (short)654, (short)658, (short)98, (short)96, (short)659, (short)662, (short)663, (short)664, (short)98, (short)656, (short)98, (short)96, (short)98, (short)98, (short)96, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)722, (short)96, (short)96, (short)98, (short)96, (short)96, (short)98, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)665, (short)98, (short)98, (short)96, (short)98, (short)98, (short)722, (short)722, (short)666, (short)98, (short)722, (short)96, (short)96, (short)96, (short)667, (short)96, (short)668, (short)98, (short)676, (short)669, (short)674, (short)670, (short)672, (short)677, (short)675, (short)98, (short)98, (short)98, (short)680, (short)98, (short)671, (short)679, (short)96, (short)96, (short)96, (short)673, (short)722, (short)96, (short)96, (short)722, (short)722, (short)96, (short)96, (short)678, (short)96, (short)96, (short)98, (short)98, (short)98, (short)96, (short)681, (short)98, (short)98, (short)682, (short)683, (short)98, (short)98, (short)722, (short)98, (short)98, (short)722, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)722, (short)96, (short)96, (short)685, (short)96, (short)96, (short)684, (short)98, (short)98, (short)687, (short)98, (short)98, (short)98, (short)98, (short)686, (short)98, (short)98, (short)96, (short)98, (short)98, (short)96, (short)96, (short)722, (short)688, (short)689, (short)96, (short)96, (short)722, (short)96, (short)96, (short)96, (short)98, (short)722, (short)692, (short)98, (short)98, (short)690, (short)691, (short)96, (short)98, (short)98, (short)694, (short)98, (short)98, (short)98, (short)699, (short)693, (short)96, (short)96, (short)695, (short)96, (short)96, (short)98, (short)696, (short)96, (short)697, (short)96, (short)722, (short)698, (short)722, (short)96, (short)98, (short)98, (short)96, (short)98, (short)98, (short)702, (short)704, (short)98, (short)96, (short)98, (short)700, (short)96, (short)701, (short)98, (short)722, (short)96, (short)98, (short)703, (short)96, (short)96, (short)706, (short)96, (short)98, (short)705, (short)96, (short)98, (short)709, (short)96, (short)707, (short)98, (short)96, (short)96, (short)98, (short)98, (short)96, (short)98, (short)712, (short)722, (short)98, (short)722, (short)722, (short)98, (short)710, (short)711, (short)98, (short)98, (short)708, (short)722, (short)98, (short)713, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)716, (short)722, (short)718, (short)722, (short)720, (short)722, (short)722, (short)714, (short)721, (short)715, (short)722, (short)722, (short)722, (short)722, (short)722, (short)717, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)719, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)68, (short)68, (short)722, (short)68, (short)68, (short)68, (short)68, (short)68, (short)97, (short)722, (short)722, (short)722, (short)97, (short)97, (short)97, (short)168, (short)168, (short)168, (short)169, (short)169, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)259, (short)259, (short)263, (short)263, (short)263, (short)264, (short)264, (short)661, (short)722, (short)661, (short)661, (short)661, (short)3, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722
+(short)0, (short)4, (short)5, (short)6, (short)7, (short)8, (short)9, (short)10, (short)11, (short)12, (short)13, (short)14, (short)15, (short)16, (short)17, (short)18, (short)19, (short)20, (short)21, (short)22, (short)23, (short)24, (short)25, (short)25, (short)25, (short)26, (short)27, (short)28, (short)29, (short)30, (short)31, (short)32, (short)33, (short)32, (short)32, (short)32, (short)32, (short)32, (short)32, (short)34, (short)32, (short)32, (short)32, (short)35, (short)4, (short)36, (short)37, (short)38, (short)39, (short)40, (short)41, (short)42, (short)43, (short)44, (short)45, (short)32, (short)46, (short)32, (short)32, (short)47, (short)32, (short)48, (short)32, (short)49, (short)50, (short)51, (short)52, (short)53, (short)54, (short)55, (short)32, (short)32, (short)32, (short)56, (short)57, (short)58, (short)59, (short)62, (short)64, (short)65, (short)66, (short)71, (short)658, (short)76, (short)73, (short)77, (short)77, (short)77, (short)77, (short)94, (short)95, (short)78, (short)96, (short)72, (short)74, (short)75, (short)79, (short)67, (short)96, (short)96, (short)86, (short)86, (short)86, (short)86, (short)80, (short)87, (short)98, (short)89, (short)62, (short)88, (short)658, (short)720, (short)98, (short)98, (short)63, (short)81, (short)155, (short)82, (short)82, (short)82, (short)82, (short)720, (short)90, (short)100, (short)91, (short)92, (short)96, (short)96, (short)101, (short)69, (short)83, (short)172, (short)96, (short)84, (short)84, (short)84, (short)98, (short)84, (short)85, (short)171, (short)98, (short)98, (short)96, (short)96, (short)170, (short)63, (short)98, (short)96, (short)83, (short)720, (short)99, (short)113, (short)84, (short)84, (short)96, (short)84, (short)98, (short)98, (short)96, (short)96, (short)96, (short)98, (short)156, (short)84, (short)103, (short)104, (short)85, (short)96, (short)98, (short)105, (short)167, (short)96, (short)98, (short)98, (short)98, (short)96, (short)110, (short)720, (short)158, (short)106, (short)111, (short)98, (short)112, (short)135, (short)107, (short)98, (short)68, (short)720, (short)108, (short)98, (short)123, (short)114, (short)124, (short)175, (short)157, (short)118, (short)119, (short)109, (short)115, (short)120, (short)138, (short)125, (short)116, (short)139, (short)126, (short)117, (short)121, (short)127, (short)129, (short)122, (short)128, (short)102, (short)136, (short)131, (short)96, (short)96, (short)137, (short)96, (short)130, (short)96, (short)132, (short)133, (short)93, (short)96, (short)96, (short)134, (short)69, (short)70, (short)98, (short)98, (short)176, (short)98, (short)96, (short)98, (short)165, (short)96, (short)165, (short)98, (short)98, (short)166, (short)166, (short)166, (short)166, (short)96, (short)96, (short)69, (short)98, (short)60, (short)96, (short)98, (short)175, (short)96, (short)96, (short)96, (short)720, (short)140, (short)141, (short)98, (short)98, (short)142, (short)143, (short)147, (short)98, (short)720, (short)149, (short)98, (short)98, (short)98, (short)151, (short)150, (short)144, (short)145, (short)153, (short)146, (short)152, (short)173, (short)96, (short)148, (short)720, (short)154, (short)77, (short)77, (short)77, (short)77, (short)84, (short)84, (short)84, (short)176, (short)84, (short)720, (short)98, (short)190, (short)179, (short)159, (short)160, (short)177, (short)160, (short)160, (short)160, (short)178, (short)720, (short)191, (short)720, (short)84, (short)84, (short)720, (short)84, (short)192, (short)720, (short)96, (short)720, (short)159, (short)160, (short)193, (short)84, (short)160, (short)160, (short)96, (short)160, (short)161, (short)161, (short)161, (short)161, (short)98, (short)96, (short)194, (short)96, (short)96, (short)720, (short)96, (short)96, (short)98, (short)162, (short)163, (short)96, (short)163, (short)163, (short)163, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)98, (short)96, (short)720, (short)720, (short)98, (short)720, (short)162, (short)163, (short)720, (short)98, (short)163, (short)163, (short)98, (short)163, (short)81, (short)98, (short)82, (short)82, (short)82, (short)82, (short)195, (short)196, (short)198, (short)199, (short)720, (short)202, (short)720, (short)197, (short)203, (short)83, (short)96, (short)96, (short)164, (short)164, (short)164, (short)720, (short)164, (short)201, (short)204, (short)96, (short)200, (short)96, (short)96, (short)205, (short)98, (short)98, (short)207, (short)83, (short)720, (short)206, (short)211, (short)164, (short)164, (short)98, (short)164, (short)98, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)164, (short)96, (short)720, (short)96, (short)96, (short)96, (short)96, (short)720, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)209, (short)208, (short)720, (short)720, (short)720, (short)98, (short)96, (short)98, (short)213, (short)212, (short)210, (short)720, (short)98, (short)96, (short)720, (short)180, (short)181, (short)182, (short)183, (short)184, (short)98, (short)720, (short)720, (short)185, (short)720, (short)214, (short)222, (short)98, (short)215, (short)216, (short)218, (short)186, (short)187, (short)188, (short)217, (short)189, (short)232, (short)221, (short)224, (short)219, (short)96, (short)96, (short)223, (short)225, (short)227, (short)96, (short)220, (short)96, (short)96, (short)226, (short)96, (short)96, (short)96, (short)720, (short)98, (short)98, (short)228, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)229, (short)98, (short)98, (short)98, (short)230, (short)231, (short)96, (short)720, (short)98, (short)98, (short)96, (short)98, (short)166, (short)166, (short)166, (short)166, (short)96, (short)96, (short)720, (short)236, (short)98, (short)234, (short)237, (short)240, (short)98, (short)720, (short)720, (short)96, (short)233, (short)241, (short)98, (short)98, (short)242, (short)238, (short)245, (short)239, (short)96, (short)720, (short)720, (short)235, (short)243, (short)98, (short)248, (short)246, (short)244, (short)249, (short)720, (short)720, (short)247, (short)720, (short)98, (short)252, (short)96, (short)252, (short)720, (short)251, (short)253, (short)253, (short)253, (short)253, (short)160, (short)250, (short)160, (short)160, (short)160, (short)256, (short)98, (short)256, (short)264, (short)96, (short)257, (short)257, (short)257, (short)257, (short)720, (short)164, (short)164, (short)164, (short)160, (short)164, (short)279, (short)160, (short)160, (short)98, (short)160, (short)161, (short)161, (short)161, (short)161, (short)163, (short)96, (short)163, (short)163, (short)163, (short)164, (short)164, (short)280, (short)164, (short)254, (short)255, (short)263, (short)255, (short)255, (short)255, (short)98, (short)164, (short)720, (short)163, (short)96, (short)720, (short)163, (short)163, (short)720, (short)163, (short)720, (short)96, (short)254, (short)255, (short)265, (short)96, (short)255, (short)255, (short)98, (short)255, (short)166, (short)166, (short)166, (short)166, (short)260, (short)98, (short)96, (short)273, (short)720, (short)98, (short)720, (short)720, (short)720, (short)96, (short)258, (short)96, (short)258, (short)258, (short)258, (short)96, (short)98, (short)266, (short)261, (short)261, (short)261, (short)262, (short)261, (short)98, (short)720, (short)98, (short)720, (short)720, (short)258, (short)98, (short)720, (short)258, (short)258, (short)720, (short)258, (short)267, (short)96, (short)261, (short)261, (short)96, (short)261, (short)268, (short)269, (short)96, (short)262, (short)96, (short)720, (short)270, (short)261, (short)271, (short)98, (short)720, (short)276, (short)98, (short)96, (short)96, (short)96, (short)98, (short)96, (short)98, (short)272, (short)274, (short)96, (short)96, (short)96, (short)275, (short)96, (short)720, (short)98, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)720, (short)98, (short)277, (short)720, (short)96, (short)720, (short)98, (short)96, (short)98, (short)98, (short)98, (short)281, (short)278, (short)285, (short)283, (short)284, (short)287, (short)96, (short)98, (short)282, (short)96, (short)98, (short)96, (short)720, (short)288, (short)720, (short)720, (short)286, (short)720, (short)293, (short)720, (short)98, (short)96, (short)296, (short)98, (short)96, (short)98, (short)289, (short)720, (short)290, (short)294, (short)291, (short)292, (short)96, (short)295, (short)299, (short)98, (short)96, (short)300, (short)98, (short)96, (short)96, (short)301, (short)96, (short)297, (short)96, (short)96, (short)98, (short)302, (short)96, (short)96, (short)98, (short)298, (short)303, (short)98, (short)98, (short)96, (short)98, (short)96, (short)98, (short)98, (short)720, (short)312, (short)98, (short)98, (short)96, (short)305, (short)96, (short)96, (short)96, (short)98, (short)304, (short)98, (short)96, (short)306, (short)316, (short)96, (short)307, (short)720, (short)98, (short)720, (short)98, (short)98, (short)98, (short)720, (short)720, (short)96, (short)98, (short)96, (short)96, (short)98, (short)311, (short)308, (short)314, (short)309, (short)96, (short)96, (short)313, (short)310, (short)315, (short)98, (short)96, (short)98, (short)98, (short)720, (short)96, (short)720, (short)96, (short)96, (short)98, (short)98, (short)96, (short)96, (short)720, (short)96, (short)98, (short)96, (short)319, (short)320, (short)98, (short)318, (short)98, (short)98, (short)96, (short)317, (short)98, (short)98, (short)321, (short)98, (short)96, (short)98, (short)322, (short)720, (short)720, (short)720, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)326, (short)98, (short)323, (short)720, (short)325, (short)328, (short)324, (short)98, (short)98, (short)331, (short)98, (short)98, (short)98, (short)98, (short)720, (short)96, (short)720, (short)329, (short)327, (short)720, (short)96, (short)720, (short)334, (short)720, (short)720, (short)330, (short)96, (short)332, (short)333, (short)98, (short)253, (short)253, (short)253, (short)253, (short)98, (short)340, (short)96, (short)339, (short)341, (short)337, (short)98, (short)96, (short)335, (short)96, (short)336, (short)253, (short)253, (short)253, (short)253, (short)720, (short)98, (short)338, (short)720, (short)720, (short)343, (short)98, (short)343, (short)98, (short)720, (short)344, (short)344, (short)344, (short)344, (short)342, (short)255, (short)720, (short)255, (short)255, (short)255, (short)257, (short)257, (short)257, (short)257, (short)720, (short)354, (short)720, (short)720, (short)257, (short)257, (short)257, (short)257, (short)357, (short)255, (short)720, (short)356, (short)255, (short)255, (short)96, (short)255, (short)258, (short)720, (short)258, (short)258, (short)258, (short)345, (short)355, (short)346, (short)346, (short)346, (short)347, (short)96, (short)98, (short)720, (short)96, (short)720, (short)96, (short)96, (short)258, (short)720, (short)720, (short)258, (short)258, (short)345, (short)258, (short)98, (short)346, (short)346, (short)98, (short)346, (short)98, (short)98, (short)720, (short)347, (short)348, (short)348, (short)348, (short)348, (short)261, (short)261, (short)261, (short)96, (short)261, (short)360, (short)348, (short)348, (short)348, (short)348, (short)349, (short)720, (short)350, (short)350, (short)350, (short)351, (short)368, (short)98, (short)720, (short)261, (short)261, (short)374, (short)261, (short)348, (short)348, (short)348, (short)348, (short)348, (short)349, (short)362, (short)261, (short)350, (short)350, (short)359, (short)350, (short)352, (short)96, (short)352, (short)351, (short)96, (short)353, (short)353, (short)353, (short)353, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)358, (short)98, (short)96, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)720, (short)98, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)720, (short)96, (short)96, (short)96, (short)96, (short)361, (short)363, (short)720, (short)98, (short)98, (short)720, (short)96, (short)96, (short)720, (short)369, (short)98, (short)98, (short)98, (short)98, (short)96, (short)96, (short)365, (short)375, (short)373, (short)372, (short)98, (short)98, (short)364, (short)366, (short)367, (short)370, (short)371, (short)96, (short)98, (short)98, (short)376, (short)720, (short)96, (short)720, (short)96, (short)96, (short)377, (short)720, (short)96, (short)720, (short)720, (short)98, (short)96, (short)96, (short)380, (short)381, (short)98, (short)382, (short)98, (short)98, (short)96, (short)378, (short)98, (short)379, (short)383, (short)96, (short)98, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)384, (short)96, (short)96, (short)720, (short)98, (short)96, (short)385, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)397, (short)96, (short)98, (short)98, (short)386, (short)96, (short)98, (short)96, (short)96, (short)389, (short)720, (short)387, (short)390, (short)96, (short)96, (short)98, (short)388, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)720, (short)395, (short)96, (short)96, (short)98, (short)98, (short)96, (short)391, (short)98, (short)98, (short)96, (short)98, (short)396, (short)393, (short)394, (short)392, (short)98, (short)98, (short)720, (short)96, (short)98, (short)398, (short)400, (short)96, (short)98, (short)401, (short)96, (short)96, (short)96, (short)96, (short)720, (short)720, (short)399, (short)98, (short)720, (short)402, (short)720, (short)98, (short)720, (short)96, (short)98, (short)98, (short)98, (short)98, (short)408, (short)403, (short)96, (short)720, (short)405, (short)96, (short)406, (short)410, (short)404, (short)98, (short)720, (short)96, (short)411, (short)407, (short)96, (short)96, (short)98, (short)409, (short)96, (short)98, (short)96, (short)413, (short)96, (short)415, (short)416, (short)98, (short)720, (short)720, (short)98, (short)98, (short)720, (short)414, (short)98, (short)720, (short)98, (short)417, (short)98, (short)412, (short)344, (short)344, (short)344, (short)344, (short)720, (short)344, (short)344, (short)344, (short)344, (short)346, (short)96, (short)346, (short)346, (short)346, (short)96, (short)96, (short)419, (short)418, (short)720, (short)353, (short)353, (short)353, (short)353, (short)720, (short)98, (short)423, (short)422, (short)346, (short)98, (short)98, (short)346, (short)346, (short)420, (short)346, (short)720, (short)421, (short)720, (short)424, (short)96, (short)424, (short)720, (short)720, (short)425, (short)425, (short)425, (short)425, (short)426, (short)96, (short)427, (short)427, (short)427, (short)428, (short)98, (short)720, (short)350, (short)96, (short)350, (short)350, (short)350, (short)96, (short)433, (short)98, (short)432, (short)720, (short)426, (short)720, (short)96, (short)427, (short)427, (short)98, (short)427, (short)720, (short)350, (short)98, (short)428, (short)350, (short)350, (short)429, (short)350, (short)429, (short)98, (short)434, (short)430, (short)430, (short)430, (short)430, (short)353, (short)353, (short)353, (short)353, (short)720, (short)435, (short)96, (short)96, (short)96, (short)437, (short)96, (short)96, (short)720, (short)96, (short)431, (short)96, (short)431, (short)431, (short)431, (short)438, (short)98, (short)98, (short)98, (short)443, (short)98, (short)98, (short)436, (short)98, (short)96, (short)98, (short)96, (short)96, (short)431, (short)96, (short)96, (short)431, (short)431, (short)96, (short)431, (short)96, (short)96, (short)720, (short)98, (short)96, (short)98, (short)98, (short)720, (short)98, (short)98, (short)441, (short)96, (short)98, (short)96, (short)98, (short)98, (short)440, (short)442, (short)98, (short)720, (short)96, (short)439, (short)96, (short)720, (short)96, (short)98, (short)445, (short)98, (short)446, (short)444, (short)96, (short)449, (short)447, (short)448, (short)98, (short)96, (short)98, (short)452, (short)98, (short)453, (short)96, (short)96, (short)96, (short)96, (short)98, (short)450, (short)96, (short)454, (short)451, (short)98, (short)96, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)720, (short)456, (short)98, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)720, (short)720, (short)455, (short)458, (short)457, (short)96, (short)720, (short)98, (short)98, (short)98, (short)96, (short)96, (short)720, (short)96, (short)461, (short)459, (short)462, (short)96, (short)96, (short)98, (short)460, (short)467, (short)720, (short)465, (short)98, (short)98, (short)463, (short)98, (short)96, (short)96, (short)464, (short)98, (short)98, (short)466, (short)720, (short)96, (short)469, (short)96, (short)96, (short)476, (short)96, (short)96, (short)98, (short)98, (short)96, (short)96, (short)470, (short)96, (short)468, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)98, (short)720, (short)474, (short)98, (short)98, (short)96, (short)98, (short)96, (short)471, (short)98, (short)96, (short)720, (short)98, (short)472, (short)720, (short)473, (short)96, (short)96, (short)720, (short)98, (short)96, (short)98, (short)720, (short)720, (short)98, (short)477, (short)479, (short)480, (short)475, (short)481, (short)98, (short)98, (short)478, (short)720, (short)98, (short)483, (short)96, (short)482, (short)96, (short)486, (short)96, (short)720, (short)485, (short)720, (short)720, (short)720, (short)488, (short)484, (short)720, (short)720, (short)98, (short)489, (short)98, (short)720, (short)98, (short)487, (short)720, (short)491, (short)425, (short)425, (short)425, (short)425, (short)430, (short)430, (short)430, (short)430, (short)96, (short)490, (short)427, (short)720, (short)427, (short)427, (short)427, (short)96, (short)96, (short)493, (short)720, (short)720, (short)720, (short)96, (short)98, (short)492, (short)425, (short)425, (short)425, (short)425, (short)427, (short)98, (short)98, (short)427, (short)427, (short)96, (short)427, (short)98, (short)720, (short)720, (short)346, (short)96, (short)346, (short)346, (short)346, (short)494, (short)720, (short)494, (short)720, (short)98, (short)495, (short)495, (short)495, (short)495, (short)510, (short)98, (short)720, (short)720, (short)346, (short)496, (short)497, (short)346, (short)346, (short)720, (short)346, (short)430, (short)430, (short)430, (short)430, (short)431, (short)96, (short)431, (short)431, (short)431, (short)96, (short)96, (short)720, (short)499, (short)501, (short)350, (short)96, (short)350, (short)350, (short)350, (short)98, (short)498, (short)720, (short)431, (short)98, (short)98, (short)431, (short)431, (short)96, (short)431, (short)98, (short)96, (short)96, (short)350, (short)96, (short)96, (short)350, (short)350, (short)96, (short)350, (short)96, (short)96, (short)98, (short)96, (short)507, (short)98, (short)98, (short)96, (short)98, (short)98, (short)96, (short)500, (short)98, (short)96, (short)98, (short)98, (short)720, (short)98, (short)502, (short)96, (short)96, (short)98, (short)720, (short)96, (short)98, (short)96, (short)503, (short)98, (short)96, (short)96, (short)504, (short)96, (short)96, (short)98, (short)98, (short)511, (short)509, (short)98, (short)505, (short)98, (short)96, (short)506, (short)98, (short)98, (short)720, (short)98, (short)98, (short)508, (short)515, (short)96, (short)96, (short)512, (short)96, (short)96, (short)98, (short)96, (short)513, (short)514, (short)516, (short)517, (short)518, (short)720, (short)519, (short)98, (short)98, (short)524, (short)98, (short)98, (short)96, (short)98, (short)520, (short)96, (short)521, (short)526, (short)96, (short)522, (short)96, (short)523, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)527, (short)98, (short)720, (short)525, (short)98, (short)96, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)720, (short)98, (short)96, (short)720, (short)528, (short)529, (short)96, (short)98, (short)96, (short)98, (short)96, (short)96, (short)720, (short)96, (short)530, (short)96, (short)98, (short)531, (short)720, (short)96, (short)98, (short)96, (short)98, (short)532, (short)98, (short)98, (short)534, (short)98, (short)96, (short)98, (short)96, (short)96, (short)535, (short)98, (short)96, (short)98, (short)96, (short)96, (short)533, (short)720, (short)720, (short)720, (short)98, (short)96, (short)98, (short)98, (short)96, (short)96, (short)98, (short)96, (short)98, (short)98, (short)495, (short)495, (short)495, (short)495, (short)96, (short)98, (short)536, (short)720, (short)98, (short)98, (short)96, (short)98, (short)96, (short)539, (short)537, (short)96, (short)720, (short)538, (short)98, (short)542, (short)540, (short)541, (short)720, (short)545, (short)98, (short)96, (short)98, (short)96, (short)547, (short)98, (short)543, (short)96, (short)544, (short)495, (short)495, (short)495, (short)495, (short)720, (short)96, (short)98, (short)96, (short)98, (short)549, (short)96, (short)96, (short)98, (short)548, (short)427, (short)96, (short)427, (short)427, (short)427, (short)98, (short)546, (short)98, (short)550, (short)96, (short)98, (short)98, (short)96, (short)96, (short)96, (short)98, (short)720, (short)96, (short)427, (short)96, (short)720, (short)427, (short)427, (short)98, (short)427, (short)553, (short)98, (short)98, (short)98, (short)96, (short)551, (short)98, (short)96, (short)98, (short)552, (short)96, (short)555, (short)720, (short)554, (short)96, (short)96, (short)557, (short)96, (short)98, (short)720, (short)556, (short)98, (short)96, (short)96, (short)98, (short)96, (short)558, (short)720, (short)98, (short)98, (short)96, (short)98, (short)559, (short)560, (short)96, (short)562, (short)98, (short)98, (short)720, (short)98, (short)561, (short)563, (short)720, (short)96, (short)98, (short)564, (short)96, (short)720, (short)98, (short)96, (short)96, (short)96, (short)565, (short)720, (short)96, (short)96, (short)568, (short)98, (short)569, (short)96, (short)98, (short)566, (short)96, (short)98, (short)98, (short)98, (short)96, (short)567, (short)98, (short)98, (short)96, (short)720, (short)96, (short)98, (short)720, (short)96, (short)98, (short)96, (short)96, (short)96, (short)98, (short)96, (short)720, (short)96, (short)98, (short)572, (short)98, (short)570, (short)573, (short)98, (short)96, (short)98, (short)98, (short)98, (short)96, (short)98, (short)571, (short)98, (short)96, (short)720, (short)96, (short)577, (short)96, (short)720, (short)98, (short)96, (short)720, (short)575, (short)98, (short)96, (short)576, (short)574, (short)98, (short)580, (short)98, (short)96, (short)98, (short)581, (short)96, (short)98, (short)578, (short)96, (short)582, (short)98, (short)579, (short)96, (short)96, (short)583, (short)96, (short)98, (short)96, (short)720, (short)98, (short)720, (short)96, (short)98, (short)585, (short)720, (short)96, (short)98, (short)98, (short)96, (short)98, (short)584, (short)98, (short)590, (short)588, (short)589, (short)98, (short)96, (short)587, (short)592, (short)98, (short)96, (short)586, (short)98, (short)96, (short)591, (short)96, (short)96, (short)96, (short)96, (short)720, (short)98, (short)96, (short)96, (short)96, (short)98, (short)96, (short)593, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)594, (short)596, (short)98, (short)98, (short)98, (short)595, (short)98, (short)720, (short)96, (short)98, (short)96, (short)96, (short)96, (short)720, (short)720, (short)598, (short)601, (short)96, (short)96, (short)720, (short)597, (short)603, (short)98, (short)96, (short)98, (short)98, (short)98, (short)599, (short)608, (short)720, (short)607, (short)98, (short)98, (short)602, (short)606, (short)96, (short)600, (short)98, (short)96, (short)604, (short)720, (short)96, (short)96, (short)605, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)96, (short)98, (short)96, (short)609, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)611, (short)98, (short)98, (short)610, (short)98, (short)720, (short)96, (short)720, (short)98, (short)720, (short)720, (short)96, (short)96, (short)612, (short)614, (short)96, (short)96, (short)616, (short)96, (short)619, (short)98, (short)617, (short)720, (short)621, (short)622, (short)98, (short)98, (short)96, (short)96, (short)98, (short)98, (short)623, (short)98, (short)96, (short)615, (short)613, (short)618, (short)96, (short)96, (short)620, (short)96, (short)98, (short)98, (short)720, (short)624, (short)720, (short)720, (short)98, (short)626, (short)627, (short)96, (short)98, (short)98, (short)96, (short)98, (short)96, (short)96, (short)629, (short)96, (short)630, (short)628, (short)625, (short)96, (short)96, (short)98, (short)720, (short)96, (short)98, (short)96, (short)98, (short)98, (short)96, (short)98, (short)640, (short)96, (short)720, (short)98, (short)98, (short)96, (short)631, (short)98, (short)633, (short)98, (short)720, (short)632, (short)98, (short)96, (short)96, (short)98, (short)634, (short)96, (short)96, (short)98, (short)720, (short)96, (short)96, (short)96, (short)636, (short)635, (short)637, (short)98, (short)98, (short)96, (short)96, (short)98, (short)98, (short)96, (short)638, (short)98, (short)98, (short)98, (short)720, (short)720, (short)720, (short)96, (short)96, (short)98, (short)98, (short)96, (short)96, (short)98, (short)96, (short)642, (short)96, (short)641, (short)639, (short)643, (short)644, (short)98, (short)98, (short)645, (short)96, (short)98, (short)98, (short)96, (short)98, (short)96, (short)98, (short)96, (short)96, (short)720, (short)96, (short)720, (short)96, (short)720, (short)98, (short)647, (short)96, (short)98, (short)96, (short)98, (short)720, (short)98, (short)98, (short)648, (short)98, (short)650, (short)98, (short)646, (short)720, (short)653, (short)98, (short)720, (short)98, (short)96, (short)649, (short)96, (short)96, (short)96, (short)720, (short)651, (short)654, (short)652, (short)655, (short)656, (short)96, (short)657, (short)660, (short)98, (short)661, (short)98, (short)98, (short)98, (short)662, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)96, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)663, (short)720, (short)720, (short)720, (short)664, (short)98, (short)96, (short)96, (short)665, (short)96, (short)96, (short)720, (short)96, (short)667, (short)674, (short)672, (short)666, (short)675, (short)670, (short)673, (short)98, (short)98, (short)678, (short)98, (short)98, (short)677, (short)98, (short)668, (short)96, (short)669, (short)96, (short)671, (short)720, (short)96, (short)96, (short)96, (short)720, (short)96, (short)676, (short)96, (short)96, (short)96, (short)98, (short)96, (short)98, (short)96, (short)679, (short)98, (short)98, (short)98, (short)681, (short)98, (short)96, (short)98, (short)98, (short)98, (short)680, (short)98, (short)96, (short)98, (short)96, (short)96, (short)96, (short)96, (short)96, (short)96, (short)98, (short)720, (short)96, (short)96, (short)683, (short)682, (short)98, (short)685, (short)98, (short)98, (short)98, (short)98, (short)98, (short)98, (short)96, (short)684, (short)98, (short)98, (short)96, (short)96, (short)689, (short)96, (short)686, (short)687, (short)96, (short)720, (short)96, (short)96, (short)98, (short)96, (short)96, (short)690, (short)98, (short)98, (short)688, (short)98, (short)720, (short)692, (short)98, (short)691, (short)98, (short)98, (short)96, (short)98, (short)98, (short)697, (short)693, (short)96, (short)720, (short)695, (short)694, (short)96, (short)696, (short)720, (short)96, (short)96, (short)98, (short)698, (short)720, (short)96, (short)96, (short)98, (short)702, (short)700, (short)720, (short)98, (short)720, (short)699, (short)98, (short)98, (short)96, (short)96, (short)701, (short)98, (short)98, (short)96, (short)720, (short)96, (short)704, (short)96, (short)705, (short)703, (short)720, (short)96, (short)98, (short)98, (short)707, (short)720, (short)96, (short)98, (short)706, (short)98, (short)96, (short)98, (short)96, (short)96, (short)710, (short)98, (short)96, (short)720, (short)720, (short)711, (short)98, (short)708, (short)709, (short)720, (short)98, (short)720, (short)98, (short)98, (short)720, (short)720, (short)98, (short)720, (short)720, (short)720, (short)720, (short)720, (short)714, (short)720, (short)720, (short)720, (short)720, (short)716, (short)720, (short)720, (short)712, (short)720, (short)713, (short)720, (short)718, (short)719, (short)720, (short)720, (short)715, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)717, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)61, (short)68, (short)68, (short)720, (short)68, (short)68, (short)68, (short)68, (short)68, (short)97, (short)720, (short)720, (short)720, (short)97, (short)97, (short)97, (short)168, (short)168, (short)168, (short)169, (short)169, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)174, (short)259, (short)259, (short)659, (short)720, (short)659, (short)659, (short)659, (short)3, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720
 };
 
-static const short int yy_chk[2642] =
+static const short int yy_chk[2652] =
 {
-(short)0, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)10, (short)13, (short)13, (short)14, (short)19, (short)661, (short)22, (short)21, (short)22, (short)22, (short)22, (short)22, (short)30, (short)30, (short)23, (short)32, (short)19, (short)21, (short)21, (short)23, (short)14, (short)40, (short)33, (short)25, (short)25, (short)25, (short)25, (short)23, (short)26, (short)32, (short)28, (short)61, (short)26, (short)642, (short)176, (short)40, (short)33, (short)10, (short)24, (short)57, (short)24, (short)24, (short)24, (short)24, (short)25, (short)28, (short)34, (short)28, (short)28, (short)39, (short)34, (short)34, (short)101, (short)24, (short)98, (short)47, (short)24, (short)24, (short)24, (short)96, (short)24, (short)24, (short)95, (short)39, (short)34, (short)43, (short)38, (short)91, (short)61, (short)47, (short)49, (short)24, (short)25, (short)33, (short)40, (short)24, (short)24, (short)41, (short)24, (short)43, (short)38, (short)42, (short)44, (short)97, (short)49, (short)57, (short)24, (short)38, (short)38, (short)24, (short)45, (short)41, (short)38, (short)85, (short)46, (short)42, (short)44, (short)97, (short)48, (short)39, (short)69, (short)76, (short)38, (short)39, (short)45, (short)39, (short)47, (short)38, (short)46, (short)69, (short)63, (short)38, (short)48, (short)43, (short)41, (short)43, (short)100, (short)68, (short)42, (short)42, (short)38, (short)41, (short)42, (short)49, (short)43, (short)41, (short)49, (short)44, (short)41, (short)42, (short)44, (short)45, (short)42, (short)44, (short)37, (short)48, (short)46, (short)50, (short)51, (short)48, (short)52, (short)45, (short)53, (short)46, (short)46, (short)29, (short)54, (short)99, (short)46, (short)68, (short)18, (short)50, (short)51, (short)100, (short)52, (short)107, (short)53, (short)83, (short)55, (short)83, (short)54, (short)99, (short)83, (short)83, (short)83, (short)83, (short)105, (short)103, (short)15, (short)107, (short)9, (short)104, (short)55, (short)174, (short)108, (short)109, (short)110, (short)3, (short)50, (short)51, (short)105, (short)103, (short)51, (short)51, (short)52, (short)104, (short)0, (short)53, (short)108, (short)109, (short)110, (short)54, (short)53, (short)51, (short)51, (short)55, (short)51, (short)54, (short)99, (short)111, (short)52, (short)0, (short)55, (short)77, (short)77, (short)77, (short)77, (short)84, (short)84, (short)84, (short)174, (short)84, (short)0, (short)111, (short)107, (short)105, (short)77, (short)77, (short)103, (short)77, (short)77, (short)77, (short)104, (short)0, (short)108, (short)0, (short)84, (short)84, (short)0, (short)84, (short)109, (short)0, (short)112, (short)0, (short)77, (short)77, (short)110, (short)84, (short)77, (short)77, (short)114, (short)77, (short)81, (short)81, (short)81, (short)81, (short)112, (short)113, (short)111, (short)118, (short)119, (short)0, (short)115, (short)116, (short)114, (short)81, (short)81, (short)117, (short)81, (short)81, (short)81, (short)113, (short)125, (short)118, (short)119, (short)121, (short)115, (short)116, (short)120, (short)0, (short)0, (short)117, (short)0, (short)81, (short)81, (short)0, (short)125, (short)81, (short)81, (short)121, (short)81, (short)82, (short)120, (short)82, (short)82, (short)82, (short)82, (short)112, (short)113, (short)115, (short)116, (short)0, (short)119, (short)0, (short)114, (short)119, (short)82, (short)122, (short)123, (short)82, (short)82, (short)82, (short)0, (short)82, (short)118, (short)119, (short)124, (short)117, (short)126, (short)127, (short)120, (short)122, (short)123, (short)121, (short)82, (short)0, (short)120, (short)125, (short)82, (short)82, (short)124, (short)82, (short)126, (short)127, (short)128, (short)129, (short)130, (short)131, (short)135, (short)82, (short)106, (short)0, (short)137, (short)141, (short)132, (short)134, (short)0, (short)179, (short)128, (short)129, (short)130, (short)131, (short)135, (short)133, (short)106, (short)136, (short)137, (short)141, (short)132, (short)134, (short)138, (short)179, (short)123, (short)122, (short)0, (short)0, (short)0, (short)133, (short)139, (short)136, (short)127, (short)126, (short)124, (short)0, (short)138, (short)140, (short)0, (short)106, (short)106, (short)106, (short)106, (short)106, (short)139, (short)0, (short)179, (short)106, (short)0, (short)128, (short)135, (short)140, (short)129, (short)130, (short)133, (short)106, (short)106, (short)106, (short)132, (short)106, (short)141, (short)134, (short)137, (short)133, (short)142, (short)143, (short)136, (short)138, (short)139, (short)144, (short)133, (short)146, (short)145, (short)138, (short)147, (short)148, (short)150, (short)0, (short)142, (short)143, (short)140, (short)149, (short)151, (short)144, (short)152, (short)146, (short)145, (short)140, (short)147, (short)148, (short)150, (short)140, (short)140, (short)153, (short)0, (short)149, (short)151, (short)154, (short)152, (short)165, (short)165, (short)165, (short)165, (short)194, (short)177, (short)0, (short)144, (short)153, (short)143, (short)144, (short)145, (short)154, (short)0, (short)0, (short)214, (short)142, (short)146, (short)194, (short)177, (short)147, (short)144, (short)150, (short)144, (short)188, (short)0, (short)0, (short)143, (short)148, (short)214, (short)152, (short)150, (short)149, (short)152, (short)0, (short)0, (short)151, (short)0, (short)188, (short)159, (short)173, (short)159, (short)0, (short)154, (short)159, (short)159, (short)159, (short)159, (short)160, (short)153, (short)160, (short)160, (short)160, (short)162, (short)173, (short)162, (short)177, (short)178, (short)162, (short)162, (short)162, (short)162, (short)0, (short)164, (short)164, (short)164, (short)160, (short)164, (short)188, (short)160, (short)160, (short)178, (short)160, (short)161, (short)161, (short)161, (short)161, (short)163, (short)202, (short)163, (short)163, (short)163, (short)164, (short)164, (short)188, (short)164, (short)161, (short)161, (short)173, (short)161, (short)161, (short)161, (short)202, (short)164, (short)0, (short)163, (short)181, (short)0, (short)163, (short)163, (short)0, (short)163, (short)0, (short)180, (short)161, (short)161, (short)178, (short)190, (short)161, (short)161, (short)181, (short)161, (short)166, (short)166, (short)166, (short)166, (short)168, (short)180, (short)184, (short)182, (short)0, (short)190, (short)0, (short)202, (short)0, (short)183, (short)166, (short)186, (short)166, (short)166, (short)166, (short)185, (short)184, (short)182, (short)168, (short)168, (short)168, (short)168, (short)168, (short)183, (short)0, (short)186, (short)0, (short)0, (short)166, (short)185, (short)0, (short)166, (short)166, (short)187, (short)166, (short)180, (short)181, (short)168, (short)168, (short)189, (short)168, (short)180, (short)180, (short)182, (short)168, (short)191, (short)190, (short)187, (short)168, (short)192, (short)183, (short)0, (short)186, (short)189, (short)182, (short)193, (short)195, (short)196, (short)197, (short)191, (short)198, (short)184, (short)199, (short)192, (short)0, (short)185, (short)200, (short)201, (short)203, (short)193, (short)195, (short)196, (short)197, (short)204, (short)198, (short)0, (short)199, (short)0, (short)187, (short)0, (short)200, (short)201, (short)203, (short)206, (short)207, (short)0, (short)205, (short)204, (short)187, (short)192, (short)189, (short)193, (short)208, (short)191, (short)196, (short)209, (short)0, (short)206, (short)207, (short)197, (short)205, (short)210, (short)0, (short)211, (short)201, (short)212, (short)208, (short)195, (short)213, (short)209, (short)204, (short)0, (short)215, (short)198, (short)216, (short)210, (short)199, (short)211, (short)203, (short)212, (short)200, (short)200, (short)213, (short)205, (short)206, (short)207, (short)215, (short)217, (short)216, (short)207, (short)208, (short)205, (short)0, (short)218, (short)219, (short)221, (short)209, (short)0, (short)220, (short)222, (short)223, (short)217, (short)0, (short)225, (short)211, (short)213, (short)212, (short)218, (short)219, (short)221, (short)210, (short)220, (short)220, (short)222, (short)223, (short)226, (short)224, (short)225, (short)227, (short)228, (short)229, (short)230, (short)0, (short)231, (short)0, (short)216, (short)224, (short)0, (short)0, (short)226, (short)224, (short)232, (short)227, (short)228, (short)229, (short)230, (short)221, (short)231, (short)217, (short)219, (short)233, (short)223, (short)222, (short)235, (short)234, (short)232, (short)218, (short)0, (short)236, (short)237, (short)0, (short)240, (short)0, (short)0, (short)233, (short)238, (short)239, (short)235, (short)234, (short)241, (short)225, (short)229, (short)236, (short)237, (short)228, (short)240, (short)227, (short)226, (short)242, (short)238, (short)239, (short)244, (short)243, (short)241, (short)0, (short)246, (short)230, (short)245, (short)247, (short)231, (short)0, (short)248, (short)242, (short)251, (short)235, (short)244, (short)243, (short)249, (short)237, (short)246, (short)240, (short)245, (short)247, (short)233, (short)234, (short)248, (short)250, (short)251, (short)0, (short)0, (short)0, (short)249, (short)0, (short)236, (short)0, (short)264, (short)0, (short)238, (short)0, (short)265, (short)250, (short)266, (short)239, (short)243, (short)241, (short)252, (short)252, (short)252, (short)252, (short)264, (short)246, (short)248, (short)242, (short)265, (short)249, (short)266, (short)244, (short)268, (short)245, (short)267, (short)275, (short)251, (short)0, (short)247, (short)0, (short)250, (short)253, (short)253, (short)253, (short)253, (short)254, (short)268, (short)254, (short)267, (short)275, (short)254, (short)254, (short)254, (short)254, (short)253, (short)255, (short)271, (short)255, (short)255, (short)255, (short)256, (short)256, (short)256, (short)256, (short)266, (short)257, (short)257, (short)257, (short)257, (short)0, (short)271, (short)0, (short)253, (short)255, (short)275, (short)268, (short)255, (short)255, (short)257, (short)255, (short)258, (short)281, (short)258, (short)258, (short)258, (short)259, (short)267, (short)259, (short)259, (short)259, (short)259, (short)269, (short)0, (short)0, (short)272, (short)281, (short)257, (short)0, (short)258, (short)0, (short)0, (short)258, (short)258, (short)259, (short)258, (short)269, (short)259, (short)259, (short)272, (short)259, (short)0, (short)271, (short)0, (short)259, (short)260, (short)260, (short)260, (short)260, (short)261, (short)261, (short)261, (short)270, (short)261, (short)0, (short)260, (short)260, (short)260, (short)260, (short)260, (short)0, (short)260, (short)260, (short)260, (short)260, (short)281, (short)270, (short)269, (short)261, (short)261, (short)272, (short)261, (short)260, (short)260, (short)260, (short)260, (short)260, (short)260, (short)0, (short)261, (short)260, (short)260, (short)273, (short)260, (short)262, (short)274, (short)262, (short)260, (short)276, (short)262, (short)262, (short)262, (short)262, (short)277, (short)279, (short)278, (short)273, (short)283, (short)280, (short)274, (short)282, (short)270, (short)276, (short)284, (short)287, (short)285, (short)288, (short)277, (short)279, (short)278, (short)289, (short)283, (short)280, (short)290, (short)282, (short)286, (short)291, (short)284, (short)287, (short)285, (short)288, (short)0, (short)292, (short)273, (short)289, (short)293, (short)294, (short)290, (short)295, (short)286, (short)291, (short)0, (short)296, (short)0, (short)0, (short)274, (short)292, (short)279, (short)280, (short)293, (short)294, (short)277, (short)295, (short)276, (short)284, (short)283, (short)296, (short)297, (short)277, (short)278, (short)285, (short)298, (short)282, (short)299, (short)286, (short)287, (short)300, (short)289, (short)301, (short)0, (short)302, (short)297, (short)0, (short)303, (short)305, (short)298, (short)295, (short)299, (short)304, (short)306, (short)300, (short)294, (short)301, (short)296, (short)302, (short)0, (short)292, (short)303, (short)305, (short)307, (short)293, (short)308, (short)304, (short)306, (short)310, (short)309, (short)312, (short)297, (short)311, (short)298, (short)315, (short)314, (short)0, (short)307, (short)313, (short)308, (short)316, (short)317, (short)310, (short)309, (short)312, (short)318, (short)311, (short)314, (short)315, (short)314, (short)300, (short)320, (short)313, (short)299, (short)316, (short)317, (short)303, (short)301, (short)321, (short)318, (short)304, (short)319, (short)0, (short)302, (short)322, (short)320, (short)323, (short)324, (short)325, (short)0, (short)0, (short)312, (short)321, (short)326, (short)0, (short)319, (short)307, (short)329, (short)322, (short)328, (short)323, (short)324, (short)325, (short)308, (short)309, (short)311, (short)327, (short)326, (short)313, (short)315, (short)331, (short)329, (short)320, (short)328, (short)330, (short)317, (short)332, (short)333, (short)319, (short)334, (short)327, (short)335, (short)336, (short)321, (short)331, (short)337, (short)0, (short)0, (short)330, (short)338, (short)332, (short)333, (short)339, (short)334, (short)0, (short)335, (short)336, (short)0, (short)322, (short)337, (short)324, (short)325, (short)329, (short)338, (short)323, (short)340, (short)339, (short)327, (short)326, (short)341, (short)328, (short)330, (short)342, (short)343, (short)0, (short)332, (short)356, (short)344, (short)334, (short)340, (short)335, (short)0, (short)336, (short)341, (short)360, (short)333, (short)342, (short)343, (short)331, (short)0, (short)356, (short)344, (short)0, (short)0, (short)0, (short)339, (short)0, (short)363, (short)360, (short)338, (short)345, (short)345, (short)345, (short)345, (short)0, (short)0, (short)346, (short)346, (short)346, (short)346, (short)348, (short)363, (short)348, (short)348, (short)348, (short)0, (short)358, (short)343, (short)344, (short)346, (short)360, (short)340, (short)354, (short)354, (short)354, (short)354, (short)0, (short)342, (short)348, (short)357, (short)358, (short)348, (short)348, (short)349, (short)348, (short)349, (short)363, (short)346, (short)349, (short)349, (short)349, (short)349, (short)350, (short)357, (short)350, (short)350, (short)350, (short)350, (short)359, (short)0, (short)352, (short)361, (short)352, (short)352, (short)352, (short)362, (short)426, (short)426, (short)426, (short)426, (short)350, (short)358, (short)359, (short)350, (short)350, (short)361, (short)350, (short)0, (short)352, (short)362, (short)350, (short)352, (short)352, (short)353, (short)352, (short)353, (short)364, (short)357, (short)353, (short)353, (short)353, (short)353, (short)355, (short)355, (short)355, (short)355, (short)0, (short)365, (short)366, (short)0, (short)364, (short)359, (short)367, (short)0, (short)368, (short)369, (short)355, (short)370, (short)355, (short)355, (short)355, (short)365, (short)366, (short)362, (short)361, (short)371, (short)367, (short)368, (short)368, (short)369, (short)372, (short)370, (short)373, (short)375, (short)355, (short)0, (short)0, (short)355, (short)355, (short)371, (short)355, (short)0, (short)374, (short)0, (short)372, (short)376, (short)373, (short)375, (short)377, (short)366, (short)364, (short)378, (short)379, (short)0, (short)380, (short)365, (short)374, (short)367, (short)381, (short)376, (short)382, (short)383, (short)377, (short)384, (short)371, (short)378, (short)379, (short)370, (short)380, (short)0, (short)369, (short)372, (short)381, (short)373, (short)382, (short)383, (short)0, (short)384, (short)385, (short)374, (short)386, (short)0, (short)387, (short)375, (short)0, (short)377, (short)388, (short)390, (short)389, (short)378, (short)380, (short)391, (short)385, (short)392, (short)386, (short)376, (short)387, (short)0, (short)383, (short)393, (short)388, (short)390, (short)389, (short)394, (short)395, (short)391, (short)396, (short)392, (short)397, (short)399, (short)382, (short)384, (short)398, (short)393, (short)0, (short)0, (short)0, (short)394, (short)395, (short)385, (short)396, (short)400, (short)397, (short)399, (short)401, (short)0, (short)398, (short)388, (short)386, (short)389, (short)387, (short)402, (short)403, (short)404, (short)392, (short)400, (short)0, (short)405, (short)401, (short)390, (short)394, (short)408, (short)406, (short)391, (short)407, (short)402, (short)403, (short)404, (short)409, (short)393, (short)397, (short)405, (short)406, (short)398, (short)410, (short)408, (short)406, (short)411, (short)407, (short)412, (short)413, (short)396, (short)409, (short)414, (short)415, (short)416, (short)417, (short)418, (short)410, (short)420, (short)419, (short)411, (short)404, (short)412, (short)413, (short)0, (short)401, (short)414, (short)415, (short)416, (short)417, (short)418, (short)421, (short)420, (short)419, (short)403, (short)402, (short)422, (short)0, (short)407, (short)423, (short)408, (short)405, (short)424, (short)410, (short)425, (short)421, (short)0, (short)412, (short)411, (short)414, (short)422, (short)416, (short)0, (short)423, (short)0, (short)419, (short)424, (short)413, (short)425, (short)417, (short)419, (short)0, (short)0, (short)439, (short)418, (short)0, (short)434, (short)0, (short)415, (short)435, (short)0, (short)0, (short)429, (short)422, (short)429, (short)429, (short)429, (short)439, (short)463, (short)424, (short)434, (short)421, (short)0, (short)435, (short)423, (short)427, (short)427, (short)427, (short)427, (short)0, (short)429, (short)438, (short)463, (short)429, (short)429, (short)0, (short)429, (short)0, (short)0, (short)427, (short)0, (short)427, (short)427, (short)427, (short)430, (short)438, (short)430, (short)434, (short)436, (short)430, (short)430, (short)430, (short)430, (short)431, (short)431, (short)431, (short)431, (short)427, (short)439, (short)435, (short)427, (short)427, (short)436, (short)427, (short)432, (short)432, (short)432, (short)432, (short)433, (short)437, (short)433, (short)433, (short)433, (short)440, (short)441, (short)0, (short)438, (short)442, (short)432, (short)0, (short)432, (short)432, (short)432, (short)437, (short)0, (short)0, (short)433, (short)440, (short)441, (short)433, (short)433, (short)442, (short)433, (short)443, (short)444, (short)0, (short)432, (short)445, (short)436, (short)432, (short)432, (short)446, (short)432, (short)448, (short)447, (short)437, (short)450, (short)443, (short)444, (short)445, (short)449, (short)445, (short)451, (short)454, (short)452, (short)446, (short)455, (short)448, (short)447, (short)453, (short)450, (short)440, (short)457, (short)456, (short)449, (short)458, (short)451, (short)454, (short)452, (short)441, (short)455, (short)442, (short)459, (short)453, (short)460, (short)461, (short)457, (short)456, (short)464, (short)458, (short)448, (short)462, (short)0, (short)443, (short)444, (short)447, (short)459, (short)449, (short)460, (short)461, (short)465, (short)0, (short)464, (short)0, (short)446, (short)462, (short)466, (short)450, (short)0, (short)0, (short)453, (short)454, (short)455, (short)456, (short)465, (short)456, (short)467, (short)451, (short)452, (short)468, (short)466, (short)469, (short)459, (short)456, (short)470, (short)456, (short)461, (short)471, (short)457, (short)458, (short)467, (short)472, (short)0, (short)468, (short)473, (short)469, (short)474, (short)0, (short)470, (short)475, (short)476, (short)471, (short)477, (short)460, (short)478, (short)472, (short)462, (short)479, (short)473, (short)480, (short)474, (short)465, (short)481, (short)475, (short)476, (short)482, (short)477, (short)466, (short)478, (short)483, (short)484, (short)479, (short)0, (short)480, (short)485, (short)486, (short)481, (short)487, (short)488, (short)482, (short)489, (short)473, (short)0, (short)483, (short)484, (short)490, (short)469, (short)474, (short)485, (short)486, (short)0, (short)487, (short)488, (short)477, (short)489, (short)491, (short)479, (short)492, (short)493, (short)490, (short)494, (short)495, (short)498, (short)0, (short)475, (short)496, (short)496, (short)496, (short)496, (short)491, (short)499, (short)492, (short)493, (short)500, (short)494, (short)495, (short)498, (short)489, (short)484, (short)501, (short)502, (short)504, (short)0, (short)0, (short)499, (short)0, (short)503, (short)500, (short)505, (short)485, (short)506, (short)487, (short)0, (short)501, (short)502, (short)504, (short)490, (short)491, (short)492, (short)495, (short)503, (short)507, (short)505, (short)509, (short)506, (short)508, (short)493, (short)499, (short)494, (short)497, (short)497, (short)497, (short)497, (short)0, (short)510, (short)507, (short)511, (short)509, (short)502, (short)508, (short)512, (short)498, (short)513, (short)497, (short)500, (short)497, (short)497, (short)497, (short)510, (short)514, (short)511, (short)503, (short)0, (short)0, (short)512, (short)515, (short)513, (short)516, (short)517, (short)518, (short)519, (short)497, (short)506, (short)514, (short)497, (short)497, (short)508, (short)497, (short)0, (short)515, (short)522, (short)516, (short)517, (short)518, (short)519, (short)507, (short)511, (short)0, (short)520, (short)510, (short)521, (short)523, (short)513, (short)524, (short)522, (short)525, (short)0, (short)0, (short)512, (short)526, (short)527, (short)514, (short)520, (short)0, (short)521, (short)523, (short)528, (short)524, (short)529, (short)525, (short)515, (short)519, (short)516, (short)526, (short)527, (short)0, (short)530, (short)518, (short)531, (short)532, (short)528, (short)0, (short)529, (short)533, (short)534, (short)520, (short)535, (short)536, (short)537, (short)520, (short)530, (short)522, (short)531, (short)532, (short)524, (short)521, (short)525, (short)533, (short)534, (short)538, (short)535, (short)536, (short)537, (short)539, (short)523, (short)540, (short)541, (short)542, (short)0, (short)543, (short)544, (short)545, (short)546, (short)538, (short)547, (short)0, (short)548, (short)539, (short)532, (short)540, (short)541, (short)542, (short)533, (short)543, (short)544, (short)545, (short)546, (short)549, (short)547, (short)530, (short)548, (short)531, (short)0, (short)550, (short)551, (short)552, (short)0, (short)553, (short)554, (short)0, (short)536, (short)549, (short)539, (short)537, (short)559, (short)542, (short)535, (short)550, (short)551, (short)552, (short)544, (short)553, (short)554, (short)546, (short)556, (short)555, (short)557, (short)558, (short)559, (short)540, (short)541, (short)0, (short)547, (short)560, (short)0, (short)561, (short)0, (short)562, (short)556, (short)555, (short)557, (short)558, (short)563, (short)564, (short)565, (short)550, (short)0, (short)560, (short)553, (short)561, (short)549, (short)562, (short)566, (short)554, (short)567, (short)552, (short)563, (short)564, (short)565, (short)568, (short)551, (short)555, (short)557, (short)556, (short)569, (short)570, (short)566, (short)571, (short)567, (short)0, (short)572, (short)573, (short)574, (short)568, (short)0, (short)558, (short)575, (short)577, (short)569, (short)570, (short)0, (short)571, (short)564, (short)561, (short)572, (short)573, (short)574, (short)576, (short)562, (short)0, (short)575, (short)577, (short)0, (short)578, (short)566, (short)568, (short)579, (short)580, (short)581, (short)565, (short)582, (short)576, (short)0, (short)571, (short)583, (short)584, (short)566, (short)578, (short)585, (short)0, (short)579, (short)580, (short)581, (short)567, (short)582, (short)569, (short)574, (short)575, (short)583, (short)584, (short)586, (short)587, (short)585, (short)576, (short)588, (short)572, (short)573, (short)589, (short)590, (short)592, (short)591, (short)593, (short)0, (short)594, (short)586, (short)587, (short)595, (short)596, (short)588, (short)597, (short)579, (short)589, (short)590, (short)592, (short)591, (short)593, (short)582, (short)594, (short)598, (short)585, (short)595, (short)596, (short)581, (short)597, (short)599, (short)0, (short)600, (short)587, (short)0, (short)601, (short)602, (short)603, (short)598, (short)589, (short)0, (short)592, (short)0, (short)590, (short)599, (short)594, (short)600, (short)604, (short)595, (short)601, (short)602, (short)603, (short)605, (short)0, (short)596, (short)588, (short)586, (short)591, (short)606, (short)607, (short)608, (short)604, (short)593, (short)0, (short)0, (short)597, (short)605, (short)599, (short)609, (short)600, (short)610, (short)611, (short)606, (short)607, (short)608, (short)612, (short)613, (short)602, (short)603, (short)598, (short)601, (short)614, (short)609, (short)615, (short)610, (short)611, (short)616, (short)0, (short)617, (short)612, (short)613, (short)618, (short)619, (short)620, (short)619, (short)614, (short)621, (short)615, (short)622, (short)604, (short)616, (short)608, (short)617, (short)605, (short)623, (short)618, (short)619, (short)620, (short)0, (short)610, (short)621, (short)624, (short)622, (short)625, (short)626, (short)0, (short)611, (short)613, (short)623, (short)627, (short)0, (short)628, (short)616, (short)629, (short)630, (short)624, (short)631, (short)625, (short)626, (short)617, (short)632, (short)633, (short)634, (short)627, (short)622, (short)628, (short)0, (short)629, (short)630, (short)635, (short)631, (short)636, (short)638, (short)620, (short)632, (short)633, (short)634, (short)624, (short)618, (short)625, (short)626, (short)637, (short)0, (short)635, (short)639, (short)636, (short)638, (short)640, (short)0, (short)641, (short)645, (short)643, (short)644, (short)646, (short)0, (short)637, (short)631, (short)630, (short)639, (short)647, (short)0, (short)640, (short)633, (short)641, (short)645, (short)643, (short)644, (short)646, (short)636, (short)629, (short)648, (short)638, (short)0, (short)647, (short)634, (short)0, (short)649, (short)0, (short)650, (short)632, (short)651, (short)652, (short)635, (short)640, (short)648, (short)654, (short)641, (short)643, (short)644, (short)646, (short)649, (short)637, (short)650, (short)655, (short)651, (short)652, (short)653, (short)656, (short)657, (short)654, (short)659, (short)663, (short)658, (short)664, (short)0, (short)662, (short)665, (short)655, (short)666, (short)667, (short)653, (short)656, (short)657, (short)668, (short)659, (short)663, (short)658, (short)664, (short)648, (short)662, (short)665, (short)669, (short)666, (short)667, (short)0, (short)0, (short)649, (short)668, (short)0, (short)670, (short)672, (short)671, (short)651, (short)673, (short)652, (short)669, (short)659, (short)653, (short)658, (short)654, (short)656, (short)662, (short)658, (short)670, (short)672, (short)671, (short)667, (short)673, (short)655, (short)666, (short)674, (short)675, (short)676, (short)657, (short)0, (short)677, (short)679, (short)0, (short)0, (short)678, (short)680, (short)665, (short)681, (short)682, (short)674, (short)675, (short)676, (short)684, (short)668, (short)677, (short)679, (short)669, (short)671, (short)678, (short)680, (short)0, (short)681, (short)682, (short)0, (short)685, (short)683, (short)684, (short)686, (short)687, (short)688, (short)689, (short)0, (short)690, (short)693, (short)676, (short)691, (short)692, (short)675, (short)685, (short)683, (short)678, (short)686, (short)687, (short)688, (short)689, (short)676, (short)690, (short)693, (short)694, (short)691, (short)692, (short)695, (short)696, (short)0, (short)679, (short)680, (short)697, (short)698, (short)0, (short)699, (short)700, (short)701, (short)694, (short)0, (short)684, (short)695, (short)696, (short)681, (short)683, (short)702, (short)697, (short)698, (short)686, (short)699, (short)700, (short)701, (short)693, (short)685, (short)703, (short)704, (short)687, (short)705, (short)706, (short)702, (short)689, (short)707, (short)691, (short)708, (short)0, (short)692, (short)0, (short)709, (short)703, (short)704, (short)711, (short)705, (short)706, (short)696, (short)698, (short)707, (short)710, (short)708, (short)694, (short)712, (short)695, (short)709, (short)0, (short)713, (short)711, (short)697, (short)714, (short)715, (short)701, (short)716, (short)710, (short)700, (short)717, (short)712, (short)704, (short)718, (short)702, (short)713, (short)719, (short)720, (short)714, (short)715, (short)721, (short)716, (short)709, (short)0, (short)717, (short)0, (short)0, (short)718, (short)706, (short)707, (short)719, (short)720, (short)703, (short)0, (short)721, (short)710, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)714, (short)0, (short)716, (short)0, (short)718, (short)0, (short)0, (short)712, (short)720, (short)713, (short)0, (short)0, (short)0, (short)0, (short)0, (short)715, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)717, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)723, (short)724, (short)724, (short)0, (short)724, (short)724, (short)724, (short)724, (short)724, (short)725, (short)0, (short)0, (short)0, (short)725, (short)725, (short)725, (short)726, (short)726, (short)726, (short)727, (short)727, (short)728, (short)728, (short)728, (short)728, (short)728, (short)728, (short)728, (short)728, (short)729, (short)729, (short)730, (short)730, (short)730, (short)731, (short)731, (short)732, (short)0, (short)732, (short)732, (short)732, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722, (short)722
+(short)0, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)1, (short)10, (short)13, (short)13, (short)14, (short)19, (short)659, (short)22, (short)21, (short)22, (short)22, (short)22, (short)22, (short)30, (short)30, (short)23, (short)32, (short)19, (short)21, (short)21, (short)23, (short)14, (short)40, (short)33, (short)25, (short)25, (short)25, (short)25, (short)23, (short)26, (short)32, (short)28, (short)61, (short)26, (short)640, (short)176, (short)40, (short)33, (short)10, (short)24, (short)57, (short)24, (short)24, (short)24, (short)24, (short)25, (short)28, (short)34, (short)28, (short)28, (short)39, (short)34, (short)34, (short)101, (short)24, (short)98, (short)47, (short)24, (short)24, (short)24, (short)96, (short)24, (short)24, (short)95, (short)39, (short)34, (short)43, (short)38, (short)91, (short)61, (short)47, (short)49, (short)24, (short)25, (short)33, (short)40, (short)24, (short)24, (short)41, (short)24, (short)43, (short)38, (short)42, (short)44, (short)97, (short)49, (short)57, (short)24, (short)38, (short)38, (short)24, (short)45, (short)41, (short)38, (short)85, (short)46, (short)42, (short)44, (short)97, (short)48, (short)39, (short)69, (short)76, (short)38, (short)39, (short)45, (short)39, (short)47, (short)38, (short)46, (short)69, (short)63, (short)38, (short)48, (short)43, (short)41, (short)43, (short)100, (short)68, (short)42, (short)42, (short)38, (short)41, (short)42, (short)49, (short)43, (short)41, (short)49, (short)44, (short)41, (short)42, (short)44, (short)45, (short)42, (short)44, (short)37, (short)48, (short)46, (short)50, (short)51, (short)48, (short)52, (short)45, (short)53, (short)46, (short)46, (short)29, (short)54, (short)99, (short)46, (short)68, (short)18, (short)50, (short)51, (short)100, (short)52, (short)107, (short)53, (short)83, (short)55, (short)83, (short)54, (short)99, (short)83, (short)83, (short)83, (short)83, (short)105, (short)103, (short)15, (short)107, (short)9, (short)104, (short)55, (short)174, (short)108, (short)109, (short)110, (short)3, (short)50, (short)51, (short)105, (short)103, (short)51, (short)51, (short)52, (short)104, (short)0, (short)53, (short)108, (short)109, (short)110, (short)54, (short)53, (short)51, (short)51, (short)55, (short)51, (short)54, (short)99, (short)111, (short)52, (short)0, (short)55, (short)77, (short)77, (short)77, (short)77, (short)84, (short)84, (short)84, (short)174, (short)84, (short)0, (short)111, (short)107, (short)105, (short)77, (short)77, (short)103, (short)77, (short)77, (short)77, (short)104, (short)0, (short)108, (short)0, (short)84, (short)84, (short)0, (short)84, (short)109, (short)0, (short)112, (short)0, (short)77, (short)77, (short)110, (short)84, (short)77, (short)77, (short)114, (short)77, (short)81, (short)81, (short)81, (short)81, (short)112, (short)113, (short)111, (short)118, (short)119, (short)0, (short)115, (short)116, (short)114, (short)81, (short)81, (short)117, (short)81, (short)81, (short)81, (short)113, (short)125, (short)118, (short)119, (short)121, (short)115, (short)116, (short)120, (short)0, (short)0, (short)117, (short)0, (short)81, (short)81, (short)0, (short)125, (short)81, (short)81, (short)121, (short)81, (short)82, (short)120, (short)82, (short)82, (short)82, (short)82, (short)112, (short)113, (short)115, (short)116, (short)0, (short)119, (short)0, (short)114, (short)119, (short)82, (short)122, (short)123, (short)82, (short)82, (short)82, (short)0, (short)82, (short)118, (short)119, (short)124, (short)117, (short)126, (short)127, (short)120, (short)122, (short)123, (short)121, (short)82, (short)0, (short)120, (short)125, (short)82, (short)82, (short)124, (short)82, (short)126, (short)127, (short)128, (short)129, (short)130, (short)131, (short)135, (short)82, (short)106, (short)0, (short)137, (short)141, (short)132, (short)134, (short)0, (short)169, (short)128, (short)129, (short)130, (short)131, (short)135, (short)133, (short)106, (short)136, (short)137, (short)141, (short)132, (short)134, (short)138, (short)169, (short)123, (short)122, (short)0, (short)0, (short)0, (short)133, (short)139, (short)136, (short)127, (short)126, (short)124, (short)0, (short)138, (short)140, (short)0, (short)106, (short)106, (short)106, (short)106, (short)106, (short)139, (short)0, (short)0, (short)106, (short)0, (short)128, (short)135, (short)140, (short)129, (short)130, (short)133, (short)106, (short)106, (short)106, (short)132, (short)106, (short)141, (short)134, (short)137, (short)133, (short)142, (short)143, (short)136, (short)138, (short)139, (short)144, (short)133, (short)146, (short)145, (short)138, (short)147, (short)148, (short)150, (short)0, (short)142, (short)143, (short)140, (short)149, (short)151, (short)144, (short)152, (short)146, (short)145, (short)140, (short)147, (short)148, (short)150, (short)140, (short)140, (short)153, (short)0, (short)149, (short)151, (short)154, (short)152, (short)165, (short)165, (short)165, (short)165, (short)194, (short)177, (short)0, (short)144, (short)153, (short)143, (short)144, (short)145, (short)154, (short)0, (short)0, (short)214, (short)142, (short)146, (short)194, (short)177, (short)147, (short)144, (short)150, (short)144, (short)188, (short)0, (short)0, (short)143, (short)148, (short)214, (short)152, (short)150, (short)149, (short)152, (short)0, (short)0, (short)151, (short)0, (short)188, (short)159, (short)173, (short)159, (short)0, (short)154, (short)159, (short)159, (short)159, (short)159, (short)160, (short)153, (short)160, (short)160, (short)160, (short)162, (short)173, (short)162, (short)177, (short)178, (short)162, (short)162, (short)162, (short)162, (short)0, (short)164, (short)164, (short)164, (short)160, (short)164, (short)188, (short)160, (short)160, (short)178, (short)160, (short)161, (short)161, (short)161, (short)161, (short)163, (short)183, (short)163, (short)163, (short)163, (short)164, (short)164, (short)188, (short)164, (short)161, (short)161, (short)173, (short)161, (short)161, (short)161, (short)183, (short)164, (short)0, (short)163, (short)179, (short)0, (short)163, (short)163, (short)0, (short)163, (short)0, (short)180, (short)161, (short)161, (short)178, (short)181, (short)161, (short)161, (short)179, (short)161, (short)166, (short)166, (short)166, (short)166, (short)168, (short)180, (short)184, (short)183, (short)0, (short)181, (short)0, (short)0, (short)0, (short)182, (short)166, (short)186, (short)166, (short)166, (short)166, (short)185, (short)184, (short)179, (short)168, (short)168, (short)168, (short)168, (short)168, (short)182, (short)0, (short)186, (short)0, (short)0, (short)166, (short)185, (short)0, (short)166, (short)166, (short)0, (short)166, (short)180, (short)187, (short)168, (short)168, (short)189, (short)168, (short)180, (short)180, (short)190, (short)168, (short)191, (short)0, (short)181, (short)168, (short)182, (short)187, (short)0, (short)186, (short)189, (short)192, (short)195, (short)193, (short)190, (short)196, (short)191, (short)182, (short)184, (short)197, (short)198, (short)199, (short)185, (short)200, (short)0, (short)192, (short)195, (short)193, (short)201, (short)196, (short)203, (short)202, (short)204, (short)197, (short)198, (short)199, (short)0, (short)200, (short)187, (short)0, (short)206, (short)0, (short)201, (short)207, (short)203, (short)202, (short)204, (short)189, (short)187, (short)193, (short)191, (short)192, (short)196, (short)205, (short)206, (short)190, (short)208, (short)207, (short)209, (short)0, (short)197, (short)0, (short)0, (short)195, (short)0, (short)201, (short)0, (short)205, (short)210, (short)204, (short)208, (short)211, (short)209, (short)198, (short)0, (short)199, (short)202, (short)200, (short)200, (short)212, (short)203, (short)206, (short)210, (short)215, (short)207, (short)211, (short)213, (short)216, (short)207, (short)217, (short)205, (short)218, (short)219, (short)212, (short)208, (short)220, (short)222, (short)215, (short)205, (short)209, (short)213, (short)216, (short)221, (short)217, (short)223, (short)218, (short)219, (short)0, (short)220, (short)220, (short)222, (short)224, (short)211, (short)225, (short)226, (short)227, (short)221, (short)210, (short)223, (short)228, (short)212, (short)224, (short)230, (short)213, (short)0, (short)224, (short)0, (short)225, (short)226, (short)227, (short)0, (short)0, (short)229, (short)228, (short)231, (short)232, (short)230, (short)219, (short)216, (short)222, (short)217, (short)233, (short)234, (short)221, (short)218, (short)223, (short)229, (short)235, (short)231, (short)232, (short)0, (short)236, (short)0, (short)238, (short)237, (short)233, (short)234, (short)239, (short)240, (short)0, (short)241, (short)235, (short)242, (short)227, (short)228, (short)236, (short)226, (short)238, (short)237, (short)243, (short)225, (short)239, (short)240, (short)229, (short)241, (short)244, (short)242, (short)230, (short)0, (short)0, (short)0, (short)245, (short)246, (short)243, (short)247, (short)248, (short)249, (short)250, (short)235, (short)244, (short)231, (short)0, (short)234, (short)237, (short)233, (short)245, (short)246, (short)240, (short)247, (short)248, (short)249, (short)250, (short)0, (short)251, (short)0, (short)238, (short)236, (short)0, (short)263, (short)0, (short)243, (short)0, (short)0, (short)239, (short)264, (short)241, (short)242, (short)251, (short)252, (short)252, (short)252, (short)252, (short)263, (short)249, (short)267, (short)248, (short)250, (short)246, (short)264, (short)266, (short)244, (short)265, (short)245, (short)253, (short)253, (short)253, (short)253, (short)0, (short)267, (short)247, (short)0, (short)0, (short)254, (short)266, (short)254, (short)265, (short)253, (short)254, (short)254, (short)254, (short)254, (short)251, (short)255, (short)0, (short)255, (short)255, (short)255, (short)256, (short)256, (short)256, (short)256, (short)0, (short)264, (short)0, (short)253, (short)257, (short)257, (short)257, (short)257, (short)267, (short)255, (short)0, (short)266, (short)255, (short)255, (short)270, (short)255, (short)258, (short)257, (short)258, (short)258, (short)258, (short)259, (short)265, (short)259, (short)259, (short)259, (short)259, (short)277, (short)270, (short)0, (short)283, (short)0, (short)269, (short)272, (short)258, (short)257, (short)0, (short)258, (short)258, (short)259, (short)258, (short)277, (short)259, (short)259, (short)283, (short)259, (short)269, (short)272, (short)0, (short)259, (short)260, (short)260, (short)260, (short)260, (short)261, (short)261, (short)261, (short)268, (short)261, (short)270, (short)260, (short)260, (short)260, (short)260, (short)260, (short)0, (short)260, (short)260, (short)260, (short)260, (short)277, (short)268, (short)0, (short)261, (short)261, (short)283, (short)261, (short)260, (short)260, (short)260, (short)260, (short)260, (short)260, (short)272, (short)261, (short)260, (short)260, (short)269, (short)260, (short)262, (short)271, (short)262, (short)260, (short)273, (short)262, (short)262, (short)262, (short)262, (short)274, (short)275, (short)278, (short)276, (short)281, (short)279, (short)271, (short)280, (short)268, (short)273, (short)282, (short)284, (short)285, (short)286, (short)274, (short)275, (short)278, (short)276, (short)281, (short)279, (short)0, (short)280, (short)287, (short)288, (short)282, (short)284, (short)285, (short)286, (short)0, (short)289, (short)290, (short)291, (short)292, (short)271, (short)273, (short)0, (short)287, (short)288, (short)0, (short)294, (short)293, (short)0, (short)278, (short)289, (short)290, (short)291, (short)292, (short)295, (short)297, (short)275, (short)284, (short)282, (short)281, (short)294, (short)293, (short)274, (short)275, (short)276, (short)279, (short)280, (short)296, (short)295, (short)297, (short)285, (short)0, (short)298, (short)0, (short)299, (short)300, (short)287, (short)0, (short)301, (short)0, (short)0, (short)296, (short)302, (short)303, (short)292, (short)293, (short)298, (short)294, (short)299, (short)300, (short)304, (short)290, (short)301, (short)291, (short)295, (short)305, (short)302, (short)303, (short)306, (short)307, (short)308, (short)310, (short)309, (short)311, (short)304, (short)296, (short)312, (short)313, (short)0, (short)305, (short)314, (short)297, (short)306, (short)307, (short)308, (short)310, (short)309, (short)311, (short)312, (short)315, (short)312, (short)313, (short)298, (short)316, (short)314, (short)318, (short)317, (short)301, (short)0, (short)299, (short)302, (short)319, (short)320, (short)315, (short)300, (short)321, (short)322, (short)316, (short)323, (short)318, (short)317, (short)0, (short)310, (short)324, (short)325, (short)319, (short)320, (short)327, (short)305, (short)321, (short)322, (short)326, (short)323, (short)311, (short)307, (short)309, (short)306, (short)324, (short)325, (short)0, (short)328, (short)327, (short)313, (short)317, (short)329, (short)326, (short)318, (short)330, (short)331, (short)332, (short)333, (short)0, (short)0, (short)315, (short)328, (short)0, (short)319, (short)0, (short)329, (short)0, (short)334, (short)330, (short)331, (short)332, (short)333, (short)325, (short)320, (short)335, (short)0, (short)322, (short)336, (short)323, (short)327, (short)321, (short)334, (short)0, (short)337, (short)328, (short)324, (short)338, (short)339, (short)335, (short)326, (short)340, (short)336, (short)341, (short)330, (short)342, (short)332, (short)333, (short)337, (short)0, (short)0, (short)338, (short)339, (short)0, (short)331, (short)340, (short)0, (short)341, (short)334, (short)342, (short)329, (short)343, (short)343, (short)343, (short)343, (short)0, (short)344, (short)344, (short)344, (short)344, (short)346, (short)354, (short)346, (short)346, (short)346, (short)355, (short)356, (short)337, (short)336, (short)344, (short)352, (short)352, (short)352, (short)352, (short)0, (short)354, (short)342, (short)341, (short)346, (short)355, (short)356, (short)346, (short)346, (short)338, (short)346, (short)0, (short)340, (short)344, (short)347, (short)357, (short)347, (short)0, (short)0, (short)347, (short)347, (short)347, (short)347, (short)348, (short)360, (short)348, (short)348, (short)348, (short)348, (short)357, (short)0, (short)350, (short)358, (short)350, (short)350, (short)350, (short)359, (short)356, (short)360, (short)355, (short)0, (short)348, (short)0, (short)361, (short)348, (short)348, (short)358, (short)348, (short)0, (short)350, (short)359, (short)348, (short)350, (short)350, (short)351, (short)350, (short)351, (short)361, (short)357, (short)351, (short)351, (short)351, (short)351, (short)353, (short)353, (short)353, (short)353, (short)0, (short)358, (short)362, (short)363, (short)364, (short)360, (short)366, (short)365, (short)0, (short)367, (short)353, (short)368, (short)353, (short)353, (short)353, (short)361, (short)362, (short)363, (short)364, (short)366, (short)366, (short)365, (short)359, (short)367, (short)369, (short)368, (short)370, (short)371, (short)353, (short)372, (short)373, (short)353, (short)353, (short)374, (short)353, (short)375, (short)376, (short)0, (short)369, (short)377, (short)370, (short)371, (short)0, (short)372, (short)373, (short)364, (short)378, (short)374, (short)379, (short)375, (short)376, (short)363, (short)365, (short)377, (short)0, (short)380, (short)362, (short)381, (short)0, (short)382, (short)378, (short)368, (short)379, (short)369, (short)367, (short)383, (short)372, (short)370, (short)371, (short)380, (short)384, (short)381, (short)375, (short)382, (short)376, (short)385, (short)386, (short)388, (short)387, (short)383, (short)373, (short)389, (short)378, (short)374, (short)384, (short)390, (short)391, (short)392, (short)393, (short)385, (short)386, (short)388, (short)387, (short)0, (short)381, (short)389, (short)394, (short)395, (short)397, (short)390, (short)391, (short)392, (short)393, (short)0, (short)0, (short)380, (short)383, (short)382, (short)396, (short)0, (short)394, (short)395, (short)397, (short)398, (short)399, (short)0, (short)400, (short)386, (short)384, (short)387, (short)401, (short)402, (short)396, (short)385, (short)392, (short)0, (short)390, (short)398, (short)399, (short)388, (short)400, (short)403, (short)404, (short)389, (short)401, (short)402, (short)391, (short)0, (short)405, (short)395, (short)406, (short)407, (short)404, (short)409, (short)408, (short)403, (short)404, (short)411, (short)410, (short)396, (short)413, (short)394, (short)405, (short)415, (short)406, (short)407, (short)412, (short)409, (short)408, (short)0, (short)402, (short)411, (short)410, (short)414, (short)413, (short)416, (short)399, (short)415, (short)417, (short)0, (short)412, (short)400, (short)0, (short)401, (short)418, (short)419, (short)0, (short)414, (short)420, (short)416, (short)0, (short)0, (short)417, (short)405, (short)408, (short)409, (short)403, (short)410, (short)418, (short)419, (short)406, (short)0, (short)420, (short)412, (short)421, (short)411, (short)422, (short)415, (short)423, (short)0, (short)414, (short)0, (short)0, (short)0, (short)417, (short)413, (short)0, (short)0, (short)421, (short)417, (short)422, (short)0, (short)423, (short)416, (short)0, (short)420, (short)424, (short)424, (short)424, (short)424, (short)429, (short)429, (short)429, (short)429, (short)433, (short)419, (short)427, (short)0, (short)427, (short)427, (short)427, (short)446, (short)432, (short)422, (short)0, (short)0, (short)0, (short)437, (short)433, (short)421, (short)425, (short)425, (short)425, (short)425, (short)427, (short)446, (short)432, (short)427, (short)427, (short)434, (short)427, (short)437, (short)0, (short)0, (short)425, (short)435, (short)425, (short)425, (short)425, (short)428, (short)0, (short)428, (short)0, (short)434, (short)428, (short)428, (short)428, (short)428, (short)446, (short)435, (short)0, (short)0, (short)425, (short)432, (short)433, (short)425, (short)425, (short)0, (short)425, (short)430, (short)430, (short)430, (short)430, (short)431, (short)436, (short)431, (short)431, (short)431, (short)438, (short)439, (short)0, (short)435, (short)437, (short)430, (short)440, (short)430, (short)430, (short)430, (short)436, (short)434, (short)0, (short)431, (short)438, (short)439, (short)431, (short)431, (short)441, (short)431, (short)440, (short)442, (short)443, (short)430, (short)444, (short)445, (short)430, (short)430, (short)447, (short)430, (short)448, (short)449, (short)441, (short)450, (short)443, (short)442, (short)443, (short)451, (short)444, (short)445, (short)452, (short)436, (short)447, (short)453, (short)448, (short)449, (short)0, (short)450, (short)438, (short)455, (short)454, (short)451, (short)0, (short)456, (short)452, (short)457, (short)439, (short)453, (short)458, (short)460, (short)440, (short)461, (short)459, (short)455, (short)454, (short)447, (short)445, (short)456, (short)441, (short)457, (short)462, (short)442, (short)458, (short)460, (short)0, (short)461, (short)459, (short)444, (short)451, (short)463, (short)464, (short)448, (short)465, (short)466, (short)462, (short)467, (short)449, (short)450, (short)452, (short)453, (short)454, (short)0, (short)454, (short)463, (short)464, (short)457, (short)465, (short)466, (short)468, (short)467, (short)454, (short)469, (short)454, (short)459, (short)470, (short)455, (short)471, (short)456, (short)472, (short)473, (short)474, (short)475, (short)468, (short)476, (short)460, (short)469, (short)0, (short)458, (short)470, (short)477, (short)471, (short)478, (short)472, (short)473, (short)474, (short)475, (short)0, (short)476, (short)479, (short)0, (short)463, (short)464, (short)480, (short)477, (short)481, (short)478, (short)482, (short)483, (short)0, (short)484, (short)467, (short)485, (short)479, (short)471, (short)0, (short)486, (short)480, (short)488, (short)481, (short)472, (short)482, (short)483, (short)475, (short)484, (short)487, (short)485, (short)490, (short)489, (short)477, (short)486, (short)491, (short)488, (short)492, (short)493, (short)473, (short)0, (short)0, (short)0, (short)487, (short)497, (short)490, (short)489, (short)496, (short)498, (short)491, (short)499, (short)492, (short)493, (short)494, (short)494, (short)494, (short)494, (short)500, (short)497, (short)482, (short)0, (short)496, (short)498, (short)501, (short)499, (short)502, (short)487, (short)483, (short)503, (short)0, (short)485, (short)500, (short)490, (short)488, (short)489, (short)0, (short)493, (short)501, (short)504, (short)502, (short)505, (short)497, (short)503, (short)491, (short)506, (short)492, (short)495, (short)495, (short)495, (short)495, (short)0, (short)507, (short)504, (short)508, (short)505, (short)500, (short)509, (short)510, (short)506, (short)498, (short)495, (short)511, (short)495, (short)495, (short)495, (short)507, (short)496, (short)508, (short)501, (short)512, (short)509, (short)510, (short)513, (short)514, (short)515, (short)511, (short)0, (short)516, (short)495, (short)517, (short)0, (short)495, (short)495, (short)512, (short)495, (short)506, (short)513, (short)514, (short)515, (short)518, (short)504, (short)516, (short)519, (short)517, (short)505, (short)520, (short)509, (short)0, (short)508, (short)521, (short)522, (short)511, (short)523, (short)518, (short)0, (short)510, (short)519, (short)524, (short)525, (short)520, (short)526, (short)512, (short)0, (short)521, (short)522, (short)527, (short)523, (short)513, (short)514, (short)528, (short)517, (short)524, (short)525, (short)0, (short)526, (short)516, (short)518, (short)0, (short)529, (short)527, (short)518, (short)530, (short)0, (short)528, (short)531, (short)532, (short)533, (short)519, (short)0, (short)534, (short)535, (short)522, (short)529, (short)523, (short)536, (short)530, (short)520, (short)537, (short)531, (short)532, (short)533, (short)538, (short)521, (short)534, (short)535, (short)539, (short)0, (short)541, (short)536, (short)0, (short)540, (short)537, (short)542, (short)543, (short)545, (short)538, (short)544, (short)0, (short)546, (short)539, (short)530, (short)541, (short)528, (short)531, (short)540, (short)547, (short)542, (short)543, (short)545, (short)548, (short)544, (short)529, (short)546, (short)549, (short)0, (short)550, (short)537, (short)552, (short)0, (short)547, (short)551, (short)0, (short)534, (short)548, (short)553, (short)535, (short)533, (short)549, (short)540, (short)550, (short)555, (short)552, (short)542, (short)554, (short)551, (short)538, (short)556, (short)544, (short)553, (short)539, (short)557, (short)558, (short)545, (short)559, (short)555, (short)560, (short)0, (short)554, (short)0, (short)561, (short)556, (short)548, (short)0, (short)562, (short)557, (short)558, (short)563, (short)559, (short)547, (short)560, (short)553, (short)551, (short)552, (short)561, (short)564, (short)550, (short)555, (short)562, (short)565, (short)549, (short)563, (short)566, (short)554, (short)567, (short)568, (short)570, (short)569, (short)0, (short)564, (short)571, (short)573, (short)572, (short)565, (short)574, (short)556, (short)566, (short)575, (short)567, (short)568, (short)570, (short)569, (short)559, (short)562, (short)571, (short)573, (short)572, (short)560, (short)574, (short)0, (short)576, (short)575, (short)577, (short)578, (short)579, (short)0, (short)0, (short)564, (short)566, (short)580, (short)581, (short)0, (short)563, (short)569, (short)576, (short)582, (short)577, (short)578, (short)579, (short)564, (short)574, (short)0, (short)573, (short)580, (short)581, (short)567, (short)572, (short)583, (short)565, (short)582, (short)584, (short)570, (short)0, (short)585, (short)586, (short)571, (short)587, (short)588, (short)590, (short)591, (short)589, (short)583, (short)592, (short)593, (short)584, (short)594, (short)577, (short)585, (short)586, (short)595, (short)587, (short)588, (short)590, (short)591, (short)589, (short)580, (short)592, (short)593, (short)579, (short)594, (short)0, (short)596, (short)0, (short)595, (short)0, (short)0, (short)597, (short)598, (short)583, (short)585, (short)599, (short)600, (short)587, (short)601, (short)590, (short)596, (short)588, (short)0, (short)592, (short)593, (short)597, (short)598, (short)602, (short)604, (short)599, (short)600, (short)594, (short)601, (short)603, (short)586, (short)584, (short)589, (short)605, (short)607, (short)591, (short)606, (short)602, (short)604, (short)0, (short)595, (short)0, (short)0, (short)603, (short)597, (short)598, (short)608, (short)605, (short)607, (short)609, (short)606, (short)610, (short)611, (short)600, (short)612, (short)601, (short)599, (short)596, (short)613, (short)614, (short)608, (short)0, (short)615, (short)609, (short)616, (short)610, (short)611, (short)617, (short)612, (short)617, (short)618, (short)0, (short)613, (short)614, (short)619, (short)602, (short)615, (short)606, (short)616, (short)0, (short)603, (short)617, (short)620, (short)621, (short)618, (short)608, (short)622, (short)623, (short)619, (short)0, (short)624, (short)625, (short)626, (short)611, (short)609, (short)614, (short)620, (short)621, (short)627, (short)628, (short)622, (short)623, (short)630, (short)615, (short)624, (short)625, (short)626, (short)0, (short)0, (short)0, (short)629, (short)631, (short)627, (short)628, (short)632, (short)633, (short)630, (short)635, (short)620, (short)634, (short)618, (short)616, (short)622, (short)623, (short)629, (short)631, (short)624, (short)637, (short)632, (short)633, (short)636, (short)635, (short)643, (short)634, (short)638, (short)639, (short)0, (short)641, (short)0, (short)642, (short)0, (short)637, (short)628, (short)644, (short)636, (short)645, (short)643, (short)0, (short)638, (short)639, (short)629, (short)641, (short)631, (short)642, (short)627, (short)0, (short)634, (short)644, (short)0, (short)645, (short)646, (short)630, (short)647, (short)648, (short)649, (short)0, (short)632, (short)635, (short)633, (short)636, (short)638, (short)650, (short)639, (short)641, (short)646, (short)642, (short)647, (short)648, (short)649, (short)644, (short)651, (short)652, (short)653, (short)654, (short)655, (short)650, (short)657, (short)656, (short)661, (short)660, (short)662, (short)663, (short)664, (short)665, (short)651, (short)652, (short)653, (short)654, (short)655, (short)666, (short)657, (short)656, (short)661, (short)660, (short)662, (short)663, (short)664, (short)665, (short)646, (short)0, (short)0, (short)0, (short)647, (short)666, (short)667, (short)668, (short)649, (short)669, (short)670, (short)0, (short)671, (short)651, (short)657, (short)656, (short)650, (short)660, (short)654, (short)656, (short)667, (short)668, (short)665, (short)669, (short)670, (short)664, (short)671, (short)652, (short)672, (short)653, (short)673, (short)655, (short)0, (short)674, (short)675, (short)677, (short)0, (short)676, (short)663, (short)678, (short)679, (short)680, (short)672, (short)681, (short)673, (short)682, (short)666, (short)674, (short)675, (short)677, (short)669, (short)676, (short)683, (short)678, (short)679, (short)680, (short)667, (short)681, (short)684, (short)682, (short)685, (short)686, (short)687, (short)688, (short)689, (short)690, (short)683, (short)0, (short)691, (short)692, (short)674, (short)673, (short)684, (short)676, (short)685, (short)686, (short)687, (short)688, (short)689, (short)690, (short)693, (short)674, (short)691, (short)692, (short)694, (short)695, (short)681, (short)696, (short)677, (short)678, (short)697, (short)0, (short)698, (short)699, (short)693, (short)700, (short)701, (short)682, (short)694, (short)695, (short)679, (short)696, (short)0, (short)684, (short)697, (short)683, (short)698, (short)699, (short)703, (short)700, (short)701, (short)691, (short)685, (short)702, (short)0, (short)689, (short)687, (short)704, (short)690, (short)0, (short)705, (short)706, (short)703, (short)692, (short)0, (short)707, (short)708, (short)702, (short)696, (short)694, (short)0, (short)704, (short)0, (short)693, (short)705, (short)706, (short)709, (short)710, (short)695, (short)707, (short)708, (short)711, (short)0, (short)712, (short)699, (short)713, (short)700, (short)698, (short)0, (short)714, (short)709, (short)710, (short)702, (short)0, (short)715, (short)711, (short)701, (short)712, (short)717, (short)713, (short)716, (short)718, (short)707, (short)714, (short)719, (short)0, (short)0, (short)708, (short)715, (short)704, (short)705, (short)0, (short)717, (short)0, (short)716, (short)718, (short)0, (short)0, (short)719, (short)0, (short)0, (short)0, (short)0, (short)0, (short)712, (short)0, (short)0, (short)0, (short)0, (short)714, (short)0, (short)0, (short)710, (short)0, (short)711, (short)0, (short)716, (short)718, (short)0, (short)0, (short)713, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)0, (short)715, (short)721, (short)721, (short)721, (short)721, (short)721, (short)721, (short)721, (short)721, (short)722, (short)722, (short)0, (short)722, (short)722, (short)722, (short)722, (short)722, (short)723, (short)0, (short)0, (short)0, (short)723, (short)723, (short)723, (short)724, (short)724, (short)724, (short)725, (short)725, (short)726, (short)726, (short)726, (short)726, (short)726, (short)726, (short)726, (short)726, (short)727, (short)727, (short)728, (short)0, (short)728, (short)728, (short)728, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720, (short)720
 };
 
 static yy_state_type yy_last_accepting_state;
@@ -452,7 +452,7 @@ yy_last_accepting_cpos = yy_cp;
 while(yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
 {
 yy_current_state = (int)yy_def[yy_current_state];
-if(yy_current_state >= 723)
+if(yy_current_state >= 721)
 yy_c = yy_meta[(unsigned int)yy_c];
 }
 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int)yy_c];
@@ -474,11 +474,11 @@ yy_last_accepting_cpos = yy_cp;
 while(yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
 {
 yy_current_state = (int)yy_def[yy_current_state];
-if(yy_current_state >= 723)
+if(yy_current_state >= 721)
 yy_c = yy_meta[(unsigned int)yy_c];
 }
 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int)yy_c];
-yy_is_jam = (yy_current_state == 722);
+yy_is_jam = (yy_current_state == 720);
 return yy_is_jam ? 0 : yy_current_state;
 }
 
@@ -1057,12 +1057,12 @@ yy_last_accepting_cpos = yy_cp;
 while(yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
 {
 yy_current_state = (int)yy_def[yy_current_state];
-if(yy_current_state >= 723)
+if(yy_current_state >= 721)
 yy_c = yy_meta[(unsigned int)yy_c];
 }
 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int)yy_c];
 ++yy_cp;
-}while(yy_base[yy_current_state] != (short)2565);
+}while(yy_base[yy_current_state] != (short)2575);
 yy_find_action:
 yy_act = yy_accept[yy_current_state];
 if(yy_act == 0)
index b364bf1..94459de 100644 (file)
@@ -135,6 +135,8 @@ extern char *  __ecereNameSpace__ecere__sys__GetLastDirectory(const char *  stri
 
 extern int strcasecmp(const char * , const char * );
 
+struct Specifier;
+
 extern char *  strstr(const char * , const char * );
 
 extern char *  strcat(char * , const char * );
@@ -191,8 +193,6 @@ struct Declarator;
 
 struct TypeName;
 
-struct Specifier;
-
 struct Initializer;
 
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
@@ -640,7 +640,7 @@ extern unsigned int __ecereNameSpace__ecere__com__eClass_AddMember(struct __ecer
 
 struct Symbol;
 
-extern struct Symbol * DeclClass(const char *  name);
+extern struct Symbol * DeclClass(struct Specifier * _class, const char *  name);
 
 extern struct Symbol * FindClass(const char *  name);
 
@@ -919,6 +919,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
@@ -1336,7 +1337,7 @@ inheritanceAccess = 2;
 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof (line));
 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
 if(importType == 3)
-DeclClass(name);
+DeclClass((((void *)0)), name);
 if(isStatic || loadDllOnly || importType == 3 || importType == 4)
 regClass = (((void *)0));
 else if(regClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, name), !regClass || regClass->internalDecl || regClass->isRemote)
@@ -1358,7 +1359,7 @@ char className[1024] = "DCOMClient_";
 
 strcat(className, name);
 if(!existingClass)
-existingClass = DeclClass(name);
+existingClass = DeclClass((((void *)0)), name);
 regClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(classType, className, baseName, 0, 0, (((void *)0)), (((void *)0)), privateModule, ecereCOMModule ? 4 : 1, inheritanceAccess);
 }
 if(regClass)
index 66bedca..e7e5bbc 100644 (file)
@@ -586,6 +586,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1470,6 +1471,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct External
index e5ddd4a..5a28662 100644 (file)
@@ -430,6 +430,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -639,6 +640,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct Type
index d0adc10..9ce5d85 100644 (file)
@@ -151,10 +151,6 @@ struct ModuleImport;
 
 struct ClassImport;
 
-extern char *  strcpy(char * , const char * );
-
-extern void FullClassNameCat(char *  output, const char *  className, unsigned int includeTemplateParams);
-
 struct __ecereNameSpace__ecere__com__LinkList
 {
 void * first;
@@ -178,6 +174,10 @@ extern int sprintf(char * , const char * , ...);
 
 extern char *  QMkString(const char *  source);
 
+extern char *  strcpy(char * , const char * );
+
+extern void FullClassNameCat(char *  output, const char *  className, unsigned int includeTemplateParams);
+
 extern char *  strcat(char * , const char * );
 
 extern int strcmp(const char * , const char * );
@@ -525,10 +525,9 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
-extern void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char *  className);
-
 extern struct Symbol * FindClass(const char *  name);
 
 struct Declarator;
@@ -1075,6 +1074,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -1576,14 +1576,6 @@ if(func->type)
 func->type->refCount++;
 ProcessFunctionBody(function, func->body);
 external = MkExternalFunction(function);
-if(owningClass)
-{
-char className[1024];
-
-strcpy(className, "__ecereClass_");
-FullClassNameCat(className, owningClass->fullName, 1);
-DeclareClass(external, owningClass->symbol, className);
-}
 external->symbol = func->declarator->symbol;
 external->__anon1.function->_class = func->_class;
 }
@@ -2450,7 +2442,7 @@ ProcessClassFunction(regClass, def->__anon1.function, defs, external->prev, decl
 }
 }
 }
-if(inCompiler && !symbol->notYetDeclared && regClass)
+if(inCompiler && symbol->mustRegister && regClass)
 {
 struct Statement * stmt;
 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
index 7600171..36a8ef3 100644 (file)
@@ -761,14 +761,6 @@ int importType;
 int importAccess;
 } __attribute__ ((gcc_struct));
 
-struct Declaration;
-
-extern struct External * MkExternalDeclaration(struct Declaration * declaration);
-
-extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
-
-static void ProcessDeclaration(struct Declaration * decl);
-
 struct __ecereNameSpace__ecere__com__NameSpace;
 
 extern struct __ecereNameSpace__ecere__com__NameSpace *  globalData;
@@ -849,6 +841,12 @@ struct __ecereNameSpace__ecere__sys__OldLink * next;
 void *  data;
 } __attribute__ ((gcc_struct));
 
+struct Declaration;
+
+extern struct External * MkExternalDeclaration(struct Declaration * declaration);
+
+extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
+
 struct Specifier;
 
 extern struct Declaration * MkStructDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * declarators, struct Specifier * extStorage);
@@ -1683,6 +1681,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct __ecereNameSpace__ecere__com__ClassProperty;
@@ -1851,6 +1850,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -13846,7 +13846,7 @@ if(computedExp != sourceExp)
 FreeExpression(computedExp);
 computedExp = sourceExp;
 }
-if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "ecere::com::unichar"))
+if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
 {
 FreeType(source);
 source = __extension__ ({
@@ -14495,3045 +14495,2810 @@ break;
 }
 }
 
-static void ProcessStatement(struct Statement * stmt)
+static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList *  definitions, struct Symbol *  symbol);
+
+static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
 {
-yylloc = stmt->loc;
-switch(stmt->type)
+switch(spec->type)
 {
 case 0:
-ProcessStatement(stmt->__anon1.labeled.stmt);
+{
+if(spec->__anon1.specifier == THISCLASS)
+{
+if(thisClass)
+{
+spec->type = 1;
+spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
+spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
+ProcessSpecifier(spec, declareStruct, 0);
+}
+}
 break;
+}
 case 1:
-if(stmt->__anon1.caseStmt.exp)
 {
-FreeType(stmt->__anon1.caseStmt.exp->destType);
-stmt->__anon1.caseStmt.exp->destType = curSwitchType;
-if(curSwitchType)
-curSwitchType->refCount++;
-ProcessExpressionType(stmt->__anon1.caseStmt.exp);
-ComputeExpression(stmt->__anon1.caseStmt.exp);
+struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
+
+if(symbol)
+DeclareType(curExternal, symbol->type, 1, 1);
+else if(spec->__anon1.__anon1.symbol)
+{
+struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
+
+if(warnClasses && !c)
+Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
+DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
 }
-if(stmt->__anon1.caseStmt.stmt)
-ProcessStatement(stmt->__anon1.caseStmt.stmt);
 break;
+}
 case 2:
 {
-if(stmt->__anon1.compound.context)
-{
-struct Declaration * decl;
-struct Statement * s;
-struct Statement * prevCompound = curCompound;
-struct Context * prevContext = curContext;
+struct Enumerator * e;
 
-if(!stmt->__anon1.compound.isSwitch)
-curCompound = stmt;
-curContext = stmt->__anon1.compound.context;
-if(stmt->__anon1.compound.declarations)
+if(spec->__anon1.__anon2.list)
 {
-for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
-ProcessDeclaration(decl);
-}
-if(stmt->__anon1.compound.statements)
+for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
 {
-for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
-ProcessStatement(s);
+if(e->exp)
+ProcessExpressionType(e->exp);
 }
-curContext = prevContext;
-curCompound = prevCompound;
 }
+if(inCompiler)
 break;
 }
 case 3:
+case 4:
 {
-struct Expression * exp;
-
-if(stmt->__anon1.expressions)
+if(spec->__anon1.__anon2.definitions)
 {
-for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
-ProcessExpressionType(exp);
+struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
+
+ProcessClass(spec->__anon1.__anon2.definitions, symbol);
 }
 break;
 }
-case 4:
-{
-struct Expression * exp;
-
-FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
-((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
-for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
-{
-ProcessExpressionType(exp);
 }
-if(stmt->__anon1.ifStmt.stmt)
-ProcessStatement(stmt->__anon1.ifStmt.stmt);
-if(stmt->__anon1.ifStmt.elseStmt)
-ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
-break;
 }
-case 5:
-{
-struct Type * oldSwitchType = curSwitchType;
 
-if(stmt->__anon1.switchStmt.exp)
+static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
 {
-struct Expression * exp;
-
-for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
+switch(decl->type)
 {
-if(!exp->next)
+case 1:
+if(decl->__anon1.identifier->classSym)
 {
-ProcessExpressionType(exp);
-}
-if(!exp->next)
-curSwitchType = exp->expType;
-}
+FreeSpecifier(decl->__anon1.identifier->_class);
+decl->__anon1.identifier->_class = (((void *)0));
 }
-ProcessStatement(stmt->__anon1.switchStmt.stmt);
-curSwitchType = oldSwitchType;
 break;
-}
+case 3:
+if(decl->__anon1.array.exp)
+ProcessExpressionType(decl->__anon1.array.exp);
+case 0:
+case 2:
+case 4:
+case 5:
 case 6:
+case 7:
 {
-if(stmt->__anon1.whileStmt.exp)
-{
-struct Expression * exp;
+struct Identifier * id = (((void *)0));
+struct Specifier * classSpec = (((void *)0));
 
-FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
-((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
-for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
+if(decl->type == 4)
 {
-ProcessExpressionType(exp);
+id = GetDeclId(decl);
+if(id && id->_class)
+{
+classSpec = id->_class;
+id->_class = (((void *)0));
 }
 }
-if(stmt->__anon1.whileStmt.stmt)
-ProcessStatement(stmt->__anon1.whileStmt.stmt);
-break;
+if(decl->declarator)
+ProcessDeclarator(decl->declarator, isFunction);
+if(decl->type == 4)
+{
+if(classSpec)
+{
+struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
+
+if(!decl->__anon1.function.parameters)
+decl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
 }
-case 7:
+if(decl->__anon1.function.parameters)
 {
-if(stmt->__anon1.doWhile.exp)
+struct TypeName * param;
+
+for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
 {
-struct Expression * exp;
+if(param->qualifiers)
+{
+struct Specifier * spec;
 
-if((*stmt->__anon1.doWhile.exp).last)
+for(spec = (*param->qualifiers).first; spec; spec = spec->next)
 {
-FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
-((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
-}
-for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
+if(spec->type == 0)
 {
-ProcessExpressionType(exp);
-}
-}
-if(stmt->__anon1.doWhile.stmt)
-ProcessStatement(stmt->__anon1.doWhile.stmt);
+if(spec->__anon1.specifier == TYPED_OBJECT)
+{
+struct Declarator * d = param->declarator;
+struct TypeName * newParam = (newParam = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), newParam->qualifiers = MkListOne(MkSpecifier(VOID)), newParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d), newParam);
+
+if(d->type != 5)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
+FreeList(param->qualifiers, (void *)(FreeSpecifier));
+param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
+param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
+DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
+param = newParam;
 break;
 }
-case 8:
+else if(spec->__anon1.specifier == ANY_OBJECT)
 {
-struct Expression * exp;
+struct Declarator * d = param->declarator;
 
-if(stmt->__anon1.forStmt.init)
-ProcessStatement(stmt->__anon1.forStmt.init);
-if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
-{
-FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
-((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
+FreeList(param->qualifiers, (void *)(FreeSpecifier));
+param->qualifiers = MkListOne(MkSpecifier(VOID));
+if(d->type != 5)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
+param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
+break;
 }
-if(stmt->__anon1.forStmt.check)
-ProcessStatement(stmt->__anon1.forStmt.check);
-if(stmt->__anon1.forStmt.increment)
+else if(spec->__anon1.specifier == THISCLASS)
 {
-for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
-ProcessExpressionType(exp);
+if(thisClass)
+{
+spec->type = 1;
+spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
+spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
+ProcessSpecifier(spec, 0, 0);
 }
-if(stmt->__anon1.forStmt.stmt)
-ProcessStatement(stmt->__anon1.forStmt.stmt);
 break;
 }
-case 18:
+}
+else if(spec->type == 1)
 {
-struct Identifier * id = stmt->__anon1.forEachStmt.id;
-struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
-struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
-struct Statement * block = stmt->__anon1.forEachStmt.stmt;
-char iteratorType[1024];
-struct Type * source;
-struct Expression * e;
-unsigned int isBuiltin = exp && (*exp).last && (((struct Expression *)(*exp).last)->type == 35 || (((struct Expression *)(*exp).last)->type == 11 && ((struct Expression *)(*exp).last)->__anon1.cast.exp->type == 35));
-struct Expression * arrayExp;
-const char * typeString = (((void *)0));
-int builtinCount = 0;
+ProcessSpecifier(spec, isFunction, 1);
+}
+}
+}
+if(param->declarator)
+ProcessDeclarator(param->declarator, 0);
+}
+}
+}
+break;
+}
+}
+}
 
-for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
+static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
 {
-if(!e->next)
+yylloc = decl->loc;
+switch(decl->type)
 {
-FreeType(e->destType);
-e->destType = ProcessTypeString("Container", 0);
-}
-if(!isBuiltin || e->next)
-ProcessExpressionType(e);
-}
-source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
-if(isBuiltin || (source && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, containerClass)))
+case 1:
 {
-struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
-struct Symbol * symbol;
-struct Expression * expIt = (((void *)0));
-unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
-struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
-struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
-struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
+unsigned int declareStruct = 0;
 
-if(inCompiler)
-{
-stmt->type = 2;
-stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
-stmt->__anon1.compound.context->parent = curContext;
-curContext = stmt->__anon1.compound.context;
-}
-if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
+if(decl->__anon1.__anon1.declarators)
 {
-struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
+struct InitDeclarator * d;
 
-isCustomAVLTree = 1;
-if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
-isMap = 1;
-}
-else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
-isArray = 1;
-else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
+for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
 {
-struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
+struct Type * type, * subType;
 
-isLinkList = 1;
-isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
-}
-if(inCompiler && isArray)
+ProcessDeclarator(d->declarator, 0);
+type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
+if(d->initializer)
 {
-struct Declarator * decl;
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-
-decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
-stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
-ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
-}
-else if(isBuiltin)
+ProcessInitializer(d->initializer, type);
+if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
 {
-struct Type * type = (((void *)0));
-char typeStringBuf[1024];
-
-arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
-if(((struct Expression *)(*exp).last)->type == 11)
+if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
 {
-struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
+struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
 
-if(typeName)
-arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
+inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
+d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
+if(decl->__anon1.__anon1.specifiers)
+FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
+FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
+d = (((void *)0));
+decl->type = 2;
+decl->__anon1.inst = inst;
 }
-if(arrayExp->destType && arrayExp->destType->kind == 8 && arrayExp->destType->__anon1._class && arrayExp->destType->__anon1._class->__anon1.registered && arrayExp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(arrayExp->destType->__anon1._class->__anon1.registered, containerClass) && arrayExp->destType->__anon1._class->__anon1.registered->templateArgs)
+}
+}
+for(subType = type; subType; )
 {
-struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
-
-typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
+if(subType->kind == 8)
+{
+declareStruct = 1;
+break;
 }
-else if(arrayExp->__anon1.list)
+else if(subType->kind == 13)
+break;
+else if(subType->kind == 12)
+subType = subType->__anon1.__anon4.arrayType;
+else
+break;
+}
+FreeType(type);
+if(!d)
+break;
+}
+}
+if(decl->__anon1.__anon1.specifiers)
 {
-struct Expression * e;
+struct Specifier * s;
 
-for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
-{
-ProcessExpressionType(e);
-if(e->expType)
+for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
 {
-if(!type)
+ProcessSpecifier(s, declareStruct, 1);
+}
+}
+break;
+}
+case 2:
 {
-type = e->expType;
-type->refCount++;
+ProcessInstantiationType(decl->__anon1.inst);
+break;
 }
-else
+case 0:
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+struct Specifier * spec;
+struct Declarator * d;
+unsigned int declareStruct = 0;
+
+if(decl->__anon1.__anon1.declarators)
 {
-FreeType(type);
-type = e->expType;
-e->expType = (((void *)0));
-e = (*arrayExp->__anon1.list).first;
-ProcessExpressionType(e);
-if(e->expType)
+for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
+struct Type * subType;
+
+ProcessDeclarator(d, 0);
+for(subType = type; subType; )
 {
-FreeType(e->expType);
-e->expType = (((void *)0));
-FreeType(type);
-type = (((void *)0));
+if(subType->kind == 8)
+{
+declareStruct = 1;
 break;
 }
+else if(subType->kind == 13)
+break;
+else if(subType->kind == 12)
+subType = subType->__anon1.__anon4.arrayType;
+else
+break;
 }
+FreeType(type);
 }
 }
-if(e->expType)
+if(decl->__anon1.__anon1.specifiers)
 {
-FreeType(e->expType);
-e->expType = (((void *)0));
+for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
+ProcessSpecifier(spec, declareStruct, warnClasses);
 }
+break;
 }
 }
-if(type)
-{
-typeStringBuf[0] = '\0';
-PrintType(type, typeStringBuf, 0, 1);
-typeString = typeStringBuf;
-FreeType(type);
 }
+
+static void ProcessStatement(struct Statement * stmt)
+{
+yylloc = stmt->loc;
+switch(stmt->type)
+{
+case 0:
+ProcessStatement(stmt->__anon1.labeled.stmt);
+break;
+case 1:
+if(stmt->__anon1.caseStmt.exp)
+{
+FreeType(stmt->__anon1.caseStmt.exp->destType);
+stmt->__anon1.caseStmt.exp->destType = curSwitchType;
+if(curSwitchType)
+curSwitchType->refCount++;
+ProcessExpressionType(stmt->__anon1.caseStmt.exp);
+ComputeExpression(stmt->__anon1.caseStmt.exp);
 }
-if(typeString)
+if(stmt->__anon1.caseStmt.stmt)
+ProcessStatement(stmt->__anon1.caseStmt.stmt);
+break;
+case 2:
 {
-if(inCompiler)
+if(stmt->__anon1.compound.context)
 {
-struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
-struct Declarator * decl;
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Declaration * decl;
+struct Statement * s;
+struct Statement * prevCompound = curCompound;
+struct Context * prevContext = curContext;
 
-if(arrayExp->__anon1.list)
+if(!stmt->__anon1.compound.isSwitch)
+curCompound = stmt;
+curContext = stmt->__anon1.compound.context;
+if(stmt->__anon1.compound.declarations)
 {
-struct Expression * e;
-
-builtinCount = (*arrayExp->__anon1.list).count;
-type = ProcessTypeString(typeString, 0);
-while((e = (*arrayExp->__anon1.list).first))
+for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
+ProcessDeclaration(decl, 1);
+}
+if(stmt->__anon1.compound.statements)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
-e->destType = type;
-type->refCount++;
-ProcessExpressionType(e);
-if(inCompiler)
-ListAdd(initializers, MkInitializerAssignment(e));
+for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
+ProcessStatement(s);
 }
-FreeType(type);
-(__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
+curContext = prevContext;
+curCompound = prevCompound;
 }
-decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
-stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
-ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
-FreeList(exp, (void *)(FreeExpression));
+break;
 }
-else if(arrayExp->__anon1.list)
+case 3:
 {
-struct Expression * e;
+struct Expression * exp;
 
-type = ProcessTypeString(typeString, 0);
-for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
+if(stmt->__anon1.expressions)
 {
-e->destType = type;
-type->refCount++;
-ProcessExpressionType(e);
-}
-FreeType(type);
+for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
+ProcessExpressionType(exp);
 }
+break;
 }
-else
+case 4:
 {
-arrayExp->expType = ProcessTypeString("Container", 0);
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
+struct Expression * exp;
+
+FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
+for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
+{
+ProcessExpressionType(exp);
 }
+if(stmt->__anon1.ifStmt.stmt)
+ProcessStatement(stmt->__anon1.ifStmt.stmt);
+if(stmt->__anon1.ifStmt.elseStmt)
+ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
+break;
 }
-else if(inCompiler && isLinkList && !isList)
+case 5:
 {
-struct Declarator * decl;
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Type * oldSwitchType = curSwitchType;
 
-decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
-stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
-ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
-}
-else if(inCompiler && _class->templateArgs)
-{
-if(isMap)
-sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
-else
-sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
-stmt->__anon1.compound.declarations = MkListOne(MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(id), MkListOne(MkMembersInitList(MkListOne(MkMemberInit(isMap ? MkListOne(MkIdentifier("map")) : (((void *)0)), MkInitializerAssignment(MkExpBrackets(exp)))))))));
-}
-if(inCompiler)
+if(stmt->__anon1.switchStmt.exp)
 {
-symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
-if(block)
+struct Expression * exp;
+
+for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
 {
-switch(block->type)
+if(!exp->next)
 {
-case 2:
-if(block->__anon1.compound.context)
-block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 4:
-if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
-block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
-block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 5:
-if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
-block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 6:
-if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
-block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 7:
-if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
-block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 8:
-if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
-block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-case 18:
-if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
-block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
-break;
-}
+ProcessExpressionType(exp);
 }
-if(filter)
-{
-block = MkIfStmt(filter, block, (((void *)0)));
+if(!exp->next)
+curSwitchType = exp->expType;
 }
-if(isArray)
-{
-stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array")), '+', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("count")))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
-ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
 }
-else if(isBuiltin)
-{
-char count[128];
-
-sprintf(count, "%d", builtinCount);
-stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpIdentifier(MkIdentifier("__internalArray"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpIdentifier(MkIdentifier("__internalArray")), '+', MkExpConstant(count))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
-ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
+ProcessStatement(stmt->__anon1.switchStmt.stmt);
+curSwitchType = oldSwitchType;
+break;
 }
-else if(isLinkList && !isList)
-{
-struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
-struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
-
-if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
+case 6:
 {
-stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("next")))), block));
-}
-else
+if(stmt->__anon1.whileStmt.exp)
 {
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
+struct Expression * exp;
 
-stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpCast(MkTypeName(specs, decl), MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("GetNext")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("IteratorPointer")), (((void *)0))), MkExpIdentifier(CopyIdentifier(id)))))))), block));
-}
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
-ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
-ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
-}
-else
+FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
+for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
 {
-stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
+ProcessExpressionType(exp);
 }
-ProcessExpressionType(expIt);
-if((*stmt->__anon1.compound.declarations).first)
-ProcessDeclaration((*stmt->__anon1.compound.declarations).first);
-if(symbol)
-symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
-ProcessStatement(stmt);
 }
-else
-ProcessStatement(stmt->__anon1.forEachStmt.stmt);
-if(inCompiler)
-curContext = stmt->__anon1.compound.context->parent;
+if(stmt->__anon1.whileStmt.stmt)
+ProcessStatement(stmt->__anon1.whileStmt.stmt);
 break;
 }
-else
+case 7:
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
-}
-break;
-}
-case 9:
-break;
-case 10:
-break;
-case 11:
-break;
-case 12:
+if(stmt->__anon1.doWhile.exp)
 {
 struct Expression * exp;
 
-if(stmt->__anon1.expressions)
-{
-for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
-{
-if(!exp->next)
+if((*stmt->__anon1.doWhile.exp).last)
 {
-if(curFunction && !curFunction->type)
-curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
-FreeType(exp->destType);
-exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
-if(exp->destType)
-exp->destType->refCount++;
+FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
 }
+for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
+{
 ProcessExpressionType(exp);
 }
 }
+if(stmt->__anon1.doWhile.stmt)
+ProcessStatement(stmt->__anon1.doWhile.stmt);
 break;
 }
-case 14:
-{
-ProcessDeclaration(stmt->__anon1.decl);
-break;
-}
-case 13:
+case 8:
 {
-struct AsmField * field;
+struct Expression * exp;
 
-if(stmt->__anon1.asmStmt.inputFields)
+if(stmt->__anon1.forStmt.init)
+ProcessStatement(stmt->__anon1.forStmt.init);
+if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
 {
-for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
-if(field->expression)
-ProcessExpressionType(field->expression);
+FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
+((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
 }
-if(stmt->__anon1.asmStmt.outputFields)
+if(stmt->__anon1.forStmt.check)
+ProcessStatement(stmt->__anon1.forStmt.check);
+if(stmt->__anon1.forStmt.increment)
 {
-for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
-if(field->expression)
-ProcessExpressionType(field->expression);
+for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
+ProcessExpressionType(exp);
 }
-if(stmt->__anon1.asmStmt.clobberedFields)
+if(stmt->__anon1.forStmt.stmt)
+ProcessStatement(stmt->__anon1.forStmt.stmt);
+break;
+}
+case 18:
 {
-for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
+struct Identifier * id = stmt->__anon1.forEachStmt.id;
+struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
+struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
+struct Statement * block = stmt->__anon1.forEachStmt.stmt;
+char iteratorType[1024];
+struct Type * source;
+struct Expression * e;
+unsigned int isBuiltin = exp && (*exp).last && (((struct Expression *)(*exp).last)->type == 35 || (((struct Expression *)(*exp).last)->type == 11 && ((struct Expression *)(*exp).last)->__anon1.cast.exp->type == 35));
+struct Expression * arrayExp;
+const char * typeString = (((void *)0));
+int builtinCount = 0;
+
+for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
 {
-if(field->expression)
-ProcessExpressionType(field->expression);
-}
+if(!e->next)
+{
+FreeType(e->destType);
+e->destType = ProcessTypeString("Container", 0);
 }
-break;
+if(!isBuiltin || e->next)
+ProcessExpressionType(e);
 }
-case 17:
+source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
+if(isBuiltin || (source && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, containerClass)))
 {
-struct PropertyWatch * propWatch;
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
-struct Expression * object = stmt->__anon1._watch.object;
-struct Expression * watcher = stmt->__anon1._watch.watcher;
+struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
+struct Symbol * symbol;
+struct Expression * expIt = (((void *)0));
+unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
+struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
+struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
+struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
 
-if(watcher)
-ProcessExpressionType(watcher);
-if(object)
-ProcessExpressionType(object);
 if(inCompiler)
 {
-if(watcher || thisClass)
-{
-struct External * external = curExternal;
-struct Context * context = curContext;
-
-stmt->type = 3;
-stmt->__anon1.expressions = MkList();
-for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
+stmt->type = 2;
+stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
+stmt->__anon1.compound.context->parent = curContext;
+curContext = stmt->__anon1.compound.context;
+}
+if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
 {
-struct ClassFunction * func;
-char watcherName[1024];
-struct __ecereNameSpace__ecere__com__Class * watcherClass = watcher ? ((watcher->expType && watcher->expType->kind == 8 && watcher->expType->__anon1._class) ? watcher->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
-struct External * createdExternal;
+struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
 
-sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
-if(propWatch->deleteWatch)
-strcat(watcherName, "_delete");
-else
+isCustomAVLTree = 1;
+if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
+isMap = 1;
+}
+else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
+isArray = 1;
+else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
 {
-struct Identifier * propID;
+struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
 
-for(propID = (*propWatch->properties).first; propID; propID = propID->next)
-{
-strcat(watcherName, "_");
-strcat(watcherName, propID->string);
+isLinkList = 1;
+isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
 }
+if(inCompiler && isArray)
+{
+struct Declarator * decl;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+
+decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
 }
-if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
+else if(isBuiltin)
 {
-func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(object->expType->__anon1._class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
-ProcessClassFunctionBody(func, propWatch->compound);
-propWatch->compound = (((void *)0));
-createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
-curExternal = createdExternal;
-ProcessFunction(createdExternal->__anon1.function);
-if(propWatch->deleteWatch)
+struct Type * type = (((void *)0));
+char typeStringBuf[1024];
+
+arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
+if(((struct Expression *)(*exp).last)->type == 11)
 {
-struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
+struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
 
-ListAdd(args, CopyExpression(object));
-ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
-ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
+if(typeName)
+arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
 }
-else
+if(arrayExp->destType && arrayExp->destType->kind == 8 && arrayExp->destType->__anon1._class && arrayExp->destType->__anon1._class->__anon1.registered && arrayExp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(arrayExp->destType->__anon1._class->__anon1.registered, containerClass) && arrayExp->destType->__anon1._class->__anon1.registered->templateArgs)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
-struct Identifier * propID;
+struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
 
-for(propID = (*propWatch->properties).first; propID; propID = propID->next)
+typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
+}
+else if(arrayExp->__anon1.list)
 {
-char propName[1024];
-struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
+struct Expression * e;
 
-if(prop)
+for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
 {
-char getName[1024], setName[1024];
-struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
-
-DeclareProperty(createdExternal, prop, setName, getName);
-strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0);
-strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 1);
-ListAdd(args, CopyExpression(object));
-ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
-ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
-ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
-__ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
+ProcessExpressionType(e);
+if(e->expType)
+{
+if(!type)
+{
+type = e->expType;
+type->refCount++;
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
+{
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+{
+FreeType(type);
+type = e->expType;
+e->expType = (((void *)0));
+e = (*arrayExp->__anon1.list).first;
+ProcessExpressionType(e);
+if(e->expType)
+{
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+{
+FreeType(e->expType);
+e->expType = (((void *)0));
+FreeType(type);
+type = (((void *)0));
+break;
 }
 }
 }
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
 }
-curExternal = external;
-curContext = context;
-if(watcher)
-FreeExpression(watcher);
-if(object)
-FreeExpression(object);
-FreeList(watches, (void *)(FreePropertyWatch));
+if(e->expType)
+{
+FreeType(e->expType);
+e->expType = (((void *)0));
 }
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
 }
-else
-{
-for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
-{
-ProcessStatement(propWatch->compound);
 }
+if(type)
+{
+typeStringBuf[0] = '\0';
+PrintType(type, typeStringBuf, 0, 1);
+typeString = typeStringBuf;
+FreeType(type);
 }
-break;
 }
-case 15:
+if(typeString)
 {
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
-struct Expression * object = stmt->__anon1._watch.object;
-struct __ecereNameSpace__ecere__com__Class * _class;
-
-if(object)
-ProcessExpressionType(object);
 if(inCompiler)
 {
-_class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
-if(_class)
-{
-struct Identifier * propID;
+struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
+struct Declarator * decl;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-stmt->type = 3;
-stmt->__anon1.expressions = MkList();
-if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
-{
-watches = MkListOne(MkIdentifier(curFunction->propSet->string));
-}
-else if(!watches)
-{
-}
-if(watches)
-{
-for(propID = (*watches).first; propID; propID = propID->next)
+if(arrayExp->__anon1.list)
 {
-struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
+struct Expression * e;
 
-if(prop)
+builtinCount = (*arrayExp->__anon1.list).count;
+type = ProcessTypeString(typeString, 0);
+while((e = (*arrayExp->__anon1.list).first))
 {
-CreateFireWatcher(prop, object, stmt);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
+e->destType = type;
+type->refCount++;
+ProcessExpressionType(e);
+if(inCompiler)
+ListAdd(initializers, MkInitializerAssignment(e));
 }
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
+FreeType(type);
+(__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
 }
+decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
+FreeList(exp, (void *)(FreeExpression));
 }
-else
+else if(arrayExp->__anon1.list)
 {
-struct __ecereNameSpace__ecere__com__Property * prop;
-struct __ecereNameSpace__ecere__com__Class * base;
+struct Expression * e;
 
-for(base = _class; base; base = base->base)
-{
-for(prop = base->membersAndProperties.first; prop; prop = prop->next)
-{
-if(prop->isProperty && prop->isWatchable)
+type = ProcessTypeString(typeString, 0);
+for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
 {
-CreateFireWatcher(prop, object, stmt);
-}
-}
+e->destType = type;
+type->refCount++;
+ProcessExpressionType(e);
 }
+FreeType(type);
 }
-if(object)
-FreeExpression(object);
-FreeList(watches, (void *)(FreeIdentifier));
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
+{
+arrayExp->expType = ProcessTypeString("Container", 0);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
 }
-break;
 }
-case 16:
-{
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
-struct Expression * object = stmt->__anon1._watch.object;
-struct Expression * watcher = stmt->__anon1._watch.watcher;
-struct __ecereNameSpace__ecere__com__Class * _class;
-
-if(object)
-ProcessExpressionType(object);
-if(watcher)
-ProcessExpressionType(watcher);
-if(inCompiler)
-{
-_class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
-if(watcher || thisClass)
-{
-if(_class)
-{
-struct Identifier * propID;
-
-stmt->type = 3;
-stmt->__anon1.expressions = MkList();
-if(!watches)
+else if(inCompiler && isLinkList && !isList)
 {
-struct __ecereNameSpace__ecere__sys__OldList * args;
+struct Declarator * decl;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-args = MkList();
-ListAdd(args, CopyExpression(object));
-ListAdd(args, MkExpConstant("0"));
-ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
+decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
 }
+else if(inCompiler && _class->templateArgs)
+{
+if(isMap)
+sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
 else
+sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
+stmt->__anon1.compound.declarations = MkListOne(MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(id), MkListOne(MkMembersInitList(MkListOne(MkMemberInit(isMap ? MkListOne(MkIdentifier("map")) : (((void *)0)), MkInitializerAssignment(MkExpBrackets(exp)))))))));
+}
+if(inCompiler)
 {
-for(propID = (*watches).first; propID; propID = propID->next)
+symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
+if(block)
 {
-char propName[1024];
-struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
-
-if(prop)
+switch(block->type)
 {
-char getName[1024], setName[1024];
-struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
-
-DeclareProperty(curExternal, prop, setName, getName);
-strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0);
-strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 1);
-ListAdd(args, CopyExpression(object));
-ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
-ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
-}
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
-}
-}
-if(object)
-FreeExpression(object);
-if(watcher)
-FreeExpression(watcher);
-FreeList(watches, (void *)(FreeIdentifier));
-}
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
-}
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
-}
+case 2:
+if(block->__anon1.compound.context)
+block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 4:
+if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
+block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
+block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 5:
+if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
+block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 6:
+if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
+block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 7:
+if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
+block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 8:
+if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
+block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 18:
+if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
+block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
 break;
 }
 }
+if(filter)
+{
+block = MkIfStmt(filter, block, (((void *)0)));
 }
-
-void ProcessExpressionType(struct Expression * exp)
+if(isArray)
 {
-unsigned int unresolved = 0;
-struct Location oldyylloc = yylloc;
-unsigned int notByReference = 0;
-
-if(!exp || exp->expType)
-return ;
-yylloc = exp->loc;
-switch(exp->type)
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array")), '+', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("count")))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
+}
+else if(isBuiltin)
 {
-case 0:
+char count[128];
+
+sprintf(count, "%d", builtinCount);
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpIdentifier(MkIdentifier("__internalArray"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpIdentifier(MkIdentifier("__internalArray")), '+', MkExpConstant(count))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
+}
+else if(isLinkList && !isList)
 {
-struct Identifier * id = exp->__anon1.__anon1.identifier;
+struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
+struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
 
-if(!id || !topContext)
-return ;
-if(id->_class && id->_class->__anon1.__anon1.name)
+if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
 {
-id->classSym = id->_class->__anon1.__anon1.symbol;
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("next")))), block));
 }
-if(!strcmp(id->string, "__runtimePlatform"))
+else
 {
-exp->expType = ProcessTypeString("ecere::com::Platform", 1);
-break;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
+
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpCast(MkTypeName(specs, decl), MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("GetNext")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("IteratorPointer")), (((void *)0))), MkExpIdentifier(CopyIdentifier(id)))))))), block));
 }
-else if(strstr(id->string, "__ecereClass") == id->string)
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
+}
+else
 {
-exp->expType = ProcessTypeString("ecere::com::Class", 1);
+stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
+}
+ProcessExpressionType(expIt);
+if((*stmt->__anon1.compound.declarations).first)
+ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
+if(symbol)
+symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
+ProcessStatement(stmt);
+}
+else
+ProcessStatement(stmt->__anon1.forEachStmt.stmt);
+if(inCompiler)
+curContext = stmt->__anon1.compound.context->parent;
 break;
 }
-else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
-{
-ReplaceClassMembers(exp, thisClass);
-if(exp->type != 0)
+else
 {
-ProcessExpressionType(exp);
-break;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
 }
-if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
 break;
 }
-else
+case 9:
+break;
+case 10:
+break;
+case 11:
+break;
+case 12:
 {
-struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
+struct Expression * exp;
 
-if(!symbol)
-{
-if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
-break;
-else
+if(stmt->__anon1.expressions)
 {
-if(thisClass)
+for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
 {
-ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
-if(exp->type != 0)
+if(!exp->next)
 {
+if(curFunction && !curFunction->type)
+curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
+FreeType(exp->destType);
+exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
+if(exp->destType)
+exp->destType->refCount++;
+}
 ProcessExpressionType(exp);
-break;
 }
 }
-else if(currentClass && !id->_class)
-{
-if(ResolveIdWithClass(exp, currentClass, 1))
 break;
 }
-symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
-}
+case 14:
+{
+ProcessDeclaration(stmt->__anon1.decl, 1);
+break;
 }
-if(symbol)
+case 13:
 {
-struct Type * type = symbol->type;
-struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
+struct AsmField * field;
 
-if(_class && !strcmp(id->string, "this") && !type->classObjectType)
+if(stmt->__anon1.asmStmt.inputFields)
 {
-struct Context * context = SetupTemplatesContext(_class);
-
-type = ReplaceThisClassType(_class);
-FinishTemplatesContext(context);
-if(type)
-type->refCount = 0;
+for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
+if(field->expression)
+ProcessExpressionType(field->expression);
 }
-FreeSpecifier(id->_class);
-id->_class = (((void *)0));
-(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
-id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
-id->classSym = (((void *)0));
-exp->expType = type;
-if(type)
-type->refCount++;
-if(type && (type->kind == 15))
-exp->isConstant = 1;
-if(symbol->isParam || !strcmp(id->string, "this"))
+if(stmt->__anon1.asmStmt.outputFields)
 {
-if(_class && _class->type == 1 && !type->declaredWithStruct)
-exp->byReference = 1;
+for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
+if(field->expression)
+ProcessExpressionType(field->expression);
 }
-if(symbol->isIterator)
-{
-if(symbol->isIterator == 3)
+if(stmt->__anon1.asmStmt.clobberedFields)
 {
-exp->type = 5;
-exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
-((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
-exp->expType = (((void *)0));
-ProcessExpressionType(exp);
-}
-else if(symbol->isIterator != 4)
+for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
 {
-exp->type = 8;
-exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
-exp->__anon1.member.exp->expType = exp->expType;
-exp->__anon1.member.member = MkIdentifier("data");
-exp->expType = (((void *)0));
-ProcessExpressionType(exp);
+if(field->expression)
+ProcessExpressionType(field->expression);
 }
 }
 break;
 }
-else
+case 17:
 {
-struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
+struct PropertyWatch * propWatch;
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
+struct Expression * watcher = stmt->__anon1._watch.watcher;
 
-if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
+if(watcher)
+ProcessExpressionType(watcher);
+if(object)
+ProcessExpressionType(object);
+if(inCompiler)
 {
-char name[1024];
+if(watcher || thisClass)
+{
+struct External * external = curExternal;
+struct Context * context = curContext;
 
-strcpy(name, thisNameSpace);
-strcat(name, "::");
-strcat(name, id->string);
-definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
-}
-if(!definedExp)
-definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
-if(definedExp)
+stmt->type = 3;
+stmt->__anon1.expressions = MkList();
+for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
 {
-int c;
+struct ClassFunction * func;
+char watcherName[1024];
+struct __ecereNameSpace__ecere__com__Class * watcherClass = watcher ? ((watcher->expType && watcher->expType->kind == 8 && watcher->expType->__anon1._class) ? watcher->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
+struct External * createdExternal;
 
-for(c = 0; c < definedExpStackPos; c++)
-if(definedExpStack[c] == definedExp)
-break;
-if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
+sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
+if(propWatch->deleteWatch)
+strcat(watcherName, "_delete");
+else
 {
-struct Location backupYylloc = yylloc;
-struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
+struct Identifier * propID;
 
-definedExpStack[definedExpStackPos++] = definedExp;
-fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
-((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
-struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
-
-__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
-})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
-echoOn = 0;
-parsedExpression = (((void *)0));
-resetScanner();
-expression_yyparse();
-(__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
-if(backInput)
-fileInput = backInput;
-yylloc = backupYylloc;
-if(parsedExpression)
-{
-FreeIdentifier(id);
-exp->type = 5;
-exp->__anon1.list = MkListOne(parsedExpression);
-ApplyLocation(parsedExpression, &yylloc);
-ProcessExpressionType(exp);
-definedExpStackPos--;
-return ;
-}
-definedExpStackPos--;
-}
-else
-{
-if(inCompiler)
+for(propID = (*propWatch->properties).first; propID; propID = propID->next)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
-}
+strcat(watcherName, "_");
+strcat(watcherName, propID->string);
 }
 }
-else
+if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
 {
-struct GlobalData * data = (((void *)0));
-
-if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
+func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(object->expType->__anon1._class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
+ProcessClassFunctionBody(func, propWatch->compound);
+propWatch->compound = (((void *)0));
+createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
+curExternal = createdExternal;
+ProcessFunction(createdExternal->__anon1.function);
+if(propWatch->deleteWatch)
 {
-char name[1024];
+struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 
-strcpy(name, thisNameSpace);
-strcat(name, "::");
-strcat(name, id->string);
-data = FindGlobalData(name);
-}
-if(!data)
-data = FindGlobalData(id->string);
-if(data)
-{
-DeclareGlobalData(curExternal, data);
-exp->expType = data->dataType;
-if(data->dataType)
-data->dataType->refCount++;
-(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
-id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
-FreeSpecifier(id->_class);
-id->_class = (((void *)0));
-break;
+ListAdd(args, CopyExpression(object));
+ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
+ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
 }
 else
 {
-struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
+struct Identifier * propID;
 
-if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
+for(propID = (*propWatch->properties).first; propID; propID = propID->next)
 {
-char name[1024];
+char propName[1024];
+struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
 
-strcpy(name, thisNameSpace);
-strcat(name, "::");
-strcat(name, id->string);
-function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
-}
-if(!function)
-function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
-if(function)
+if(prop)
 {
-char name[1024];
+char getName[1024], setName[1024];
+struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 
-(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
-id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
-name[0] = (char)0;
-if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
-strcpy(name, "__ecereFunction_");
-FullClassNameCat(name, id->string, 0);
-if(DeclareFunction(curExternal, function, name))
-{
-(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
-id->string = __ecereNameSpace__ecere__sys__CopyString(name);
+DeclareProperty(createdExternal, prop, setName, getName);
+strcpy(propName, "__ecereProp_");
+FullClassNameCat(propName, prop->_class->fullName, 0);
+strcat(propName, "_");
+FullClassNameCat(propName, prop->name, 1);
+ListAdd(args, CopyExpression(object));
+ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
+ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
+ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
+__ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
 }
-exp->expType = function->dataType;
-if(function->dataType)
-function->dataType->refCount++;
-FreeSpecifier(id->_class);
-id->_class = (((void *)0));
-break;
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
 }
 }
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
 }
+curExternal = external;
+curContext = context;
+if(watcher)
+FreeExpression(watcher);
+if(object)
+FreeExpression(object);
+FreeList(watches, (void *)(FreePropertyWatch));
 }
-unresolved = 1;
-break;
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
 }
-case 1:
-{
-if(!exp->__anon1.instance->_class)
+else
 {
-if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
+for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
 {
-exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
-}
+ProcessStatement(propWatch->compound);
 }
-ProcessInstantiationType(exp->__anon1.instance);
-exp->isConstant = exp->__anon1.instance->isConstant;
-if(exp->__anon1.instance->_class)
-{
-exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
 }
 break;
 }
-case 2:
-{
-if(!exp->expType)
+case 15:
 {
-char * constant = exp->__anon1.__anon1.constant;
-struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
+struct __ecereNameSpace__ecere__com__Class * _class;
 
-exp->expType = type;
-if(constant[0] == '\'')
+if(object)
+ProcessExpressionType(object);
+if(inCompiler)
 {
-if((int)((unsigned char *)constant)[1] > 127)
+_class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
+if(_class)
 {
-int nb;
-unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
+struct Identifier * propID;
 
-if(nb < 2)
-ch = constant[1];
-(__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
-exp->__anon1.__anon1.constant = PrintUInt(ch);
-type->kind = 8;
-type->__anon1._class = FindClass("unichar");
-type->isSigned = 0;
-}
-else
+stmt->type = 3;
+stmt->__anon1.expressions = MkList();
+if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
 {
-type->kind = 1;
-type->isSigned = 1;
+watches = MkListOne(MkIdentifier(curFunction->propSet->string));
 }
+else if(!watches)
+{
 }
-else
+if(watches)
 {
-char * dot = strchr(constant, '.');
-unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
-char * exponent;
+for(propID = (*watches).first; propID; propID = propID->next)
+{
+struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
 
-if(isHex)
+if(prop)
 {
-exponent = strchr(constant, 'p');
-if(!exponent)
-exponent = strchr(constant, 'P');
+CreateFireWatcher(prop, object, stmt);
 }
 else
-{
-exponent = strchr(constant, 'e');
-if(!exponent)
-exponent = strchr(constant, 'E');
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
-if(dot || exponent)
-{
-if(strchr(constant, 'f') || strchr(constant, 'F'))
-type->kind = 6;
-else
-type->kind = 7;
-type->isSigned = 1;
 }
 else
 {
-unsigned int isSigned = constant[0] == '-';
-char * endP = (((void *)0));
-long long i64 = strtoll(constant, &endP, 0);
-uint64 ui64 = strtoull(constant, &endP, 0);
-unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
-unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
+struct __ecereNameSpace__ecere__com__Property * prop;
+struct __ecereNameSpace__ecere__com__Class * base;
 
-if(isSigned)
-{
-if(i64 < (((int)0x80000000)))
-is64Bit = 1;
-}
-else
+for(base = _class; base; base = base->base)
 {
-if(ui64 > (((int)0x7fffffff)))
+for(prop = base->membersAndProperties.first; prop; prop = prop->next)
 {
-if(ui64 > (0xffffffff))
+if(prop->isProperty && prop->isWatchable)
 {
-is64Bit = 1;
-if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
-isSigned = 1;
+CreateFireWatcher(prop, object, stmt);
 }
 }
-else if(constant[0] != '0' || !constant[1])
-isSigned = 1;
 }
-if(forceUnsigned)
-isSigned = 0;
-type->kind = is64Bit ? 4 : 3;
-type->isSigned = isSigned;
 }
+if(object)
+FreeExpression(object);
+FreeList(watches, (void *)(FreeIdentifier));
 }
-exp->isConstant = 1;
-if(exp->destType && exp->destType->kind == 7)
-type->kind = 7;
-else if(exp->destType && exp->destType->kind == 6)
-type->kind = 6;
-else if(exp->destType && exp->destType->kind == 4)
-type->kind = 4;
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
 }
 break;
 }
-case 3:
-{
-exp->isConstant = 1;
-exp->expType = __extension__ ({
-struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
-}), __ecereInstance2;
-});
-break;
-}
-case 13:
-case 26:
-ProcessExpressionType(exp->__anon1._new.size);
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
-});
-DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
-break;
-case 14:
-case 27:
-ProcessExpressionType(exp->__anon1._renew.size);
-ProcessExpressionType(exp->__anon1._renew.exp);
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
-});
-DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
-break;
-case 4:
+case 16:
 {
-unsigned int assign = 0, boolResult = 0, boolOps = 0;
-struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
-unsigned int useDestType = 0, useSideType = 0;
-struct Location oldyylloc = yylloc;
-unsigned int useSideUnit = 0;
-struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
-struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
+struct Expression * watcher = stmt->__anon1._watch.watcher;
+struct __ecereNameSpace__ecere__com__Class * _class;
 
-switch(exp->__anon1.op.op)
-{
-case '=':
-case MUL_ASSIGN:
-case DIV_ASSIGN:
-case MOD_ASSIGN:
-case ADD_ASSIGN:
-case SUB_ASSIGN:
-case LEFT_ASSIGN:
-case RIGHT_ASSIGN:
-case AND_ASSIGN:
-case XOR_ASSIGN:
-case OR_ASSIGN:
-assign = 1;
-break;
-case '!':
-break;
-case AND_OP:
-case OR_OP:
-boolOps = 1;
-boolResult = 1;
-break;
-case EQ_OP:
-case '<':
-case '>':
-case LE_OP:
-case GE_OP:
-case NE_OP:
-boolResult = 1;
-useSideType = 1;
-break;
-case '+':
-case '-':
-useSideUnit = 1;
-useSideType = 1;
-useDestType = 1;
-break;
-case LEFT_OP:
-case RIGHT_OP:
-useSideType = 1;
-useDestType = 1;
-break;
-case '|':
-case '^':
-useSideType = 1;
-useDestType = 1;
-break;
-case '/':
-case '%':
-useSideType = 1;
-useDestType = 1;
-break;
-case '&':
-case '*':
-if(exp->__anon1.op.exp1)
+if(object)
+ProcessExpressionType(object);
+if(watcher)
+ProcessExpressionType(watcher);
+if(inCompiler)
 {
-useSideType = 1;
-useDestType = 1;
-}
-break;
-}
-if(exp->__anon1.op.op == '&')
+_class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
+if(watcher || thisClass)
 {
-if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
+if(_class)
 {
-struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
-struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
+struct Identifier * propID;
 
-if(symbol && symbol->isIterator == 2)
-{
-exp->type = 8;
-exp->__anon1.member.exp = exp->__anon1.op.exp2;
-exp->__anon1.member.member = MkIdentifier("key");
-exp->expType = (((void *)0));
-exp->__anon1.op.exp2->expType = symbol->type;
-symbol->type->refCount++;
-ProcessExpressionType(exp);
-FreeType(dummy);
-break;
-}
-}
-}
-if(exp->__anon1.op.exp1)
-{
-if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
-useDestType = 0;
-if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
-{
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = exp->destType;
-exp->__anon1.op.exp1->opDestType = 1;
-if(exp->destType)
-exp->destType->refCount++;
-}
-else if(!assign)
-{
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = dummy;
-dummy->refCount++;
-}
-if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
-exp->__anon1.op.exp1->destType->count++;
-ProcessExpressionType(exp->__anon1.op.exp1);
-if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
-exp->__anon1.op.exp1->destType->count--;
-exp->__anon1.op.exp1->opDestType = 0;
-if(!exp->__anon1.op.exp2 && (exp->__anon1.op.op == INC_OP || exp->__anon1.op.op == DEC_OP) && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind == 8 && exp->__anon1.op.exp1->expType->__anon1._class && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered->type == 3)
-{
-exp->__anon1.op.exp2 = MkExpConstant("1");
-exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
-assign = 1;
-}
-if(exp->__anon1.op.exp1->destType == dummy)
-{
-FreeType(dummy);
-exp->__anon1.op.exp1->destType = (((void *)0));
-}
-type1 = exp->__anon1.op.exp1->expType;
-}
-if(exp->__anon1.op.exp2)
+stmt->type = 3;
+stmt->__anon1.expressions = MkList();
+if(!watches)
 {
-char expString[10240];
+struct __ecereNameSpace__ecere__sys__OldList * args;
 
-expString[0] = '\0';
-if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
-{
-if(exp->__anon1.op.exp1)
-{
-exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
-if(exp->__anon1.op.exp1->expType)
-exp->__anon1.op.exp1->expType->refCount++;
-}
-else
-{
-exp->__anon1.op.exp2->destType = exp->destType;
-if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
-exp->__anon1.op.exp2->opDestType = 1;
-if(exp->destType)
-exp->destType->refCount++;
-}
-if(type1)
-type1->refCount++;
-exp->expType = type1;
-}
-else if(assign)
-{
-if(inCompiler)
-PrintExpression(exp->__anon1.op.exp2, expString);
-if(type1 && type1->kind == 13)
-{
-if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN || exp->__anon1.op.op == AND_ASSIGN || exp->__anon1.op.op == OR_ASSIGN)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
-else if(exp->__anon1.op.op == '=')
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1;
-if(type1)
-type1->refCount++;
-}
-}
-else
-{
-if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN)
-;
-else
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1;
-if(type1)
-type1->refCount++;
-}
-}
-if(type1)
-type1->refCount++;
-exp->expType = type1;
-}
-else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = exp->destType;
-if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
-exp->__anon1.op.exp2->opDestType = 1;
-if(exp->destType)
-exp->destType->refCount++;
-}
-else
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = dummy;
-dummy->refCount++;
-}
-if(type1 && boolResult && useSideType && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && (type1->__anon1._class->__anon1.registered->type == 2 || type1->__anon1._class->__anon1.registered->type == 4))
-{
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1;
-type1->refCount++;
+args = MkList();
+ListAdd(args, CopyExpression(object));
+ListAdd(args, MkExpConstant("0"));
+ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
 }
-if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
-exp->__anon1.op.exp2->destType->count++;
-if(exp->__anon1.op.op == SIZEOF)
-{
-struct Expression * e = exp->__anon1.op.exp2;
-
-while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
-{
-if(e->type == 5 || e->type == 32 || e->type == 23)
-{
-if(e->type == 23)
-e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
 else
-e = (*e->__anon1.list).last;
-}
-}
-if(e->type == 11 && e->__anon1.cast.exp)
-e->__anon1.cast.exp->needCast = 1;
-}
-ProcessExpressionType(exp->__anon1.op.exp2);
-exp->__anon1.op.exp2->opDestType = 0;
-if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
-exp->__anon1.op.exp2->destType->count--;
-if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
 {
-if(exp->__anon1.op.exp2->expType->kind == 23 || exp->__anon1.op.exp2->expType->kind == 22 || exp->__anon1.op.exp2->expType->kind == 4 || exp->__anon1.op.exp2->expType->kind == 3 || exp->__anon1.op.exp2->expType->kind == 2 || exp->__anon1.op.exp2->expType->kind == 1)
-{
-if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
-}
-else if(exp->__anon1.op.exp2->expType->kind == 13 || exp->__anon1.op.exp2->expType->kind == 12 || exp->__anon1.op.exp2->expType->kind == 11 || exp->__anon1.op.exp2->expType->kind == 16 || (type1->__anon1.type->kind == 0 && exp->__anon1.op.exp2->expType->kind == 8 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && (exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 0 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 5)))
-{
-if(exp->__anon1.op.op == ADD_ASSIGN)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
-}
-else if((exp->__anon1.op.exp2->expType->kind == 8 && type1->kind == 13 && type1->__anon1.type->kind == 8 && type1->__anon1.type->__anon1._class == exp->__anon1.op.exp2->expType->__anon1._class && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1))
-{
-if(exp->__anon1.op.op == ADD_ASSIGN)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
-}
-else if(inCompiler)
+for(propID = (*watches).first; propID; propID = propID->next)
 {
-char type1String[1024];
-char type2String[1024];
+char propName[1024];
+struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
 
-type1String[0] = '\0';
-type2String[0] = '\0';
-PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
-PrintType(type1, type2String, 0, 1);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
-}
-}
-if(exp->__anon1.op.exp2->destType == dummy)
-{
-FreeType(dummy);
-exp->__anon1.op.exp2->destType = (((void *)0));
-}
-if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
-{
-type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-type2->refCount = 1;
-CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
-type2->isSigned = 1;
-}
-else if(exp->__anon1.op.op == '~' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && (!exp->__anon1.op.exp2->expType->isSigned || exp->__anon1.op.exp2->expType->kind != 3))
+if(prop)
 {
-type2 = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+char getName[1024], setName[1024];
+struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 
-__ecereInstance1->kind = 3, __ecereInstance1;
-});
-type2->refCount = 1;
-type2->isSigned = 1;
+DeclareProperty(curExternal, prop, setName, getName);
+strcpy(propName, "__ecereProp_");
+FullClassNameCat(propName, prop->_class->fullName, 0);
+strcat(propName, "_");
+FullClassNameCat(propName, prop->name, 1);
+ListAdd(args, CopyExpression(object));
+ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
+ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
 }
 else
-{
-type2 = exp->__anon1.op.exp2->expType;
-if(type2)
-type2->refCount++;
-}
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
-dummy->kind = 0;
-if(exp->__anon1.op.op == SIZEOF)
-{
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
-});
-exp->isConstant = 1;
 }
-else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
-{
-exp->expType = Dereference(type2);
-if(type2 && type2->kind == 8)
-notByReference = 1;
+if(object)
+FreeExpression(object);
+if(watcher)
+FreeExpression(watcher);
+FreeList(watches, (void *)(FreeIdentifier));
 }
-else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
-exp->expType = Reference(type2);
-else if(!assign)
-{
-if(boolOps)
-{
-if(exp->__anon1.op.exp1)
-{
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = MkClassType("bool");
-exp->__anon1.op.exp1->destType->truth = 1;
-if(!exp->__anon1.op.exp1->expType)
-ProcessExpressionType(exp->__anon1.op.exp1);
 else
-CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
-FreeType(exp->__anon1.op.exp1->expType);
-exp->__anon1.op.exp1->expType = MkClassType("bool");
-exp->__anon1.op.exp1->expType->truth = 1;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
 }
-if(exp->__anon1.op.exp2)
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = MkClassType("bool");
-exp->__anon1.op.exp2->destType->truth = 1;
-if(!exp->__anon1.op.exp2->expType)
-ProcessExpressionType(exp->__anon1.op.exp2);
 else
-CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
-FreeType(exp->__anon1.op.exp2->expType);
-exp->__anon1.op.exp2->expType = MkClassType("bool");
-exp->__anon1.op.exp2->expType->truth = 1;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
 }
+break;
 }
-else if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((useSideType) || ((!type1 || type1->kind != 8 || !strcmp(type1->__anon1._class->string, "String")) && (!type2 || type2->kind != 8 || !strcmp(type2->__anon1._class->string, "String")))))
-{
-if(type1 && type2 && ((type1->kind == 8 && type1->__anon1._class && strcmp(type1->__anon1._class->string, "String")) == (type2->kind == 8 && type2->__anon1._class && strcmp(type2->__anon1._class->string, "String"))))
-{
-if(exp->__anon1.op.op == '-' && ((type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4) || (type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)))
-{
-struct Type * intType;
-
-if(!type1->__anon1._class->__anon1.registered->dataType)
-type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
-if(!type2->__anon1._class->__anon1.registered->dataType)
-type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
-intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp1->destType = intType;
-exp->__anon1.op.exp2->destType = intType;
-intType->refCount++;
 }
-else
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1;
-type1->refCount++;
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = type2;
-type2->refCount++;
 }
-if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1->__anon1._class->__anon1.registered != type2->__anon1._class->__anon1.registered)
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "operating on %s and %s with an untyped result, assuming %s\n", (((void *)0))), type1->__anon1._class->string, type2->__anon1._class->string, type1->__anon1._class->string);
-if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
-{
-struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
 
-if(argExp)
+void ComputeDataTypes()
 {
-struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
+struct External * external;
 
-exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
-ProcessExpressionType(exp->__anon1.op.exp1);
-if(type2->kind != 13)
+currentClass = (((void *)0));
+containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
+DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
+DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
+DeclareFunctionUtil((((void *)0)), "eSystem_New");
+DeclareFunctionUtil((((void *)0)), "eSystem_New0");
+DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
+DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
+DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
+DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
+DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
+DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
+DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
+DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
+DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
+DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
+DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
+for(external = (*ast).first; external; external = external->next)
 {
-ProcessExpressionType(classExp);
-exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
-if(!exp->__anon1.op.exp2->expType)
+afterExternal = curExternal = external;
+if(external->type == 0)
 {
-if(type2)
-FreeType(type2);
-type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
-type2->refCount++;
+if(memoryGuard)
+{
+DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
+DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
 }
-ProcessExpressionType(exp->__anon1.op.exp2);
+currentClass = external->__anon1.function->_class;
+ProcessFunction(external->__anon1.function);
 }
+else if(external->type == 1)
+{
+if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
+{
+DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
+DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
 }
+currentClass = (((void *)0));
+if(external->__anon1.declaration)
+ProcessDeclaration(external->__anon1.declaration, 1);
 }
-if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->__anon1._class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
+else if(external->type == 2)
 {
-if(type1->kind != 8 && type1->__anon1.type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
-exp->expType = type1;
-if(type1)
-type1->refCount++;
+struct ClassDefinition * _class = external->__anon1._class;
+
+currentClass = external->symbol->__anon1.registered;
+if(memoryGuard)
+{
+DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
+DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
 }
-else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->__anon1._class->string, "String"))) && (type1->kind == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
+if(_class->definitions)
 {
-if(type2->kind != 8 && type2->__anon1.type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
-exp->expType = type2;
-if(type2)
-type2->refCount++;
+ProcessClass(_class->definitions, _class->symbol);
 }
-else if((type1->kind == 13 && type2->kind != 13 && type2->kind != 12 && type2->kind != 11 && type2->kind != 16 && type2->kind != 8 && type2->kind != 19) || (type2->kind == 13 && type1->kind != 13 && type1->kind != 12 && type1->kind != 11 && type1->kind != 16 && type1->kind != 8 && type1->kind != 19))
+if(inCompiler)
 {
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
+((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
 }
-else
+}
+else if(external->type == 4)
 {
-unsigned int success = 0;
+thisNameSpace = external->__anon1.id->string;
+}
+}
+currentClass = (((void *)0));
+thisNameSpace = (((void *)0));
+curExternal = (((void *)0));
+}
 
-if(type1->kind == 13 && type2->kind == 13)
-{
-if(exp->__anon1.op.op == '+')
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
-else if(exp->__anon1.op.op == '-')
-{
-if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
+void ProcessExpressionType(struct Expression * exp)
 {
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+unsigned int unresolved = 0;
+struct Location oldyylloc = yylloc;
+unsigned int notByReference = 0;
 
-__ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
-});
-success = 1;
-if(type1->__anon1.type->kind == 20)
+if(!exp || exp->expType)
+return ;
+yylloc = exp->loc;
+switch(exp->type)
 {
-struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
-
-if(argExp)
+case 0:
 {
-struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
+struct Identifier * id = exp->__anon1.__anon1.identifier;
 
-ProcessExpressionType(classExp);
-exp->type = 5;
-exp->__anon1.list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp1))), exp->__anon1.op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)))))), '/', MkExpMember(classExp, MkIdentifier("typeSize"))));
-ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
-FreeType(dummy);
+if(!id || !topContext)
 return ;
-}
-}
-}
-}
-}
-if(!success && exp->__anon1.op.exp1->type == 2)
-{
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+if(id->_class && id->_class->__anon1.__anon1.name)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->destType;
-if(exp->__anon1.op.exp1->destType)
-exp->__anon1.op.exp1->destType->refCount++;
-success = 1;
+id->classSym = id->_class->__anon1.__anon1.symbol;
 }
-else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
+if(!strcmp(id->string, "__runtimePlatform"))
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp2->destType;
-if(exp->__anon1.op.exp2->destType)
-exp->__anon1.op.exp2->destType->refCount++;
-success = 1;
-}
+exp->expType = ProcessTypeString("ecere::com::Platform", 1);
+break;
 }
-else if(!success)
-{
-if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
+else if(strstr(id->string, "__ecereClass") == id->string)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp2->destType;
-if(exp->__anon1.op.exp2->destType)
-exp->__anon1.op.exp2->destType->refCount++;
-success = 1;
+exp->expType = ProcessTypeString("ecere::com::Class", 1);
+break;
 }
-else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->destType;
-if(exp->__anon1.op.exp1->destType)
-exp->__anon1.op.exp1->destType->refCount++;
-success = 1;
+ReplaceClassMembers(exp, thisClass);
+if(exp->type != 0)
+{
+ProcessExpressionType(exp);
+break;
 }
+if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
+break;
 }
-if(!success)
+else
 {
-char expString1[10240];
-char expString2[10240];
-char type1[1024];
-char type2[1024];
+struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 
-expString1[0] = '\0';
-expString2[0] = '\0';
-type1[0] = '\0';
-type2[0] = '\0';
-if(inCompiler)
+if(!symbol)
 {
-PrintExpression(exp->__anon1.op.exp1, expString1);
-__ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
-PrintExpression(exp->__anon1.op.exp2, expString2);
-__ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
-PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
-PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
-}
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
-}
+if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
+break;
+else
+{
+if(thisClass)
+{
+ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
+if(exp->type != 0)
+{
+ProcessExpressionType(exp);
+break;
 }
 }
-else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
+else if(currentClass && !id->_class)
 {
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
-if(type2->__anon1._class->__anon1.registered->dataType)
-type2->__anon1._class->__anon1.registered->dataType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
-exp->expType = type2;
-if(type2)
-type2->refCount++;
+if(ResolveIdWithClass(exp, currentClass, 1))
+break;
 }
-else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
-{
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
-if(type1->__anon1._class->__anon1.registered->dataType)
-type1->__anon1._class->__anon1.registered->dataType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
-exp->expType = type1;
-if(type1)
-type1->refCount++;
+symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 }
-else if(type1)
+}
+if(symbol)
 {
-unsigned int valid = 0;
+struct Type * type = symbol->type;
+struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
 
-if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
+if(_class && !strcmp(id->string, "this") && !type->classObjectType)
 {
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-if(!type1->__anon1._class->__anon1.registered->dataType)
-type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
-exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
-exp->__anon1.op.exp2->destType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
-if(type2)
-FreeType(type2);
-type2 = exp->__anon1.op.exp2->destType;
-if(type2)
-type2->refCount++;
-exp->expType = type2;
-type2->refCount++;
+struct Context * context = SetupTemplatesContext(_class);
+
+type = ReplaceThisClassType(_class);
+FinishTemplatesContext(context);
+if(type)
+type->refCount = 0;
 }
-if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
+FreeSpecifier(id->_class);
+id->_class = (((void *)0));
+(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
+id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
+id->classSym = (((void *)0));
+exp->expType = type;
+if(type)
+type->refCount++;
+if(type && (type->kind == 15))
+exp->isConstant = 1;
+if(symbol->isParam || !strcmp(id->string, "this"))
 {
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-if(!type2->__anon1._class->__anon1.registered->dataType)
-type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
-exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
-exp->__anon1.op.exp1->destType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
-type1 = exp->__anon1.op.exp1->destType;
-exp->expType = type1;
-type1->refCount++;
+if(_class && _class->type == 1 && !type->declaredWithStruct)
+exp->byReference = 1;
 }
-if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
-{
-unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
-unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
-
-if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
-{
-if(op1IsEnum && exp->__anon1.op.exp2->expType)
+if(symbol->isIterator)
 {
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
+if(symbol->isIterator == 3)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp2->expType;
-if(exp->__anon1.op.exp2->expType)
-exp->__anon1.op.exp2->expType->refCount++;
-valid = 1;
-}
+exp->type = 5;
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
+((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
+exp->expType = (((void *)0));
+ProcessExpressionType(exp);
 }
-else if(op2IsEnum && exp->__anon1.op.exp1->expType)
-{
-if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
+else if(symbol->isIterator != 4)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->expType;
-if(exp->__anon1.op.exp1->expType)
-exp->__anon1.op.exp1->expType->refCount++;
-valid = 1;
+exp->type = 8;
+exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
+exp->__anon1.member.exp->expType = exp->expType;
+exp->__anon1.member.member = MkIdentifier("data");
+exp->expType = (((void *)0));
+ProcessExpressionType(exp);
 }
 }
+break;
 }
 else
 {
-if(op1IsEnum && exp->__anon1.op.exp2->expType)
+struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
+
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
+char name[1024];
+
+strcpy(name, thisNameSpace);
+strcat(name, "::");
+strcat(name, id->string);
+definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
+}
+if(!definedExp)
+definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
+if(definedExp)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->expType;
-if(exp->__anon1.op.exp1->expType)
-exp->__anon1.op.exp1->expType->refCount++;
-valid = 1;
+int c;
+
+for(c = 0; c < definedExpStackPos; c++)
+if(definedExpStack[c] == definedExp)
+break;
+if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
+{
+struct Location backupYylloc = yylloc;
+struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
+
+definedExpStack[definedExpStackPos++] = definedExp;
+fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
+((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
+echoOn = 0;
+parsedExpression = (((void *)0));
+resetScanner();
+expression_yyparse();
+(__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
+if(backInput)
+fileInput = backInput;
+yylloc = backupYylloc;
+if(parsedExpression)
+{
+FreeIdentifier(id);
+exp->type = 5;
+exp->__anon1.list = MkListOne(parsedExpression);
+ApplyLocation(parsedExpression, &yylloc);
+ProcessExpressionType(exp);
+definedExpStackPos--;
+return ;
 }
+definedExpStackPos--;
 }
-else if(op2IsEnum && exp->__anon1.op.exp1->expType)
+else
 {
-if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
+if(inCompiler)
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp2->expType;
-if(exp->__anon1.op.exp2->expType)
-exp->__anon1.op.exp2->expType->refCount++;
-valid = 1;
-}
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
 }
 }
 }
-if(!valid)
-{
-if(type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && (type1->kind != 8 || !type1->__anon1._class || !type1->__anon1._class->__anon1.registered || type1->__anon1._class->__anon1.registered->type != 3))
+else
 {
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = type2;
-type2->refCount++;
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+struct GlobalData * data = (((void *)0));
+
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->destType;
-if(exp->__anon1.op.exp1->destType)
-exp->__anon1.op.exp1->destType->refCount++;
+char name[1024];
+
+strcpy(name, thisNameSpace);
+strcat(name, "::");
+strcat(name, id->string);
+data = FindGlobalData(name);
 }
+if(!data)
+data = FindGlobalData(id->string);
+if(data)
+{
+DeclareGlobalData(curExternal, data);
+exp->expType = data->dataType;
+if(data->dataType)
+data->dataType->refCount++;
+(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
+id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
+FreeSpecifier(id->_class);
+id->_class = (((void *)0));
+break;
 }
 else
 {
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1;
-type1->refCount++;
-if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
+struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
+
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp2->destType;
-if(exp->__anon1.op.exp2->destType)
-exp->__anon1.op.exp2->destType->refCount++;
+char name[1024];
+
+strcpy(name, thisNameSpace);
+strcat(name, "::");
+strcat(name, id->string);
+function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
 }
-else if(type1 && type2)
+if(!function)
+function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
+if(function)
 {
-char expString1[10240];
-char expString2[10240];
-char type1String[1024];
-char type2String[1024];
+char name[1024];
 
-expString1[0] = '\0';
-expString2[0] = '\0';
-type1String[0] = '\0';
-type2String[0] = '\0';
-if(inCompiler)
-{
-PrintExpression(exp->__anon1.op.exp1, expString1);
-__ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
-PrintExpression(exp->__anon1.op.exp2, expString2);
-__ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
-PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
-PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
-}
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
-if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
+(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
+id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
+name[0] = (char)0;
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
+strcpy(name, "__ecereFunction_");
+FullClassNameCat(name, id->string, 0);
+if(DeclareFunction(curExternal, function, name))
 {
-exp->expType = exp->__anon1.op.exp1->expType;
-if(exp->__anon1.op.exp1->expType)
-exp->__anon1.op.exp1->expType->refCount++;
+(__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
+id->string = __ecereNameSpace__ecere__sys__CopyString(name);
 }
-else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
-{
-exp->expType = exp->__anon1.op.exp2->expType;
-if(exp->__anon1.op.exp2->expType)
-exp->__anon1.op.exp2->expType->refCount++;
+exp->expType = function->dataType;
+if(function->dataType)
+function->dataType->refCount++;
+FreeSpecifier(id->_class);
+id->_class = (((void *)0));
+break;
 }
 }
 }
 }
 }
-else if(type2)
-{
-if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
-{
-struct Type * oldType = exp->__anon1.op.exp1->expType;
-
-exp->__anon1.op.exp1->expType = (((void *)0));
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
-FreeType(oldType);
-else
-exp->__anon1.op.exp1->expType = oldType;
+unresolved = 1;
+break;
 }
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = type2;
-type2->refCount++;
-if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+case 1:
 {
-if(exp->expType)
-FreeType(exp->expType);
-exp->expType = exp->__anon1.op.exp1->destType;
-if(exp->__anon1.op.exp1->destType)
-exp->__anon1.op.exp1->destType->refCount++;
-}
-}
-}
-else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
+if(!exp->__anon1.instance->_class)
 {
-if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
+if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
 {
-if(exp->__anon1.op.exp1->destType)
-FreeType(exp->__anon1.op.exp1->destType);
-exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
-if(type2->__anon1._class->__anon1.registered->dataType)
-type2->__anon1._class->__anon1.registered->dataType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
 }
-if(exp->__anon1.op.op == '!')
-{
-exp->expType = MkClassType("bool");
-exp->expType->truth = 1;
 }
-else
+ProcessInstantiationType(exp->__anon1.instance);
+exp->isConstant = exp->__anon1.instance->isConstant;
+if(exp->__anon1.instance->_class)
 {
-exp->expType = type2;
-if(type2)
-type2->refCount++;
+exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
 }
+break;
 }
-else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
+case 2:
 {
-if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
+if(!exp->expType)
 {
-if(exp->__anon1.op.exp2->destType)
-FreeType(exp->__anon1.op.exp2->destType);
-exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
-if(type1->__anon1._class->__anon1.registered->dataType)
-type1->__anon1._class->__anon1.registered->dataType->refCount++;
-CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
-}
-exp->expType = type1;
-if(type1)
-type1->refCount++;
-}
-}
-yylloc = exp->loc;
-if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
+char * constant = exp->__anon1.__anon1.constant;
+struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
+
+exp->expType = type;
+if(constant[0] == '\'')
 {
-char expString[10000];
+if((int)((unsigned char *)constant)[1] > 127)
+{
+int nb;
+unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
 
-expString[0] = '\0';
-if(inCompiler)
+if(nb < 2)
+ch = constant[1];
+(__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
+exp->__anon1.__anon1.constant = PrintUInt(ch);
+type->kind = 8;
+type->__anon1._class = FindClass("unichar");
+type->isSigned = 0;
+}
+else
 {
-PrintExpression(exp->__anon1.op.exp1, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
+type->kind = 1;
+type->isSigned = 1;
 }
-if(expString[0])
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
-if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
+else
 {
-char expString[10240];
+char * dot = strchr(constant, '.');
+unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
+char * exponent;
 
-expString[0] = '\0';
-if(inCompiler)
+if(isHex)
 {
-PrintExpression(exp->__anon1.op.exp2, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-}
-if(expString[0])
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
+exponent = strchr(constant, 'p');
+if(!exponent)
+exponent = strchr(constant, 'P');
 }
-if(boolResult)
+else
 {
-FreeType(exp->expType);
-exp->expType = MkClassType("bool");
-exp->expType->truth = 1;
+exponent = strchr(constant, 'e');
+if(!exponent)
+exponent = strchr(constant, 'E');
 }
-if(exp->__anon1.op.op != SIZEOF)
-exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
-if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
+if(dot || exponent)
 {
-DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
-}
-if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
-yylloc = oldyylloc;
-FreeType(dummy);
-if(type2)
-FreeType(type2);
-break;
+if(strchr(constant, 'f') || strchr(constant, 'F'))
+type->kind = 6;
+else
+type->kind = 7;
+type->isSigned = 1;
 }
-case 5:
-case 32:
+else
 {
-struct Expression * e;
+unsigned int isSigned = constant[0] == '-';
+char * endP = (((void *)0));
+long long i64 = strtoll(constant, &endP, 0);
+uint64 ui64 = strtoull(constant, &endP, 0);
+unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
+unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
 
-exp->isConstant = 1;
-for(e = (*exp->__anon1.list).first; e; e = e->next)
+if(isSigned)
 {
-if(!e->next)
+if(i64 < (((int)0x80000000)))
+is64Bit = 1;
+}
+else
 {
-FreeType(e->destType);
-e->opDestType = exp->opDestType;
-e->destType = exp->destType;
-if(e->destType)
+if(ui64 > (((int)0x7fffffff)))
 {
-exp->destType->refCount++;
+if(ui64 > (0xffffffff))
+{
+is64Bit = 1;
+if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
+isSigned = 1;
 }
 }
-ProcessExpressionType(e);
-if(!exp->expType && !e->next)
-{
-exp->expType = e->expType;
-if(e->expType)
-e->expType->refCount++;
+else if(constant[0] != '0' || !constant[1])
+isSigned = 1;
 }
-if(!e->isConstant)
-exp->isConstant = 0;
+if(forceUnsigned)
+isSigned = 0;
+type->kind = is64Bit ? 4 : 3;
+type->isSigned = isSigned;
 }
-e = (*exp->__anon1.list).first;
-if(!e->next && e->type == 8)
-{
-struct Expression * next = exp->next, * prev = exp->prev;
-
-FreeType(exp->expType);
-FreeType(exp->destType);
-(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
-*exp = *e;
-exp->prev = prev;
-exp->next = next;
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
-ProcessExpressionType(exp);
+}
+exp->isConstant = 1;
+if(exp->destType && exp->destType->kind == 7)
+type->kind = 7;
+else if(exp->destType && exp->destType->kind == 6)
+type->kind = 6;
+else if(exp->destType && exp->destType->kind == 4)
+type->kind = 4;
 }
 break;
 }
-case 6:
+case 3:
 {
-struct Expression * e;
-
 exp->isConstant = 1;
-ProcessExpressionType(exp->__anon1.index.exp);
-if(!exp->__anon1.index.exp->isConstant)
-exp->isConstant = 0;
-if(exp->__anon1.index.exp->expType)
+exp->expType = __extension__ ({
+struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
+}), __ecereInstance2;
+});
+break;
+}
+case 13:
+case 26:
+ProcessExpressionType(exp->__anon1._new.size);
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
+});
+DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
+break;
+case 14:
+case 27:
+ProcessExpressionType(exp->__anon1._renew.size);
+ProcessExpressionType(exp->__anon1._renew.exp);
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
+});
+DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
+break;
+case 4:
 {
-struct Type * source = exp->__anon1.index.exp->expType;
+unsigned int assign = 0, boolResult = 0, boolOps = 0;
+struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
+unsigned int useDestType = 0, useSideType = 0;
+struct Location oldyylloc = yylloc;
+unsigned int useSideUnit = 0;
+struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
+struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
 
-if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
+switch(exp->__anon1.op.op)
+{
+case '=':
+case MUL_ASSIGN:
+case DIV_ASSIGN:
+case MOD_ASSIGN:
+case ADD_ASSIGN:
+case SUB_ASSIGN:
+case LEFT_ASSIGN:
+case RIGHT_ASSIGN:
+case AND_ASSIGN:
+case XOR_ASSIGN:
+case OR_ASSIGN:
+assign = 1;
+break;
+case '!':
+break;
+case AND_OP:
+case OR_OP:
+boolOps = 1;
+boolResult = 1;
+break;
+case EQ_OP:
+case '<':
+case '>':
+case LE_OP:
+case GE_OP:
+case NE_OP:
+boolResult = 1;
+useSideType = 1;
+break;
+case '+':
+case '-':
+useSideUnit = 1;
+useSideType = 1;
+useDestType = 1;
+break;
+case LEFT_OP:
+case RIGHT_OP:
+useSideType = 1;
+useDestType = 1;
+break;
+case '|':
+case '^':
+useSideType = 1;
+useDestType = 1;
+break;
+case '/':
+case '%':
+useSideType = 1;
+useDestType = 1;
+break;
+case '&':
+case '*':
+if(exp->__anon1.op.exp1)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
-struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
-
-if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
+useSideType = 1;
+useDestType = 1;
+}
+break;
+}
+if(exp->__anon1.op.op == '&')
 {
-exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
-if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
+if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
 {
-struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
+struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
+struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 
-if(type->kind == 8)
-type->constant = 1;
-else if(type->kind == 13)
+if(symbol && symbol->isIterator == 2)
 {
-struct Type * t = type;
-
-while(t->kind == 13)
-t = t->__anon1.type;
-t->constant = 1;
+exp->type = 8;
+exp->__anon1.member.exp = exp->__anon1.op.exp2;
+exp->__anon1.member.member = MkIdentifier("key");
+exp->expType = (((void *)0));
+exp->__anon1.op.exp2->expType = symbol->type;
+symbol->type->refCount++;
+ProcessExpressionType(exp);
+FreeType(dummy);
+break;
 }
-((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
 }
 }
+if(exp->__anon1.op.exp1)
+{
+if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
+useDestType = 0;
+if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = exp->destType;
+exp->__anon1.op.exp1->opDestType = 1;
+if(exp->destType)
+exp->destType->refCount++;
 }
+else if(!assign)
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = dummy;
+dummy->refCount++;
 }
-for(e = (*exp->__anon1.index.index).first; e; e = e->next)
+if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp1->destType->count++;
+ProcessExpressionType(exp->__anon1.op.exp1);
+if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp1->destType->count--;
+exp->__anon1.op.exp1->opDestType = 0;
+if(!exp->__anon1.op.exp2 && (exp->__anon1.op.op == INC_OP || exp->__anon1.op.op == DEC_OP) && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind == 8 && exp->__anon1.op.exp1->expType->__anon1._class && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered->type == 3)
 {
-if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
+exp->__anon1.op.exp2 = MkExpConstant("1");
+exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
+assign = 1;
+}
+if(exp->__anon1.op.exp1->destType == dummy)
 {
-if(e->destType)
-FreeType(e->destType);
-e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
+FreeType(dummy);
+exp->__anon1.op.exp1->destType = (((void *)0));
 }
-ProcessExpressionType(e);
-if(!e->next)
+type1 = exp->__anon1.op.exp1->expType;
+}
+if(exp->__anon1.op.exp2)
 {
+char expString[10240];
+
+expString[0] = '\0';
+if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
+{
+if(exp->__anon1.op.exp1)
+{
+exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
 }
-if(!e->isConstant)
-exp->isConstant = 0;
+else
+{
+exp->__anon1.op.exp2->destType = exp->destType;
+if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
+exp->__anon1.op.exp2->opDestType = 1;
+if(exp->destType)
+exp->destType->refCount++;
 }
-if(!exp->expType)
-exp->expType = Dereference(exp->__anon1.index.exp->expType);
-if(exp->expType)
-DeclareType(curExternal, exp->expType, 1, 0);
-break;
+if(type1)
+type1->refCount++;
+exp->expType = type1;
 }
-case 7:
+else if(assign)
 {
-struct Expression * e;
-struct Type * functionType;
-struct Type * methodType = (((void *)0));
-char name[1024];
-
-name[0] = '\0';
 if(inCompiler)
+PrintExpression(exp->__anon1.op.exp2, expString);
+if(type1 && type1->kind == 13)
 {
-PrintExpression(exp->__anon1.call.exp, name);
-if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
+if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN || exp->__anon1.op.op == AND_ASSIGN || exp->__anon1.op.op == OR_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
+else if(exp->__anon1.op.op == '=')
 {
-PrintExpression(exp->__anon1.call.exp, name);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
+if(type1)
+type1->refCount++;
 }
 }
-if(exp->__anon1.call.exp->type == 0)
+else
 {
-struct Expression * idExp = exp->__anon1.call.exp;
-struct Identifier * id = idExp->__anon1.__anon1.identifier;
-
-if(!strcmp(id->string, "__builtin_frame_address"))
+if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN)
+;
+else
 {
-exp->expType = ProcessTypeString("void *", 1);
-if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
-ProcessExpressionType((*exp->__anon1.call.arguments).first);
-break;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
+if(type1)
+type1->refCount++;
 }
-else if(!strcmp(id->string, "__ENDIAN_PAD"))
-{
-exp->expType = ProcessTypeString("int", 1);
-if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
-ProcessExpressionType((*exp->__anon1.call.arguments).first);
-break;
 }
-else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
+if(type1)
+type1->refCount++;
+exp->expType = type1;
+}
+else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
 {
-struct Expression * a = (((void *)0));
-struct Expression * b = (((void *)0));
-struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
-
-if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = exp->destType;
+if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
+exp->__anon1.op.exp2->opDestType = 1;
+if(exp->destType)
+exp->destType->refCount++;
+}
+else
 {
-a = (*exp->__anon1.call.arguments).first;
-b = (*exp->__anon1.call.arguments).last;
-tempExp1 = a;
-tempExp2 = b;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = dummy;
+dummy->refCount++;
 }
-else if((*exp->__anon1.call.arguments).count == 1)
+if(type1 && boolResult && useSideType && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && (type1->__anon1._class->__anon1.registered->type == 2 || type1->__anon1._class->__anon1.registered->type == 4))
 {
-a = (*exp->__anon1.call.arguments).first;
-tempExp1 = a;
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
+type1->refCount++;
 }
-if(a)
+if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp2->destType->count++;
+if(exp->__anon1.op.op == SIZEOF)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
-idExp->__anon1.__anon1.identifier = (((void *)0));
-FreeExpContents(exp);
-ProcessExpressionType(a);
-if(b)
-ProcessExpressionType(b);
-exp->type = 5;
-exp->__anon1.list = MkList();
-if(a->expType && (!b || b->expType))
+struct Expression * e = exp->__anon1.op.exp2;
+
+while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
 {
-if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
+if(e->type == 5 || e->type == 32 || e->type == 23)
 {
-if(inCompiler)
+if(e->type == 23)
+e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
+else
+e = (*e->__anon1.list).last;
+}
+}
+if(e->type == 11 && e->__anon1.cast.exp)
+e->__anon1.cast.exp->needCast = 1;
+}
+ProcessExpressionType(exp->__anon1.op.exp2);
+exp->__anon1.op.exp2->opDestType = 0;
+if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp2->destType->count--;
+if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
 {
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
-struct Declaration * decl;
-char temp1[1024], temp2[1024];
-
-GetTypeSpecs(a->expType, specs);
-if(a && !a->isConstant && a->type != 0)
+if(exp->__anon1.op.exp2->expType->kind == 23 || exp->__anon1.op.exp2->expType->kind == 22 || exp->__anon1.op.exp2->expType->kind == 4 || exp->__anon1.op.exp2->expType->kind == 3 || exp->__anon1.op.exp2->expType->kind == 2 || exp->__anon1.op.exp2->expType->kind == 1)
 {
-sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
-ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
-tempExp1 = QMkExpId(temp1);
-tempExp1->expType = a->expType;
-if(a->expType)
-a->expType->refCount++;
-ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
+if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
 }
-if(b && !b->isConstant && b->type != 0)
+else if(exp->__anon1.op.exp2->expType->kind == 13 || exp->__anon1.op.exp2->expType->kind == 12 || exp->__anon1.op.exp2->expType->kind == 11 || exp->__anon1.op.exp2->expType->kind == 16 || (type1->__anon1.type->kind == 0 && exp->__anon1.op.exp2->expType->kind == 8 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && (exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 0 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 5)))
 {
-sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
-ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
-tempExp2 = QMkExpId(temp2);
-tempExp2->expType = b->expType;
-if(b->expType)
-b->expType->refCount++;
-ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
-}
-decl = MkDeclaration(specs, decls);
-if(!curCompound->__anon1.compound.declarations)
-curCompound->__anon1.compound.declarations = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
-}
+if(exp->__anon1.op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
 }
+else if((exp->__anon1.op.exp2->expType->kind == 8 && type1->kind == 13 && type1->__anon1.type->kind == 8 && type1->__anon1.type->__anon1._class == exp->__anon1.op.exp2->expType->__anon1._class && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1))
+{
+if(exp->__anon1.op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
 }
-if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
+else if(inCompiler)
 {
-int op = (!strcmp(id->string, "Max")) ? '>' : '<';
+char type1String[1024];
+char type2String[1024];
 
-ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
-exp->expType = a->expType;
-if(a->expType)
-a->expType->refCount++;
+type1String[0] = '\0';
+type2String[0] = '\0';
+PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
+PrintType(type1, type2String, 0, 1);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
 }
-else if(!strcmp(id->string, "Abs"))
+}
+if(exp->__anon1.op.exp2->destType == dummy)
 {
-ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
-exp->expType = a->expType;
-if(a->expType)
-a->expType->refCount++;
+FreeType(dummy);
+exp->__anon1.op.exp2->destType = (((void *)0));
 }
-else if(!strcmp(id->string, "Sgn"))
+if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
 {
-ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '!', CopyExpression(tempExp1)))), MkListOne(MkExpConstant("0")), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpConstant("-1")), MkExpConstant("1"))))));
-exp->expType = ProcessTypeString("int", 0);
+type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+type2->refCount = 1;
+CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
+type2->isSigned = 1;
 }
-FreeExpression(tempExp1);
-if(tempExp2)
-FreeExpression(tempExp2);
-FreeIdentifier(id);
-break;
+else if(exp->__anon1.op.op == '~' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && (!exp->__anon1.op.exp2->expType->isSigned || exp->__anon1.op.exp2->expType->kind != 3))
+{
+type2 = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->kind = 3, __ecereInstance1;
+});
+type2->refCount = 1;
+type2->isSigned = 1;
 }
+else
+{
+type2 = exp->__anon1.op.exp2->expType;
+if(type2)
+type2->refCount++;
 }
 }
+dummy->kind = 0;
+if(exp->__anon1.op.op == SIZEOF)
 {
-struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-if(!exp->__anon1.call.exp->destType)
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
+});
+exp->isConstant = 1;
+}
+else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
 {
-exp->__anon1.call.exp->destType = dummy;
-dummy->refCount++;
+exp->expType = Dereference(type2);
+if(type2 && type2->kind == 8)
+notByReference = 1;
 }
-ProcessExpressionType(exp->__anon1.call.exp);
-if(exp->__anon1.call.exp->destType == dummy)
+else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
+exp->expType = Reference(type2);
+else if(!assign)
 {
-FreeType(dummy);
-exp->__anon1.call.exp->destType = (((void *)0));
+if(boolOps)
+{
+if(exp->__anon1.op.exp1)
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = MkClassType("bool");
+exp->__anon1.op.exp1->destType->truth = 1;
+if(!exp->__anon1.op.exp1->expType)
+ProcessExpressionType(exp->__anon1.op.exp1);
+else
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+FreeType(exp->__anon1.op.exp1->expType);
+exp->__anon1.op.exp1->expType = MkClassType("bool");
+exp->__anon1.op.exp1->expType->truth = 1;
 }
-FreeType(dummy);
+if(exp->__anon1.op.exp2)
+{
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = MkClassType("bool");
+exp->__anon1.op.exp2->destType->truth = 1;
+if(!exp->__anon1.op.exp2->expType)
+ProcessExpressionType(exp->__anon1.op.exp2);
+else
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+FreeType(exp->__anon1.op.exp2->expType);
+exp->__anon1.op.exp2->expType = MkClassType("bool");
+exp->__anon1.op.exp2->expType->truth = 1;
 }
-functionType = exp->__anon1.call.exp->expType;
-if(functionType && functionType->kind == 16)
+}
+else if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((useSideType) || ((!type1 || type1->kind != 8 || !strcmp(type1->__anon1._class->string, "String")) && (!type2 || type2->kind != 8 || !strcmp(type2->__anon1._class->string, "String")))))
 {
-methodType = functionType;
-functionType = methodType->__anon1.__anon3.method->dataType;
-if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
+if(type1 && type2 && ((type1->kind == 8 && type1->__anon1._class && strcmp(type1->__anon1._class->string, "String")) == (type2->kind == 8 && type2->__anon1._class && strcmp(type2->__anon1._class->string, "String"))))
 {
-char typeString[1024];
-
-typeString[0] = '\0';
+if(exp->__anon1.op.op == '-' && ((type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4) || (type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)))
 {
-struct Symbol * back = functionType->__anon1.__anon2.thisClass;
+struct Type * intType;
 
-functionType->__anon1.__anon2.thisClass = (((void *)0));
-PrintType(functionType, typeString, 1, 1);
-functionType->__anon1.__anon2.thisClass = back;
+if(!type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
+if(!type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
+intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp1->destType = intType;
+exp->__anon1.op.exp2->destType = intType;
+intType->refCount++;
 }
-if(strstr(typeString, "thisclass"))
-{
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl;
-
+else
 {
-struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
-
-decl = SpecDeclFromString(typeString, specs, (((void *)0)));
-if(thisClass != (exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass ? exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass : exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass))
-thisClassParams = 0;
-ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
+type1->refCount++;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2;
+type2->refCount++;
+}
+if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1->__anon1._class->__anon1.registered != type2->__anon1._class->__anon1.registered)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "operating on %s and %s with an untyped result, assuming %s\n", (((void *)0))), type1->__anon1._class->string, type2->__anon1._class->string, type1->__anon1._class->string);
+if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
 {
-struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
+struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
 
-thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
-ProcessDeclarator(decl, 1);
-thisClass = backupThisClass;
-}
-thisClassParams = 1;
-functionType = ProcessType(specs, decl);
-functionType->refCount = 0;
-FinishTemplatesContext(context);
+if(argExp)
 {
-struct Type * p, * op;
+struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
 
-for(p = functionType->__anon1.__anon2.params.first, op = methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.params.first; p && op; p = p->next, op = op->next)
+exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
+ProcessExpressionType(exp->__anon1.op.exp1);
+if(type2->kind != 13)
 {
-if(op->kind == 21)
-p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
-}
-}
-if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
+ProcessExpressionType(classExp);
+exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
+if(!exp->__anon1.op.exp2->expType)
 {
-functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
-}
+if(type2)
+FreeType(type2);
+type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
+type2->refCount++;
 }
-FreeList(specs, (void *)(FreeSpecifier));
-FreeDeclarator(decl);
+ProcessExpressionType(exp->__anon1.op.exp2);
 }
 }
 }
-if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
-{
-struct Type * type = functionType->__anon1.type;
-
-if(!functionType->refCount)
+if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->__anon1._class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
 {
-functionType->__anon1.type = (((void *)0));
-FreeType(functionType);
+if(type1->kind != 8 && type1->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
+exp->expType = type1;
+if(type1)
+type1->refCount++;
 }
-functionType = type;
+else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->__anon1._class->string, "String"))) && (type1->kind == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
+{
+if(type2->kind != 8 && type2->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
+exp->expType = type2;
+if(type2)
+type2->refCount++;
 }
-if(functionType && functionType->kind != 11)
+else if((type1->kind == 13 && type2->kind != 13 && type2->kind != 12 && type2->kind != 11 && type2->kind != 16 && type2->kind != 8 && type2->kind != 19) || (type2->kind == 13 && type1->kind != 13 && type1->kind != 12 && type1->kind != 11 && type1->kind != 16 && type1->kind != 8 && type1->kind != 19))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
 }
-else if(functionType)
+else
 {
-unsigned int emptyParams = 0, noParams = 0;
-struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
-struct Type * type = functionType->__anon1.__anon2.params.first;
-struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
-int extra = 0;
-struct Location oldyylloc = yylloc;
+unsigned int success = 0;
 
-if(!type)
-emptyParams = 1;
-if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
-{
-e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
-e = e->next;
-}
-if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
+if(type1->kind == 13 && type2->kind == 13)
 {
-if(memberExp && memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType && memberExp->__anon1.member.exp->expType->kind == 19 && memberExp->__anon1.member.exp->expType->__anon1._class)
+if(exp->__anon1.op.op == '+')
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
+else if(exp->__anon1.op.op == '-')
 {
-type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
-if(e)
+if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
 {
-e->destType = type;
-e = e->next;
-type = functionType->__anon1.__anon2.params.first;
-}
-else
-type->refCount = 0;
-}
-else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
+});
+success = 1;
+if(type1->__anon1.type->kind == 20)
 {
-type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
-type->byReference = functionType->byReference;
-type->typedByReference = functionType->typedByReference;
-if(e)
+struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
+
+if(argExp)
 {
-if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
-e = e->next;
-e->destType = type;
-e = e->next;
-type = functionType->__anon1.__anon2.params.first;
+struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
+
+ProcessExpressionType(classExp);
+exp->type = 5;
+exp->__anon1.list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp1))), exp->__anon1.op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)))))), '/', MkExpMember(classExp, MkIdentifier("typeSize"))));
+ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
+FreeType(dummy);
+return ;
 }
-else
-type->refCount = 0;
 }
 }
-if(type && type->kind == 0)
-{
-noParams = 1;
-if(!type->refCount)
-FreeType(type);
-type = (((void *)0));
 }
-for(; e; e = e->next)
+}
+if(!success && exp->__anon1.op.exp1->type == 2)
 {
-if(!type && !emptyParams)
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
-yylloc = e->loc;
-if(methodType && methodType->__anon1.__anon3.methodClass)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
-break;
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
+success = 1;
 }
-if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
+else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
-struct Type * templatedType = (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
-int id = 0;
-
-if(_class && _class->templateArgs)
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
+success = 1;
+}
+}
+else if(!success)
 {
-struct __ecereNameSpace__ecere__com__Class * sClass;
-
-for(sClass = _class; sClass; sClass = sClass->base)
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
-if(sClass->templateClass)
-sClass = sClass->templateClass;
-id = 0;
-for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
+success = 1;
+}
+else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
-if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
+success = 1;
+}
+}
+if(!success)
 {
-struct __ecereNameSpace__ecere__com__Class * nextClass;
+char expString1[10240];
+char expString2[10240];
+char type1[1024];
+char type2[1024];
 
-for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
+expString1[0] = '\0';
+expString2[0] = '\0';
+type1[0] = '\0';
+type2[0] = '\0';
+if(inCompiler)
 {
-if(nextClass->templateClass)
-nextClass = nextClass->templateClass;
-id += nextClass->templateParams.count;
+PrintExpression(exp->__anon1.op.exp1, expString1);
+__ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
+PrintExpression(exp->__anon1.op.exp2, expString2);
+__ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
+PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
+PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
 }
-break;
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
 }
-id++;
 }
-if(curParam)
-break;
 }
+else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+if(type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+exp->expType = type2;
+if(type2)
+type2->refCount++;
 }
-if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
+else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
 {
-unsigned int constant = type->constant;
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
-
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+if(type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+exp->expType = type1;
+if(type1)
+type1->refCount++;
+}
+else if(type1)
 {
-struct Context * context = SetupTemplatesContext(_class);
+unsigned int valid = 0;
 
-templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
-FinishTemplatesContext(context);
+if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
+{
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+if(!type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+exp->__anon1.op.exp2->destType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+if(type2)
+FreeType(type2);
+type2 = exp->__anon1.op.exp2->destType;
+if(type2)
+type2->refCount++;
+exp->expType = type2;
+type2->refCount++;
 }
-if(templatedType->kind == 8 && constant)
-templatedType->constant = 1;
-else if(templatedType->kind == 13)
+if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
 {
-struct Type * t = templatedType->__anon1.type;
-
-while(t->kind == 13)
-t = t->__anon1.type;
-if(constant)
-t->constant = constant;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+if(!type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+exp->__anon1.op.exp1->destType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+type1 = exp->__anon1.op.exp1->destType;
+exp->expType = type1;
+type1->refCount++;
 }
-e->destType = templatedType;
-if(templatedType)
+if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
 {
-templatedType->passAsTemplate = 1;
+unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
+unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
+
+if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
+{
+if(op1IsEnum && exp->__anon1.op.exp2->expType)
+{
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
+valid = 1;
 }
 }
-else
+else if(op2IsEnum && exp->__anon1.op.exp1->expType)
 {
-e->destType = type;
-if(type)
-type->refCount++;
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
+valid = 1;
+}
 }
 }
 else
 {
-if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
+if(op1IsEnum && exp->__anon1.op.exp2->expType)
 {
-e->destType = type->prev;
-e->destType->refCount++;
-}
-else
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
 {
-e->destType = type;
-if(type)
-type->refCount++;
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
+valid = 1;
 }
 }
-if(type && type->kind != 14)
+else if(op2IsEnum && exp->__anon1.op.exp1->expType)
 {
-struct Type * next = type->next;
-
-if(!type->refCount)
-FreeType(type);
-type = next;
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
+valid = 1;
 }
 }
-if(type && type->kind != 14)
+}
+}
+if(!valid)
+{
+if(type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && (type1->kind != 8 || !type1->__anon1._class || !type1->__anon1._class->__anon1.registered || type1->__anon1._class->__anon1.registered->type != 3))
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2;
+type2->refCount++;
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
-if(methodType && methodType->__anon1.__anon3.methodClass)
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
-else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
 }
-yylloc = oldyylloc;
-if(type && !type->refCount)
-FreeType(type);
 }
 else
 {
-functionType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
-});
-if(exp->__anon1.call.exp->type == 0)
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
+type1->refCount++;
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
-char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
+}
+else if(type1 && type2)
+{
+char expString1[10240];
+char expString2[10240];
+char type1String[1024];
+char type2String[1024];
 
+expString1[0] = '\0';
+expString2[0] = '\0';
+type1String[0] = '\0';
+type2String[0] = '\0';
 if(inCompiler)
 {
-struct Symbol * symbol;
-struct Location oldyylloc = yylloc;
-
-yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
-if(strstr(string, "__builtin_") == string)
+PrintExpression(exp->__anon1.op.exp1, expString1);
+__ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
+PrintExpression(exp->__anon1.op.exp2, expString2);
+__ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
+PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
+PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
+}
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
+if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
 {
-if(exp->destType)
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
+}
+else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
 {
-functionType->__anon1.__anon2.returnType = exp->destType;
-exp->destType->refCount++;
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
 }
 }
-else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
-symbol = __extension__ ({
-struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
-
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
-});
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
-if(strstr(symbol->string, "::"))
-globalContext->hasNameSpace = 1;
-yylloc = oldyylloc;
 }
 }
-else if(exp->__anon1.call.exp->type == 8)
-{
 }
-else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
-if(!functionType->__anon1.__anon2.returnType)
+else if(type2)
 {
-functionType->__anon1.__anon2.returnType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
+{
+struct Type * oldType = exp->__anon1.op.exp1->expType;
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
-});
-}
+exp->__anon1.op.exp1->expType = (((void *)0));
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+FreeType(oldType);
+else
+exp->__anon1.op.exp1->expType = oldType;
 }
-if(functionType && functionType->kind == 11)
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2;
+type2->refCount++;
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
-exp->expType = functionType->__anon1.__anon2.returnType;
-if(functionType->__anon1.__anon2.returnType)
-functionType->__anon1.__anon2.returnType->refCount++;
-if(!functionType->refCount)
-FreeType(functionType);
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
 }
-if(exp->__anon1.call.arguments)
-{
-for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
-ProcessExpressionType(e);
 }
-break;
 }
-case 8:
-{
-struct Type * type;
-struct Location oldyylloc = yylloc;
-unsigned int thisPtr;
-struct Expression * checkExp = exp->__anon1.member.exp;
-
-while(checkExp)
+else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
 {
-if(checkExp->type == 11)
-checkExp = checkExp->__anon1.cast.exp;
-else if(checkExp->type == 5)
-checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
-else
-break;
-}
-thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
-exp->thisPtr = thisPtr;
-if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
+if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
 {
-exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+if(type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
 }
-ProcessExpressionType(exp->__anon1.member.exp);
-if(exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered->type == 0)
+if(exp->__anon1.op.op == '!')
 {
-exp->isConstant = 0;
+exp->expType = MkClassType("bool");
+exp->expType->truth = 1;
 }
 else
-exp->isConstant = exp->__anon1.member.exp->isConstant;
-type = exp->__anon1.member.exp->expType;
-yylloc = exp->loc;
-if(type && (type->kind == 20))
 {
-struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
-
-if(_class)
+exp->expType = type2;
+if(type2)
+type2->refCount++;
+}
+}
+else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
 {
-for(param = _class->templateParams.first; param; param = param->next)
+if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
 {
-if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
-break;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+if(type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+}
+exp->expType = type1;
+if(type1)
+type1->refCount++;
 }
 }
-if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
+yylloc = exp->loc;
+if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
 {
-struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
+char expString[10000];
 
-if(argExp)
+expString[0] = '\0';
+if(inCompiler)
 {
-struct Expression * expMember = exp->__anon1.member.exp;
-struct Declarator * decl;
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-char thisClassTypeString[1024];
-
-FreeIdentifier(exp->__anon1.member.member);
-ProcessExpressionType(argExp);
+PrintExpression(exp->__anon1.op.exp1, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
+}
+if(expString[0])
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
+}
+if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
 {
-char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
+char expString[10240];
 
-if(colon)
+expString[0] = '\0';
+if(inCompiler)
 {
-memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
-thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
+PrintExpression(exp->__anon1.op.exp2, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-else
-strcpy(thisClassTypeString, _class->fullName);
+if(expString[0])
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
-decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
-exp->expType = ProcessType(specs, decl);
-if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
-{
-struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
-struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
-int paramCount = 0;
-int lastParam = -1;
-char templateString[1024];
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
-
-sprintf(templateString, "%s<", expClass->templateClass->fullName);
-for(cClass = expClass; cClass; cClass = cClass->base)
+if(boolResult)
 {
-int p = 0;
-
-for(param = cClass->templateParams.first; param; param = param->next)
+FreeType(exp->expType);
+exp->expType = MkClassType("bool");
+exp->expType->truth = 1;
+}
+if(exp->__anon1.op.op != SIZEOF)
+exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
+if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
 {
-int id = p;
-struct __ecereNameSpace__ecere__com__Class * sClass;
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
-
-for(sClass = cClass->base; sClass; sClass = sClass->base)
-id += sClass->templateParams.count;
-arg = expClass->templateArgs[id];
-for(sClass = _class; sClass; sClass = sClass->base)
+DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
+}
+if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
+yylloc = oldyylloc;
+FreeType(dummy);
+if(type2)
+FreeType(type2);
+break;
+}
+case 5:
+case 32:
 {
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
-int p = 0;
-struct __ecereNameSpace__ecere__com__Class * nextClass;
+struct Expression * e;
 
-for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
-p += nextClass->templateParams.count;
-for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
+exp->isConstant = 1;
+for(e = (*exp->__anon1.list).first; e; e = e->next)
 {
-if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
+if(!e->next)
 {
-if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+FreeType(e->destType);
+e->opDestType = exp->opDestType;
+e->destType = exp->destType;
+if(e->destType)
 {
-arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
-arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
-break;
+exp->destType->refCount++;
 }
 }
+ProcessExpressionType(e);
+if(!exp->expType && !e->next)
+{
+exp->expType = e->expType;
+if(e->expType)
+e->expType->refCount++;
 }
+if(!e->isConstant)
+exp->isConstant = 0;
 }
+e = (*exp->__anon1.list).first;
+if(!e->next && e->type == 8)
 {
-char argument[256];
-
-argument[0] = '\0';
-switch(param->type)
-{
-case 2:
-{
-char expString[1024];
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
-struct Expression * exp;
-char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
+struct Expression * next = exp->next, * prev = exp->prev;
 
-exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
-(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
+FreeType(exp->expType);
+FreeType(exp->destType);
+(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
+*exp = *e;
+exp->prev = prev;
+exp->next = next;
+((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
 ProcessExpressionType(exp);
-ComputeExpression(exp);
-expString[0] = '\0';
-PrintExpression(exp, expString);
-strcat(argument, expString);
-FreeExpression(exp);
-break;
 }
-case 1:
-{
-strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
 break;
 }
-case 0:
+case 6:
 {
-if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+struct Expression * e;
+
+exp->isConstant = 1;
+ProcessExpressionType(exp->__anon1.index.exp);
+if(!exp->__anon1.index.exp->isConstant)
+exp->isConstant = 0;
+if(exp->__anon1.index.exp->expType)
 {
-if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
-strcat(argument, thisClassTypeString);
-else
-strcat(argument, arg.__anon1.__anon1.dataTypeString);
-}
-break;
-}
-}
-if(argument[0])
+struct Type * source = exp->__anon1.index.exp->expType;
+
+if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
 {
-if(paramCount)
-strcat(templateString, ", ");
-if(lastParam != p - 1)
+struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
+struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
+
+if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
 {
-strcat(templateString, param->name);
-strcat(templateString, " = ");
+exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
+if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
+{
+struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
+
+if(type->kind == 8)
+type->constant = 1;
+else if(type->kind == 13)
+{
+struct Type * t = type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+t->constant = 1;
 }
-strcat(templateString, argument);
-paramCount++;
-lastParam = p;
+((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
 }
-p++;
 }
 }
 }
+for(e = (*exp->__anon1.index.index).first; e; e = e->next)
 {
-int len = strlen(templateString);
-
-if(templateString[len - 1] == '>')
-templateString[len++] = ' ';
-templateString[len++] = '>';
-templateString[len++] = '\0';
-}
+if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
 {
-struct Context * context = SetupTemplatesContext(_class);
-
-FreeType(exp->expType);
-exp->expType = ProcessTypeString(templateString, 0);
-FinishTemplatesContext(context);
+if(e->destType)
+FreeType(e->destType);
+e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
 }
+ProcessExpressionType(e);
+if(!e->next)
+{
 }
-if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
-expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
-exp->type = 5;
-exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), expMember))), '+', MkExpOp(MkExpMember(MkExpMember(argExp, MkIdentifier("member")), MkIdentifier("offset")), '+', MkExpMember(MkExpMember(MkExpMember(CopyExpression(argExp), MkIdentifier("member")), MkIdentifier("_class")), MkIdentifier("offset")))))))));
+if(!e->isConstant)
+exp->isConstant = 0;
 }
+if(!exp->expType)
+exp->expType = Dereference(exp->__anon1.index.exp->expType);
+if(exp->expType)
+DeclareType(curExternal, exp->expType, 1, 0);
+break;
 }
-else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
+case 7:
 {
-type = ProcessTemplateParameterType(type->__anon1.templateParameter);
+struct Expression * e;
+struct Type * functionType;
+struct Type * methodType = (((void *)0));
+char name[1024];
+
+name[0] = '\0';
+if(inCompiler)
+{
+PrintExpression(exp->__anon1.call.exp, name);
+if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
+{
+PrintExpression(exp->__anon1.call.exp, name);
 }
 }
-if(type && (type->kind == 20))
-;
-else if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15 || type->kind == 4 || type->kind == 2 || type->kind == 5 || type->kind == 1 || type->kind == 24 || type->kind == 22 || type->kind == 23 || type->kind == 6 || type->kind == 7 || (type->kind == 13 && type->__anon1.type->kind == 1)))
+if(exp->__anon1.call.exp->type == 0)
 {
-struct Identifier * id = exp->__anon1.member.member;
-int typeKind = type->kind;
-struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
+struct Expression * idExp = exp->__anon1.call.exp;
+struct Identifier * id = idExp->__anon1.__anon1.identifier;
 
-if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
+if(!strcmp(id->string, "__builtin_frame_address"))
 {
-_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
-typeKind = 8;
+exp->expType = ProcessTypeString("void *", 1);
+if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
+ProcessExpressionType((*exp->__anon1.call.arguments).first);
+break;
 }
-if(id)
+else if(!strcmp(id->string, "__ENDIAN_PAD"))
 {
-if(typeKind == 3 || typeKind == 15)
-_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
-else if(!_class)
+exp->expType = ProcessTypeString("int", 1);
+if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
+ProcessExpressionType((*exp->__anon1.call.arguments).first);
+break;
+}
+else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
 {
-if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
+struct Expression * a = (((void *)0));
+struct Expression * b = (((void *)0));
+struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
+
+if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
 {
-_class = type->__anon1._class->__anon1.registered;
+a = (*exp->__anon1.call.arguments).first;
+b = (*exp->__anon1.call.arguments).last;
+tempExp1 = a;
+tempExp2 = b;
 }
-else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
+else if((*exp->__anon1.call.arguments).count == 1)
 {
-_class = FindClass("char *")->__anon1.registered;
+a = (*exp->__anon1.call.arguments).first;
+tempExp1 = a;
 }
-else if(type->kind == 13)
+if(a)
 {
-_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
-FreeType(exp->expType);
-exp->expType = ProcessTypeString("uintptr", 0);
-exp->byReference = 1;
-}
-else
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
+idExp->__anon1.__anon1.identifier = (((void *)0));
+FreeExpContents(exp);
+ProcessExpressionType(a);
+if(b)
+ProcessExpressionType(b);
+exp->type = 5;
+exp->__anon1.list = MkList();
+if(a->expType && (!b || b->expType))
 {
-char string[1024] = "";
-struct Symbol * classSym;
+if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
+{
+if(inCompiler)
+{
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
+struct Declaration * decl;
+char temp1[1024], temp2[1024];
 
-PrintTypeNoConst(type, string, 0, 1);
-classSym = FindClass(string);
-if(classSym)
-_class = classSym->__anon1.registered;
+GetTypeSpecs(a->expType, specs);
+if(a && !a->isConstant && a->type != 0)
+{
+sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
+ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
+tempExp1 = QMkExpId(temp1);
+tempExp1->expType = a->expType;
+if(a->expType)
+a->expType->refCount++;
+ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
+}
+if(b && !b->isConstant && b->type != 0)
+{
+sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
+ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
+tempExp2 = QMkExpId(temp2);
+tempExp2->expType = b->expType;
+if(b->expType)
+b->expType->refCount++;
+ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
+}
+decl = MkDeclaration(specs, decls);
+if(!curCompound->__anon1.compound.declarations)
+curCompound->__anon1.compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
 }
 }
 }
-if(_class && id)
+if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
 {
-struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
-struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
-struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
-struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
-struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
+int op = (!strcmp(id->string, "Max")) ? '>' : '<';
 
-if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
-exp->__anon1.member.memberType = 1;
-if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
-if(typeKind != 19)
-{
-if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
+exp->expType = a->expType;
+if(a->expType)
+a->expType->refCount++;
+}
+else if(!strcmp(id->string, "Abs"))
 {
-member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
-if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
+exp->expType = a->expType;
+if(a->expType)
+a->expType->refCount++;
+}
+else if(!strcmp(id->string, "Sgn"))
 {
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
-if(prop)
-member = (((void *)0));
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '!', CopyExpression(tempExp1)))), MkListOne(MkExpConstant("0")), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpConstant("-1")), MkExpConstant("1"))))));
+exp->expType = ProcessTypeString("int", 0);
+}
+FreeExpression(tempExp1);
+if(tempExp2)
+FreeExpression(tempExp2);
+FreeIdentifier(id);
+break;
 }
-if(!member && !prop)
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
-if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
-exp->__anon1.member.thisPtr = 1;
 }
-else
-{
-unsigned int useMemberForNonConst = 0;
-
-if(!id->classSym)
-{
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
-useMemberForNonConst = prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
-if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
-member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
 }
-if((!prop || useMemberForNonConst) && !member)
 {
-method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
-if(!method)
+struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
+
+if(!exp->__anon1.call.exp->destType)
 {
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
-useMemberForNonConst |= prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
-if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
-member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
-}
+exp->__anon1.call.exp->destType = dummy;
+dummy->refCount++;
 }
-if(member && prop)
+ProcessExpressionType(exp->__anon1.call.exp);
+if(exp->__anon1.call.exp->destType == dummy)
 {
-if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
-prop = (((void *)0));
-else
-member = (((void *)0));
-}
+FreeType(dummy);
+exp->__anon1.call.exp->destType = (((void *)0));
 }
+FreeType(dummy);
 }
-if(!prop && !member && !method)
-method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
-if(!prop && !member && !method)
+functionType = exp->__anon1.call.exp->expType;
+if(functionType && functionType->kind == 16)
 {
-if(typeKind == 19)
+methodType = functionType;
+functionType = methodType->__anon1.__anon3.method->dataType;
+if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
 {
-classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
-if(classProp)
+char typeString[1024];
+
+typeString[0] = '\0';
 {
-exp->__anon1.member.memberType = 5;
-exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
+struct Symbol * back = functionType->__anon1.__anon2.thisClass;
+
+functionType->__anon1.__anon2.thisClass = (((void *)0));
+PrintType(functionType, typeString, 1, 1);
+functionType->__anon1.__anon2.thisClass = back;
 }
-else
+if(strstr(typeString, "thisclass"))
 {
-char structName[1024];
-struct Identifier * id = exp->__anon1.member.member;
-struct Expression * classExp = exp->__anon1.member.exp;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Declarator * decl;
 
-type->refCount++;
-FreeType(classExp->expType);
-classExp->expType = ProcessTypeString("ecere::com::Class", 0);
-strcpy(structName, "__ecereClassData_");
-FullClassNameCat(structName, type->__anon1._class->string, 0);
-exp->type = 9;
-exp->__anon1.member.member = id;
-exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->__anon1._class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
-FreeType(type);
-ProcessExpressionType(exp);
-return ;
-}
-}
-else
 {
-struct Symbol * classSym = FindClass(id->string);
+struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
 
-if(classSym)
+decl = SpecDeclFromString(typeString, specs, (((void *)0)));
+if(thisClass != (exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass ? exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass : exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass))
+thisClassParams = 0;
+ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
 {
-struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
+struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
 
-if(convertClass)
-revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
-}
-}
+thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
+ProcessDeclarator(decl, 1);
+thisClass = backupThisClass;
 }
-if(exp->__anon1.member.exp->destType)
-FreeType(exp->__anon1.member.exp->destType);
+thisClassParams = 1;
+functionType = ProcessType(specs, decl);
+functionType->refCount = 0;
+FinishTemplatesContext(context);
 {
-if(method && !method->_class->symbol)
-method->_class->symbol = FindClass(method->_class->fullName);
-if(prop && !prop->_class->symbol)
-prop->_class->symbol = FindClass(prop->_class->fullName);
-exp->__anon1.member.exp->destType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+struct Type * p, * op;
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1->thisClassFrom = type ? type->thisClassFrom : (((void *)0)), __ecereInstance1;
-});
+for(p = functionType->__anon1.__anon2.params.first, op = methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.params.first; p && op; p = p->next, op = op->next)
+{
+if(op->kind == 21)
+p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
 }
-if(prop)
+}
+if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
 {
-exp->__anon1.member.memberType = 1;
-if(!prop->dataType)
-ProcessPropertyType(prop);
-exp->expType = prop->dataType;
-if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
+functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
+}
+}
+FreeList(specs, (void *)(FreeSpecifier));
+FreeDeclarator(decl);
+}
+}
+}
+if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
 {
-struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+struct Type * type = functionType->__anon1.type;
 
-CopyTypeInto(type, exp->expType);
-type->refCount = 1;
-type->constant = 1;
-exp->expType = type;
+if(!functionType->refCount)
+{
+functionType->__anon1.type = (((void *)0));
+FreeType(functionType);
 }
-else if(prop->dataType)
-prop->dataType->refCount++;
+functionType = type;
 }
-else if(member)
-{
-if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
+if(functionType && functionType->kind != 11)
 {
-FreeExpContents(exp);
-exp->type = 0;
-exp->__anon1.__anon1.identifier = MkIdentifier("class");
-ProcessExpressionType(exp);
-return ;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
 }
-exp->__anon1.member.memberType = 3;
-DeclareStruct(curExternal, _class->fullName, 0, 1);
-if(member->_class != _class)
-DeclareStruct(curExternal, member->_class->fullName, 0, 1);
-if(!member->dataType)
+else if(functionType)
 {
-struct Context * context = SetupTemplatesContext(_class);
+unsigned int emptyParams = 0, noParams = 0;
+struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
+struct Type * type = functionType->__anon1.__anon2.params.first;
+struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
+int extra = 0;
+struct Location oldyylloc = yylloc;
 
-member->dataType = ProcessTypeString(member->dataTypeString, 0);
-FinishTemplatesContext(context);
-}
-exp->expType = member->dataType;
-if(member->dataType)
-member->dataType->refCount++;
-}
-else if(revConvert)
+if(!type)
+emptyParams = 1;
+if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
 {
-exp->__anon1.member.memberType = 4;
-exp->expType = MkClassType(revConvert->_class->fullName);
+e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
+e = e->next;
 }
-else if(method)
+if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
+{
+if(memberExp && memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType && memberExp->__anon1.member.exp->expType->kind == 19 && memberExp->__anon1.member.exp->expType->__anon1._class)
 {
+type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
+if(e)
 {
-exp->__anon1.member.memberType = 2;
+e->destType = type;
+e = e->next;
+type = functionType->__anon1.__anon2.params.first;
 }
-if(!method->dataType)
-ProcessMethodType(method);
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
-});
-exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
-exp->expType->__anon1.__anon3.usedClass = _class;
+else
+type->refCount = 0;
+}
+else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
+{
+type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
+type->byReference = functionType->byReference;
+type->typedByReference = functionType->typedByReference;
+if(e)
+{
+if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
+e = e->next;
+e->destType = type;
+e = e->next;
+type = functionType->__anon1.__anon2.params.first;
 }
-else if(!classProp)
-{
-if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
+else
+type->refCount = 0;
+}
+}
+if(type && type->kind == 0)
 {
-FreeExpContents(exp);
-exp->type = 0;
-exp->__anon1.__anon1.identifier = MkIdentifier("class");
-FreeType(exp->expType);
-exp->expType = MkClassType("ecere::com::Class");
-return ;
+noParams = 1;
+if(!type->refCount)
+FreeType(type);
+type = (((void *)0));
 }
-yylloc = exp->__anon1.member.member->loc;
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
-if(inCompiler)
-__ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
+for(; e; e = e->next)
+{
+if(!type && !emptyParams)
+{
+yylloc = e->loc;
+if(methodType && methodType->__anon1.__anon3.methodClass)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
+break;
 }
-if(_class && exp->expType)
+if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
 {
-struct __ecereNameSpace__ecere__com__Class * tClass;
+struct Type * templatedType = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
+int id = 0;
 
-tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
-while(tClass && !tClass->templateClass)
-tClass = tClass->base;
-if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
+if(_class && _class->templateArgs)
 {
-int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
-for(sClass = tClass; sClass; sClass = sClass->base)
+for(sClass = _class; sClass; sClass = sClass->base)
 {
-id = 0;
 if(sClass->templateClass)
 sClass = sClass->templateClass;
+id = 0;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
 {
-for(sClass = sClass->base; sClass; sClass = sClass->base)
-id += sClass->templateParams.count;
+struct __ecereNameSpace__ecere__com__Class * nextClass;
+
+for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
+{
+if(nextClass->templateClass)
+nextClass = nextClass->templateClass;
+id += nextClass->templateParams.count;
+}
 break;
 }
 id++;
@@ -17541,182 +17306,257 @@ id++;
 if(curParam)
 break;
 }
-if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
+}
+if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
 {
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
-struct Context * context = SetupTemplatesContext(tClass);
-unsigned int constant = exp->expType->constant;
-unsigned int passAsTemplate = 0;
-struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
-struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
+unsigned int constant = type->constant;
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
 
-if(t && t->kind == 8 && t->__anon1._class)
-thisClassFrom = t->__anon1._class->__anon1.registered;
-FreeType(t);
-passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
-FreeType(exp->expType);
-exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
-exp->expType->thisClassFrom = thisClassFrom;
-if(exp->expType->kind == 8 && constant)
-exp->expType->constant = 1;
-else if(exp->expType->kind == 13)
 {
-struct Type * t = exp->expType->__anon1.type;
+struct Context * context = SetupTemplatesContext(_class);
+
+templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+FinishTemplatesContext(context);
+}
+if(templatedType->kind == 8 && constant)
+templatedType->constant = 1;
+else if(templatedType->kind == 13)
+{
+struct Type * t = templatedType->__anon1.type;
 
 while(t->kind == 13)
 t = t->__anon1.type;
 if(constant)
 t->constant = constant;
 }
-if(exp->expType)
+e->destType = templatedType;
+if(templatedType)
 {
-if(exp->expType->kind == 21)
+templatedType->passAsTemplate = 1;
+}
+}
+else
 {
-FreeType(exp->expType);
-exp->expType = ReplaceThisClassType(_class);
+e->destType = type;
+if(type)
+type->refCount++;
 }
-if(passAsTemplate)
-exp->expType->passAsTemplate = 1;
-if(!exp->destType)
+}
+else
 {
-exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
-if(exp->destType->kind == 8 && constant)
-exp->destType->constant = 1;
-else if(exp->destType->kind == 13)
+if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
 {
-struct Type * t = exp->destType->__anon1.type;
+e->destType = type->prev;
+e->destType->refCount++;
+}
+else
+{
+e->destType = type;
+if(type)
+type->refCount++;
+}
+}
+if(type && type->kind != 14)
+{
+struct Type * next = type->next;
 
-while(t->kind == 13)
-t = t->__anon1.type;
-if(constant)
-t->constant = constant;
+if(!type->refCount)
+FreeType(type);
+type = next;
 }
-if(exp->destType->kind == 21)
+}
+if(type && type->kind != 14)
 {
-FreeType(exp->destType);
-exp->destType = ReplaceThisClassType(_class);
+if(methodType && methodType->__anon1.__anon3.methodClass)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
+else
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
+}
+yylloc = oldyylloc;
+if(type && !type->refCount)
+FreeType(type);
 }
+else
+{
+functionType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
+});
+if(exp->__anon1.call.exp->type == 0)
+{
+char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
+
+if(inCompiler)
+{
+struct Symbol * symbol;
+struct Location oldyylloc = yylloc;
+
+yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
+if(strstr(string, "__builtin_") == string)
+{
+if(exp->destType)
+{
+functionType->__anon1.__anon2.returnType = exp->destType;
+exp->destType->refCount++;
 }
 }
-FinishTemplatesContext(context);
+else
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
+symbol = __extension__ ({
+struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
+
+__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
+});
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
+if(strstr(symbol->string, "::"))
+globalContext->hasNameSpace = 1;
+yylloc = oldyylloc;
 }
 }
-else if(tClass && exp->expType->kind == 13 && exp->expType->__anon1.type && exp->expType->__anon1.type->kind == 20 && exp->expType->__anon1.type->__anon1.templateParameter->type == 0)
+else if(exp->__anon1.call.exp->type == 8)
 {
-int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * sClass;
+}
+else
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
+if(!functionType->__anon1.__anon2.returnType)
+{
+functionType->__anon1.__anon2.returnType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-for(sClass = tClass; sClass; sClass = sClass->base)
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
+});
+}
+}
+if(functionType && functionType->kind == 11)
 {
-id = 0;
-if(sClass->templateClass)
-sClass = sClass->templateClass;
-for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
+exp->expType = functionType->__anon1.__anon2.returnType;
+if(functionType->__anon1.__anon2.returnType)
+functionType->__anon1.__anon2.returnType->refCount++;
+if(!functionType->refCount)
+FreeType(functionType);
+}
+if(exp->__anon1.call.arguments)
 {
-if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
+for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
+ProcessExpressionType(e);
+}
+break;
+}
+case 8:
 {
-for(sClass = sClass->base; sClass; sClass = sClass->base)
-id += sClass->templateParams.count;
+struct Type * type;
+struct Location oldyylloc = yylloc;
+unsigned int thisPtr;
+struct Expression * checkExp = exp->__anon1.member.exp;
+
+while(checkExp)
+{
+if(checkExp->type == 11)
+checkExp = checkExp->__anon1.cast.exp;
+else if(checkExp->type == 5)
+checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
+else
 break;
 }
-id++;
+thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
+exp->thisPtr = thisPtr;
+if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
+{
+exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
 }
-if(curParam)
-break;
+ProcessExpressionType(exp->__anon1.member.exp);
+if(exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered->type == 0)
+{
+exp->isConstant = 0;
 }
-if(curParam)
+else
+exp->isConstant = exp->__anon1.member.exp->isConstant;
+type = exp->__anon1.member.exp->expType;
+yylloc = exp->loc;
+if(type && (type->kind == 20))
 {
-struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
-struct Context * context = SetupTemplatesContext(tClass);
-struct Type * basicType;
+struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
 
-basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
-if(basicType)
+if(_class)
 {
-if(basicType->kind == 21)
+for(param = _class->templateParams.first; param; param = param->next)
 {
-FreeType(basicType);
-basicType = ReplaceThisClassType(_class);
+if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
+break;
 }
-FreeType(exp->expType);
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
-});
-if(!exp->destType)
-{
-exp->destType = exp->expType;
-exp->destType->refCount++;
 }
+if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
 {
-struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
+
+if(argExp)
+{
+struct Expression * expMember = exp->__anon1.member.exp;
 struct Declarator * decl;
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+char thisClassTypeString[1024];
 
-decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
-*newExp = *exp;
-if(exp->destType)
-exp->destType->refCount++;
-if(exp->expType)
-exp->expType->refCount++;
-exp->type = 11;
-exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
-exp->__anon1.cast.exp = newExp;
-}
-}
-FinishTemplatesContext(context);
+FreeIdentifier(exp->__anon1.member.member);
+ProcessExpressionType(argExp);
+{
+char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
+
+if(colon)
+{
+memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
+thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
 }
+else
+strcpy(thisClassTypeString, _class->fullName);
 }
-else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
+decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
+exp->expType = ProcessType(specs, decl);
+if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
 {
 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
-
-if(expClass)
-{
 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
-int p = 0;
 int paramCount = 0;
 int lastParam = -1;
 char templateString[1024];
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
 
 sprintf(templateString, "%s<", expClass->templateClass->fullName);
-while(cClass != expClass)
+for(cClass = expClass; cClass; cClass = cClass->base)
 {
-struct __ecereNameSpace__ecere__com__Class * sClass;
+int p = 0;
 
-for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
-;
-cClass = sClass;
 for(param = cClass->templateParams.first; param; param = param->next)
 {
-struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
-int cp = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
+int id = p;
+struct __ecereNameSpace__ecere__com__Class * sClass;
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
 
-while(cClassCur != tClass && !paramCur)
+for(sClass = cClass->base; sClass; sClass = sClass->base)
+id += sClass->templateParams.count;
+arg = expClass->templateArgs[id];
+for(sClass = _class; sClass; sClass = sClass->base)
 {
-struct __ecereNameSpace__ecere__com__Class * sClassCur;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
+int p = 0;
+struct __ecereNameSpace__ecere__com__Class * nextClass;
 
-for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
-;
-cClassCur = sClassCur;
-for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
+for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
+p += nextClass->templateParams.count;
+for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
 {
-if(!strcmp(paramCur->name, param->name))
+if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
 {
+if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+{
+arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
+arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
 break;
 }
-cp++;
 }
 }
-if(paramCur && paramCur->type == 0)
-arg = tClass->templateArgs[cp];
-else
-arg = expClass->templateArgs[p];
+}
 {
 char argument[256];
 
@@ -17749,7 +17589,12 @@ break;
 case 0:
 {
 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+{
+if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
+strcat(argument, thisClassTypeString);
+else
 strcat(argument, arg.__anon1.__anon1.dataTypeString);
+}
 break;
 }
 }
@@ -17757,646 +17602,581 @@ if(argument[0])
 {
 if(paramCount)
 strcat(templateString, ", ");
-if(lastParam != p - 1)
-{
-strcat(templateString, param->name);
-strcat(templateString, " = ");
-}
-strcat(templateString, argument);
-paramCount++;
-lastParam = p;
-}
-}
-p++;
-}
-}
-{
-int len = strlen(templateString);
-
-if(templateString[len - 1] == '>')
-templateString[len++] = ' ';
-templateString[len++] = '>';
-templateString[len++] = '\0';
-}
-FreeType(exp->expType);
-{
-struct Context * context = SetupTemplatesContext(tClass);
-
-exp->expType = ProcessTypeString(templateString, 0);
-FinishTemplatesContext(context);
-}
-}
-}
-}
-}
-else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "undefined class %s\n", (((void *)0))), (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->string : (type->__anon1._class ? type->__anon1._class->string : (((void *)0)))) : "(null)");
-}
-else if(type && (type->kind == 9 || type->kind == 10))
-{
-struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
-
-if(memberType)
-{
-exp->expType = memberType;
-if(memberType)
-memberType->refCount++;
-}
-}
-else
-{
-char expString[10240];
-
-expString[0] = '\0';
-if(inCompiler)
-{
-PrintExpression(exp, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-}
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
-}
-if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
-{
-if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
-{
-struct Identifier * id = exp->__anon1.member.member;
-struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
-
-if(_class)
-{
-FreeType(exp->expType);
-exp->expType = ReplaceThisClassType(_class);
-}
-}
-}
-yylloc = oldyylloc;
-break;
-}
-case 9:
-{
-struct Type * destType = exp->destType;
-
-if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
-{
-exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
-}
-exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
-exp->type = 8;
-if(destType)
-destType->count++;
-ProcessExpressionType(exp);
-if(destType)
-destType->count--;
-break;
-}
-case 15:
-{
-struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
-
-if(classSym && classSym->__anon1.registered)
-{
-if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
-{
-char name[1024];
-struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
-
-name[0] = '\0';
-DeclareStruct(curExternal, classSym->string, 0, 1);
-FreeSpecifier(exp->__anon1._class);
-FullClassNameCat(name, classSym->string, 0);
-if(b->offset == 0)
-{
-exp->type = 10;
-exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
-}
-else
-{
-struct Expression * e;
-
-exp->type = 4;
-if(b->structSize == b->offset)
-exp->__anon1.op.exp1 = MkExpConstant("0");
-else
-exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
-exp->__anon1.op.op = '+';
-e = exp;
-while(b->offset != 0)
-{
-struct Symbol * sym;
-struct Expression * typeSize;
-
-b = b->base;
-sym = FindClass(b->fullName);
-name[0] = '\0';
-DeclareStruct(curExternal, sym->string, 0, 1);
-FullClassNameCat(name, sym->string, 0);
-if(b->structSize == b->offset)
-typeSize = MkExpConstant("0");
-else
-typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
-e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
-e = e->__anon1.op.exp2;
-}
-}
-}
-else
-{
-if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
+if(lastParam != p - 1)
 {
-FreeSpecifier(exp->__anon1._class);
-exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
-exp->type = 2;
+strcat(templateString, param->name);
+strcat(templateString, " = ");
 }
-else
-{
-char className[1024];
-
-strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 1);
-DeclareClass(curExternal, classSym, className);
-FreeExpContents(exp);
-exp->type = 9;
-exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
-exp->__anon1.member.member = MkIdentifier("structSize");
+strcat(templateString, argument);
+paramCount++;
+lastParam = p;
 }
+p++;
 }
 }
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
-});
-break;
 }
-case 10:
 {
-struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
-
-exp->expType = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+int len = strlen(templateString);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
-});
-exp->isConstant = 1;
-DeclareType(curExternal, type, 1, 0);
-FreeType(type);
-break;
+if(templateString[len - 1] == '>')
+templateString[len++] = ' ';
+templateString[len++] = '>';
+templateString[len++] = '\0';
 }
-case 11:
-{
-struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
-
-type->count = 1;
-FreeType(exp->__anon1.cast.exp->destType);
-exp->__anon1.cast.exp->destType = type;
-type->refCount++;
-type->casted = 1;
-ProcessExpressionType(exp->__anon1.cast.exp);
-type->casted = 0;
-type->count = 0;
-exp->expType = type;
-if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
 {
-void * prev = exp->prev, * next = exp->next;
-struct Type * expType = exp->__anon1.cast.exp->destType;
-struct Expression * castExp = exp->__anon1.cast.exp;
-struct Type * destType = exp->destType;
+struct Context * context = SetupTemplatesContext(_class);
 
-if(expType)
-expType->refCount++;
 FreeType(exp->expType);
-FreeTypeName(exp->__anon1.cast.typeName);
-*exp = *castExp;
-FreeType(exp->expType);
-FreeType(exp->destType);
-exp->expType = expType;
-exp->destType = destType;
-((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
-exp->prev = prev;
-exp->next = next;
+exp->expType = ProcessTypeString(templateString, 0);
+FinishTemplatesContext(context);
 }
-else
-{
-exp->isConstant = exp->__anon1.cast.exp->isConstant;
 }
-break;
+if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
+expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
+exp->type = 5;
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), expMember))), '+', MkExpOp(MkExpMember(MkExpMember(argExp, MkIdentifier("member")), MkIdentifier("offset")), '+', MkExpMember(MkExpMember(MkExpMember(CopyExpression(argExp), MkIdentifier("member")), MkIdentifier("_class")), MkIdentifier("offset")))))))));
 }
-case 33:
+}
+else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
 {
-struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
-
-exp->expType = type;
-break;
+type = ProcessTemplateParameterType(type->__anon1.templateParameter);
 }
-case 34:
+}
+if(type && (type->kind == 20))
+;
+else if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15 || type->kind == 4 || type->kind == 2 || type->kind == 5 || type->kind == 1 || type->kind == 24 || type->kind == 22 || type->kind == 23 || type->kind == 6 || type->kind == 7 || (type->kind == 13 && type->__anon1.type->kind == 1)))
 {
-struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
+struct Identifier * id = exp->__anon1.member.member;
+int typeKind = type->kind;
+struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
 
-ProcessExpressionType(exp->__anon1.vaArg.exp);
-exp->expType = type;
-break;
+if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
+{
+_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
+typeKind = 8;
 }
-case 12:
+if(id)
 {
-struct Expression * e;
-struct Type * t = exp->destType;
-
-if(t && !exp->destType->casted)
+if(typeKind == 3 || typeKind == 15)
+_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
+else if(!_class)
 {
-t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-CopyTypeInto(t, exp->destType);
-t->count = 0;
+if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
+{
+_class = type->__anon1._class->__anon1.registered;
 }
-else if(t)
-t->refCount++;
-exp->isConstant = 1;
-FreeType(exp->__anon1.cond.cond->destType);
-exp->__anon1.cond.cond->destType = MkClassType("bool");
-exp->__anon1.cond.cond->destType->truth = 1;
-ProcessExpressionType(exp->__anon1.cond.cond);
-if(!exp->__anon1.cond.cond->isConstant)
-exp->isConstant = 0;
-for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
+else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
 {
-if(!e->next)
+_class = FindClass("char *")->__anon1.registered;
+}
+else if(type->kind == 13)
 {
-FreeType(e->destType);
-e->destType = t;
-if(e->destType)
-e->destType->refCount++;
+_class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
+FreeType(exp->expType);
+exp->expType = ProcessTypeString("uintptr", 0);
+exp->byReference = 1;
 }
-ProcessExpressionType(e);
-if(!e->next)
+else
 {
-exp->expType = e->expType;
-if(e->expType)
-e->expType->refCount++;
+char string[1024] = "";
+struct Symbol * classSym;
+
+PrintTypeNoConst(type, string, 0, 1);
+classSym = FindClass(string);
+if(classSym)
+_class = classSym->__anon1.registered;
 }
-if(!e->isConstant)
-exp->isConstant = 0;
 }
-FreeType(exp->__anon1.cond.elseExp->destType);
-exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
-if(exp->__anon1.cond.elseExp->destType)
-exp->__anon1.cond.elseExp->destType->refCount++;
-ProcessExpressionType(exp->__anon1.cond.elseExp);
-if(!exp->__anon1.cond.elseExp->isConstant)
-exp->isConstant = 0;
-FreeType(t);
-break;
 }
-case 23:
-{
-if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
+if(_class && id)
 {
-struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
+struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
+struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
+struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
+struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
+struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
 
-if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
+if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
+exp->__anon1.member.memberType = 1;
+if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
+if(typeKind != 19)
 {
-((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
-if(exp->destType)
-exp->destType->refCount++;
-}
-ProcessStatement(exp->__anon1.compound);
-exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
-if(exp->expType)
-exp->expType->refCount++;
+if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
+{
+member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
+if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
+{
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
+if(prop)
+member = (((void *)0));
 }
-break;
+if(!member && !prop)
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
+if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
+exp->__anon1.member.thisPtr = 1;
 }
-case 24:
+else
 {
-struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
+unsigned int useMemberForNonConst = 0;
 
-if(spec && spec->type == 1)
+if(!id->classSym)
 {
-exp->expType = MkClassType(spec->__anon1.__anon1.name);
-exp->expType->kind = 19;
-exp->byReference = 1;
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
+useMemberForNonConst = prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
+if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
+member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
 }
-else
+if((!prop || useMemberForNonConst) && !member)
 {
-exp->expType = MkClassType("ecere::com::Class");
-exp->byReference = 1;
+method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
+if(!method)
+{
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
+useMemberForNonConst |= prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
+if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
+member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
 }
-break;
 }
-case 25:
+if(member && prop)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
-
-if(_class)
+if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
+prop = (((void *)0));
+else
+member = (((void *)0));
+}
+}
+}
+if(!prop && !member && !method)
+method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
+if(!prop && !member && !method)
+{
+if(typeKind == 19)
+{
+classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
+if(classProp)
+{
+exp->__anon1.member.memberType = 5;
+exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
+}
+else
 {
-struct Identifier * id = exp->__anon1.classData.id;
 char structName[1024];
-struct Expression * classExp;
+struct Identifier * id = exp->__anon1.member.member;
+struct Expression * classExp = exp->__anon1.member.exp;
 
+type->refCount++;
+FreeType(classExp->expType);
+classExp->expType = ProcessTypeString("ecere::com::Class", 0);
 strcpy(structName, "__ecereClassData_");
-FullClassNameCat(structName, _class->fullName, 0);
+FullClassNameCat(structName, type->__anon1._class->string, 0);
 exp->type = 9;
 exp->__anon1.member.member = id;
-if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
-classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
-else
-classExp = MkExpIdentifier(MkIdentifier("class"));
-exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->__anon1._class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+FreeType(type);
 ProcessExpressionType(exp);
 return ;
 }
-break;
 }
-case 35:
+else
 {
-struct Type * type = (((void *)0));
-const char * typeString = (((void *)0));
-char typeStringBuf[1024];
+struct Symbol * classSym = FindClass(id->string);
 
-if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(exp->destType->__anon1._class->__anon1.registered, containerClass))
+if(classSym)
 {
-struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
+struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
 
-typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
+if(convertClass)
+revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
 }
-else if(exp->__anon1.list)
+}
+}
+if(exp->__anon1.member.exp->destType)
+FreeType(exp->__anon1.member.exp->destType);
 {
-struct Expression * e;
+if(method && !method->_class->symbol)
+method->_class->symbol = FindClass(method->_class->fullName);
+if(prop && !prop->_class->symbol)
+prop->_class->symbol = FindClass(prop->_class->fullName);
+exp->__anon1.member.exp->destType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-for(e = (*exp->__anon1.list).first; e; e = e->next)
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1->thisClassFrom = type ? type->thisClassFrom : (((void *)0)), __ecereInstance1;
+});
+}
+if(prop)
 {
-ProcessExpressionType(e);
-if(e->expType)
+exp->__anon1.member.memberType = 1;
+if(!prop->dataType)
+ProcessPropertyType(prop);
+exp->expType = prop->dataType;
+if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
 {
-if(!type)
+struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+CopyTypeInto(type, exp->expType);
+type->refCount = 1;
+type->constant = 1;
+exp->expType = type;
+}
+else if(prop->dataType)
+prop->dataType->refCount++;
+}
+else if(member)
 {
-type = e->expType;
-type->refCount++;
+if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
+{
+FreeExpContents(exp);
+exp->type = 0;
+exp->__anon1.__anon1.identifier = MkIdentifier("class");
+ProcessExpressionType(exp);
+return ;
 }
-else
+exp->__anon1.member.memberType = 3;
+DeclareStruct(curExternal, _class->fullName, 0, 1);
+if(member->_class != _class)
+DeclareStruct(curExternal, member->_class->fullName, 0, 1);
+if(!member->dataType)
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+struct Context * context = SetupTemplatesContext(_class);
+
+member->dataType = ProcessTypeString(member->dataTypeString, 0);
+FinishTemplatesContext(context);
+}
+exp->expType = member->dataType;
+if(member->dataType)
+member->dataType->refCount++;
+}
+else if(revConvert)
 {
-FreeType(type);
-type = e->expType;
-e->expType = (((void *)0));
-e = (*exp->__anon1.list).first;
-ProcessExpressionType(e);
-if(e->expType)
+exp->__anon1.member.memberType = 4;
+exp->expType = MkClassType(revConvert->_class->fullName);
+}
+else if(method)
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
 {
-FreeType(e->expType);
-e->expType = (((void *)0));
-FreeType(type);
-type = (((void *)0));
-break;
+exp->__anon1.member.memberType = 2;
 }
+if(!method->dataType)
+ProcessMethodType(method);
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
+});
+exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
+exp->expType->__anon1.__anon3.usedClass = _class;
 }
+else if(!classProp)
+{
+if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
+{
+FreeExpContents(exp);
+exp->type = 0;
+exp->__anon1.__anon1.identifier = MkIdentifier("class");
+FreeType(exp->expType);
+exp->expType = MkClassType("ecere::com::Class");
+return ;
 }
+yylloc = exp->__anon1.member.member->loc;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
+if(inCompiler)
+__ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
 }
-if(e->expType)
+if(_class && exp->expType)
 {
-FreeType(e->expType);
-e->expType = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * tClass;
+
+tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
+while(tClass && !tClass->templateClass)
+tClass = tClass->base;
+if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
+{
+int id = 0;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * sClass;
+
+for(sClass = tClass; sClass; sClass = sClass->base)
+{
+id = 0;
+if(sClass->templateClass)
+sClass = sClass->templateClass;
+for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
+{
+if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
+{
+for(sClass = sClass->base; sClass; sClass = sClass->base)
+id += sClass->templateParams.count;
+break;
 }
+id++;
 }
+if(curParam)
+break;
 }
-if(type)
+if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
 {
-typeStringBuf[0] = '\0';
-PrintTypeNoConst(type, typeStringBuf, 0, 1);
-typeString = typeStringBuf;
-FreeType(type);
-type = (((void *)0));
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
+struct Context * context = SetupTemplatesContext(tClass);
+unsigned int constant = exp->expType->constant;
+unsigned int passAsTemplate = 0;
+struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
+struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
+
+if(t && t->kind == 8 && t->__anon1._class)
+thisClassFrom = t->__anon1._class->__anon1.registered;
+FreeType(t);
+passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
+FreeType(exp->expType);
+exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+exp->expType->thisClassFrom = thisClassFrom;
+if(exp->expType->kind == 8 && constant)
+exp->expType->constant = 1;
+else if(exp->expType->kind == 13)
+{
+struct Type * t = exp->expType->__anon1.type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
 }
+if(exp->expType)
+{
+if(exp->expType->kind == 21)
+{
+FreeType(exp->expType);
+exp->expType = ReplaceThisClassType(_class);
 }
-if(typeString)
+if(passAsTemplate)
+exp->expType->passAsTemplate = 1;
+if(!exp->destType)
 {
-char templateString[1024];
-struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
-struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Expression * expExt;
-struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
-
-sprintf(templateString, "Container<%s>", typeString);
-if(exp->__anon1.list)
+exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+if(exp->destType->kind == 8 && constant)
+exp->destType->constant = 1;
+else if(exp->destType->kind == 13)
 {
-struct Expression * e;
+struct Type * t = exp->destType->__anon1.type;
 
-type = ProcessTypeString(typeString, 0);
-while((e = (*exp->__anon1.list).first))
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
+}
+if(exp->destType->kind == 21)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
-e->destType = type;
-type->refCount++;
-ProcessExpressionType(e);
-ListAdd(initializers, MkInitializerAssignment(e));
+FreeType(exp->destType);
+exp->destType = ReplaceThisClassType(_class);
 }
-FreeType(type);
-(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
 }
-DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
-ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
-struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
-
-__ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
-})));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
-exp->expType = ProcessTypeString(templateString, 0);
-exp->type = 5;
-exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
-ProcessExpressionType(expExt);
 }
-else
-{
-exp->expType = ProcessTypeString("Container", 0);
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
+FinishTemplatesContext(context);
+}
 }
+else if(tClass && exp->expType->kind == 13 && exp->expType->__anon1.type && exp->expType->__anon1.type->kind == 20 && exp->expType->__anon1.type->__anon1.templateParameter->type == 0)
+{
+int id = 0;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * sClass;
+
+for(sClass = tClass; sClass; sClass = sClass->base)
+{
+id = 0;
+if(sClass->templateClass)
+sClass = sClass->templateClass;
+for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
+{
+if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
+{
+for(sClass = sClass->base; sClass; sClass = sClass->base)
+id += sClass->templateParams.count;
 break;
 }
+id++;
 }
-if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
-{
-FreeType(exp->expType);
-exp->expType = ReplaceThisClassType(thisClass);
+if(curParam)
+break;
 }
-if(exp->expType && (exp->expType->kind == 9 || exp->expType->kind == 10 || exp->expType->kind == 15) && !exp->expType->__anon1.__anon1.members.first && exp->expType->__anon1.__anon1.enumName)
+if(curParam)
 {
-struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
+struct Context * context = SetupTemplatesContext(tClass);
+struct Type * basicType;
 
-if(symbol)
+basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+if(basicType)
 {
-if(exp->expType->kind != 15)
+if(basicType->kind == 21)
 {
-struct Type * member;
-char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
-
-FreeType(exp->expType);
-exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-exp->expType->kind = symbol->type->kind;
-exp->expType->refCount++;
-exp->expType->__anon1.__anon1.enumName = enumName;
-exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
-for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
-member->refCount++;
+FreeType(basicType);
+basicType = ReplaceThisClassType(_class);
 }
-else
-{
-struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
+FreeType(exp->expType);
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
+});
+if(!exp->destType)
 {
-struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__sys__NamedLink64)), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
+exp->destType = exp->expType;
+exp->destType->refCount++;
+}
+{
+struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Declarator * decl;
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
+decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
+*newExp = *exp;
+if(exp->destType)
+exp->destType->refCount++;
+if(exp->expType)
+exp->expType->refCount++;
+exp->type = 11;
+exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
+exp->__anon1.cast.exp = newExp;
 }
 }
+FinishTemplatesContext(context);
 }
 }
-yylloc = exp->loc;
-if(exp->destType && (exp->destType->kind == 18))
-;
-else if(exp->destType && !exp->destType->keepCast)
-{
-if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
-exp->needTemplateCast = 1;
-if(exp->destType->kind == 0)
-;
-else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
+else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
 {
-unsigned int invalidCast = 0;
+struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
 
-if(inCompiler && exp->destType->count && exp->expType)
+if(expClass)
 {
-struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
+int p = 0;
+int paramCount = 0;
+int lastParam = -1;
+char templateString[1024];
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
 
-if(c1 && c1->type != 1)
-c1 = (((void *)0));
-if(c2 && c2->type != 1)
-c2 = (((void *)0));
-if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
-invalidCast = 1;
-}
-if(!exp->destType->count || unresolved || invalidCast)
-{
-if(!exp->expType)
-{
-yylloc = exp->loc;
-if(exp->destType->kind != 14)
+sprintf(templateString, "%s<", expClass->templateClass->fullName);
+while(cClass != expClass)
 {
-char type2[1024];
+struct __ecereNameSpace__ecere__com__Class * sClass;
 
-type2[0] = '\0';
-if(inCompiler)
+for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
+;
+cClass = sClass;
+for(param = cClass->templateParams.first; param; param = param->next)
 {
-char expString[10240];
+struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
+int cp = 0;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
+struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
 
-expString[0] = '\0';
-PrintType(exp->destType, type2, 0, 1);
-if(inCompiler)
-{
-PrintExpression(exp, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-}
-if(unresolved)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
-else if(exp->type != 16)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
-}
-}
-else
+while(cClassCur != tClass && !paramCur)
 {
-char expString[10240];
+struct __ecereNameSpace__ecere__com__Class * sClassCur;
 
-expString[0] = '\0';
-if(inCompiler)
+for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
+;
+cClassCur = sClassCur;
+for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
 {
-PrintExpression(exp, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
+if(!strcmp(paramCur->name, param->name))
+{
+break;
 }
-if(unresolved)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
-else if(exp->type != 16)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
+cp++;
 }
 }
+if(paramCur && paramCur->type == 0)
+arg = tClass->templateArgs[cp];
 else
+arg = expClass->templateArgs[p];
 {
-char type1[1024];
-char type2[1024];
+char argument[256];
 
-type1[0] = '\0';
-type2[0] = '\0';
-if(inCompiler)
+argument[0] = '\0';
+switch(param->type)
 {
-PrintType(exp->expType, type1, 0, 1);
-PrintType(exp->destType, type2, 0, 1);
-}
-if(exp->destType->truth && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && !strcmp(exp->destType->__anon1._class->__anon1.registered->name, "bool") && exp->expType->kind != 0 && exp->expType->kind != 9 && exp->expType->kind != 10 && (exp->expType->kind != 8 || exp->expType->classObjectType || (exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type != 1)))
-;
-else
+case 2:
 {
-char expString[10240];
+char expString[1024];
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
+struct Expression * exp;
+char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
 
+exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
+(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
+ProcessExpressionType(exp);
+ComputeExpression(exp);
 expString[0] = '\0';
-if(inCompiler)
-{
 PrintExpression(exp, expString);
-__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
+strcat(argument, expString);
+FreeExpression(exp);
+break;
 }
-if(!sourceFile || (!strstr(sourceFile, "src\\lexer.ec") && !strstr(sourceFile, "src/lexer.ec") && !strstr(sourceFile, "src\\grammar.ec") && !strstr(sourceFile, "src/grammar.ec") && !strstr(sourceFile, "src\\type.ec") && !strstr(sourceFile, "src/type.ec") && !strstr(sourceFile, "src\\expression.ec") && !strstr(sourceFile, "src/expression.ec")))
+case 1:
 {
-if(invalidCast)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
-else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
+strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
+break;
 }
-if(!inCompiler)
+case 0:
 {
-FreeType(exp->expType);
-exp->destType->refCount++;
-exp->expType = exp->destType;
+if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+strcat(argument, arg.__anon1.__anon1.dataTypeString);
+break;
+}
+}
+if(argument[0])
+{
+if(paramCount)
+strcat(templateString, ", ");
+if(lastParam != p - 1)
+{
+strcat(templateString, param->name);
+strcat(templateString, " = ");
 }
+strcat(templateString, argument);
+paramCount++;
+lastParam = p;
 }
 }
+p++;
 }
 }
-else if(exp->destType && exp->destType->kind == 13 && exp->destType->__anon1.type && exp->destType->__anon1.type->kind == 11 && exp->expType && (exp->expType->kind == 11 || exp->expType->kind == 16))
 {
-struct Expression * nbExp = GetNonBracketsExp(exp);
+int len = strlen(templateString);
 
-if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
+if(templateString[len - 1] == '>')
+templateString[len++] = ' ';
+templateString[len++] = '>';
+templateString[len++] = '\0';
+}
+FreeType(exp->expType);
 {
-struct Expression * e = MoveExpContents(exp);
+struct Context * context = SetupTemplatesContext(tClass);
 
-exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
-exp->type = 11;
-exp->__anon1.cast.exp->destType = exp->destType;
-if(exp->destType)
-exp->destType->refCount++;
-exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
+exp->expType = ProcessTypeString(templateString, 0);
+FinishTemplatesContext(context);
+}
 }
 }
 }
-else if(unresolved)
+}
+else
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "undefined class %s\n", (((void *)0))), (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->string : (type->__anon1._class ? type->__anon1._class->string : (((void *)0)))) : "(null)");
+}
+else if(type && (type->kind == 9 || type->kind == 10))
 {
-if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s::%s\n", (((void *)0))), exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name, exp->__anon1.__anon1.identifier->string);
-else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
+struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
+
+if(memberType)
+{
+exp->expType = memberType;
+if(memberType)
+memberType->refCount++;
 }
-else if(!exp->expType && exp->type != 16)
+}
+else
 {
 char expString[10240];
 
@@ -18406,767 +18186,991 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
 }
-if(inCompiler)
-ApplyAnyObjectLogic(exp);
-if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1 && exp->destType->kind != 24)))
+if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
 {
-exp->byReference = 1;
+if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
+{
+struct Identifier * id = exp->__anon1.member.member;
+struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
+
+if(_class)
+{
+FreeType(exp->expType);
+exp->expType = ReplaceThisClassType(_class);
+}
+}
 }
 yylloc = oldyylloc;
+break;
 }
+case 9:
+{
+struct Type * destType = exp->destType;
 
-static void ProcessFunction(struct FunctionDefinition * function)
+if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
 {
-struct Identifier * id = GetDeclId(function->declarator);
-struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
-struct Type * type = symbol ? symbol->type : (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
-struct Context * oldTopContext = topContext;
+exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
+}
+exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
+exp->type = 8;
+if(destType)
+destType->count++;
+ProcessExpressionType(exp);
+if(destType)
+destType->count--;
+break;
+}
+case 15:
+{
+struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
 
-yylloc = function->loc;
-if(type && type->__anon1.__anon2.thisClass)
+if(classSym && classSym->__anon1.registered)
 {
-struct Symbol * classSym = type->__anon1.__anon2.thisClass;
-struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
-char className[1024];
-char structName[1024];
-struct Declarator * funcDecl;
-struct Symbol * thisSymbol;
-unsigned int typedObject = 0;
+if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
+{
+char name[1024];
+struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
 
-if(_class && !_class->base)
+name[0] = '\0';
+DeclareStruct(curExternal, classSym->string, 0, 1);
+FreeSpecifier(exp->__anon1._class);
+FullClassNameCat(name, classSym->string, 0);
+if(b->offset == 0)
 {
-_class = currentClass;
-if(_class && !_class->symbol)
-_class->symbol = FindClass(_class->fullName);
-classSym = _class ? _class->symbol : (((void *)0));
-typedObject = 1;
+exp->type = 10;
+exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
 }
-thisClass = _class;
-if(inCompiler && _class)
-{
-if(type->kind == 11)
+else
 {
-if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
+struct Expression * e;
+
+exp->type = 4;
+if(b->structSize == b->offset)
+exp->__anon1.op.exp1 = MkExpConstant("0");
+else
+exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
+exp->__anon1.op.op = '+';
+e = exp;
+while(b->offset != 0)
 {
-struct Type * param = symbol->type->__anon1.__anon2.params.first;
+struct Symbol * sym;
+struct Expression * typeSize;
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
-FreeType(param);
+b = b->base;
+sym = FindClass(b->fullName);
+name[0] = '\0';
+DeclareStruct(curExternal, sym->string, 0, 1);
+FullClassNameCat(name, sym->string, 0);
+if(b->structSize == b->offset)
+typeSize = MkExpConstant("0");
+else
+typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
+e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
+e = e->__anon1.op.exp2;
 }
-if(type->classObjectType != 1)
-{
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
-symbol->type->__anon1.__anon2.staticMethod = 1;
-symbol->type->__anon1.__anon2.thisClass = (((void *)0));
-symbol->type->extraParam = 0;
 }
 }
-strcpy(className, "__ecereClass_");
-FullClassNameCat(className, _class->fullName, 1);
-structName[0] = (char)0;
-FullClassNameCat(structName, _class->fullName, 0);
-funcDecl = GetFuncDecl(function->declarator);
-if(funcDecl)
+else
 {
-if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
+if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
 {
-struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
-
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
+FreeSpecifier(exp->__anon1._class);
+exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
+exp->type = 2;
+}
+else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
-FreeTypeName(param);
+char className[1024];
+
+strcpy(className, "__ecereClass_");
+FullClassNameCat(className, classSym->string, 1);
+DeclareClass(curExternal, classSym, className);
+FreeExpContents(exp);
+exp->type = 9;
+exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
+exp->__anon1.member.member = MkIdentifier("structSize");
 }
 }
-if(!function->propertyNoThis)
-{
-struct TypeName * thisParam = (((void *)0));
+}
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-if(type->classObjectType != 1)
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
+});
+break;
+}
+case 10:
 {
-thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
-if(!funcDecl->__anon1.function.parameters)
-funcDecl->__anon1.function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
+struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
+
+exp->expType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
+});
+exp->isConstant = 1;
+DeclareType(curExternal, type, 1, 0);
+FreeType(type);
+break;
 }
-if(typedObject)
+case 11:
 {
-if(type->classObjectType != 1)
+struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
+
+type->count = 1;
+FreeType(exp->__anon1.cast.exp->destType);
+exp->__anon1.cast.exp->destType = type;
+type->refCount++;
+type->casted = 1;
+ProcessExpressionType(exp->__anon1.cast.exp);
+type->casted = 0;
+type->count = 0;
+exp->expType = type;
+if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
 {
-if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
-thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
-}
-thisParam = __extension__ ({
-struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
+void * prev = exp->prev, * next = exp->next;
+struct Type * expType = exp->__anon1.cast.exp->destType;
+struct Expression * castExp = exp->__anon1.cast.exp;
+struct Type * destType = exp->destType;
 
-__ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
-});
-DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
+if(expType)
+expType->refCount++;
+FreeType(exp->expType);
+FreeTypeName(exp->__anon1.cast.typeName);
+*exp = *castExp;
+FreeType(exp->expType);
+FreeType(exp->destType);
+exp->expType = expType;
+exp->destType = destType;
+((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
+exp->prev = prev;
+exp->next = next;
 }
+else
+{
+exp->isConstant = exp->__anon1.cast.exp->isConstant;
 }
+break;
 }
-if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
+case 33:
 {
-struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
+struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
 
-funcDecl = GetFuncDecl(initDecl->declarator);
-if(funcDecl)
+exp->expType = type;
+break;
+}
+case 34:
+{
+struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
+
+ProcessExpressionType(exp->__anon1.vaArg.exp);
+exp->expType = type;
+break;
+}
+case 12:
+{
+struct Expression * e;
+struct Type * t = exp->destType;
+
+if(t && !exp->destType->casted)
+{
+t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+CopyTypeInto(t, exp->destType);
+t->count = 0;
+}
+else if(t)
+t->refCount++;
+exp->isConstant = 1;
+FreeType(exp->__anon1.cond.cond->destType);
+exp->__anon1.cond.cond->destType = MkClassType("bool");
+exp->__anon1.cond.cond->destType->truth = 1;
+ProcessExpressionType(exp->__anon1.cond.cond);
+if(!exp->__anon1.cond.cond->isConstant)
+exp->isConstant = 0;
+for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
 {
-if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
+if(!e->next)
 {
-struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
-
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
+FreeType(e->destType);
+e->destType = t;
+if(e->destType)
+e->destType->refCount++;
+}
+ProcessExpressionType(e);
+if(!e->next)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
-FreeTypeName(param);
+exp->expType = e->expType;
+if(e->expType)
+e->expType->refCount++;
 }
+if(!e->isConstant)
+exp->isConstant = 0;
 }
-if(type->classObjectType != 1)
+FreeType(exp->__anon1.cond.elseExp->destType);
+exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
+if(exp->__anon1.cond.elseExp->destType)
+exp->__anon1.cond.elseExp->destType->refCount++;
+ProcessExpressionType(exp->__anon1.cond.elseExp);
+if(!exp->__anon1.cond.elseExp->isConstant)
+exp->isConstant = 0;
+FreeType(t);
+break;
+}
+case 23:
 {
-if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
+if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
 {
-struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
+struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
 
-if(!funcDecl->__anon1.function.parameters)
-funcDecl->__anon1.function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
-}
-}
+if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
+{
+((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
+if(exp->destType)
+exp->destType->refCount++;
 }
+ProcessStatement(exp->__anon1.compound);
+exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
+if(exp->expType)
+exp->expType->refCount++;
 }
+break;
 }
-if(function->body)
-{
-if(type->classObjectType != 1)
+case 24:
 {
-thisSymbol = __extension__ ({
-struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
+struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
 
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
-});
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-if(typedObject && thisSymbol->type)
+if(spec && spec->type == 1)
 {
-thisSymbol->type->classObjectType = 2;
-thisSymbol->type->byReference = type->byReference;
-thisSymbol->type->typedByReference = type->byReference;
+exp->expType = MkClassType(spec->__anon1.__anon1.name);
+exp->expType->kind = 19;
+exp->byReference = 1;
 }
+else
+{
+exp->expType = MkClassType("ecere::com::Class");
+exp->byReference = 1;
 }
+break;
 }
-if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
+case 25:
 {
-struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
 
+if(_class)
 {
-struct __ecereNameSpace__ecere__com__Class * base;
+struct Identifier * id = exp->__anon1.classData.id;
+char structName[1024];
+struct Expression * classExp;
 
-for(base = _class; base && base->type != 1000; base = base->next)
-{
-for(member = base->membersAndProperties.first; member; member = member->next)
-if(!member->isProperty)
-break;
-if(member)
-break;
-}
+strcpy(structName, "__ecereClassData_");
+FullClassNameCat(structName, _class->fullName, 0);
+exp->type = 9;
+exp->__anon1.member.member = id;
+if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
+classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
+else
+classExp = MkExpIdentifier(MkIdentifier("class"));
+exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+ProcessExpressionType(exp);
+return ;
 }
-for(member = _class->membersAndProperties.first; member; member = member->next)
-if(!member->isProperty)
 break;
-if(member)
+}
+case 35:
 {
-char pointerName[1024];
-struct Declaration * decl;
-struct Initializer * initializer;
-struct Expression * exp, * bytePtr;
+struct Type * type = (((void *)0));
+const char * typeString = (((void *)0));
+char typeStringBuf[1024];
 
-strcpy(pointerName, "__ecerePointer_");
-FullClassNameCat(pointerName, _class->fullName, 0);
+if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(exp->destType->__anon1._class->__anon1.registered, containerClass))
 {
-char className[1024];
+struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
 
-strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 1);
-DeclareClass(curExternal, classSym, className);
+typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
 }
-bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
-if(_class->fixed)
+else if(exp->__anon1.list)
 {
 struct Expression * e;
 
-if(_class->offset && _class->offset == _class->base->structSize)
+for(e = (*exp->__anon1.list).first; e; e = e->next)
 {
-e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
 ProcessExpressionType(e);
+if(e->expType)
+{
+if(!type)
+{
+type = e->expType;
+type->refCount++;
 }
 else
 {
-char string[256];
-
-sprintf(string, "%d", _class->offset);
-e = MkExpConstant(string);
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+{
+FreeType(type);
+type = e->expType;
+e->expType = (((void *)0));
+e = (*exp->__anon1.list).first;
+ProcessExpressionType(e);
+if(e->expType)
+{
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
+{
+FreeType(e->expType);
+e->expType = (((void *)0));
+FreeType(type);
+type = (((void *)0));
+break;
 }
-exp = QBrackets(MkExpOp(bytePtr, '+', e));
 }
-else
+}
+}
+if(e->expType)
 {
-exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
+FreeType(e->expType);
+e->expType = (((void *)0));
 }
-exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
-exp->expType = __extension__ ({
-struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
-struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
-}), __ecereInstance2;
-});
-if(function->body)
+}
+}
+if(type)
 {
-yylloc = function->body->loc;
-initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
+typeStringBuf[0] = '\0';
+PrintTypeNoConst(type, typeStringBuf, 0, 1);
+typeString = typeStringBuf;
+FreeType(type);
+type = (((void *)0));
+}
+}
+if(typeString)
 {
-struct Context * prevContext = curContext;
-struct __ecereNameSpace__ecere__sys__OldList * list;
+char templateString[1024];
+struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
+struct Expression * expExt;
+struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 
-curContext = function->body->__anon1.compound.context;
-decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
-curContext = prevContext;
+sprintf(templateString, "Container<%s>", typeString);
+if(exp->__anon1.list)
+{
+struct Expression * e;
+
+type = ProcessTypeString(typeString, 0);
+while((e = (*exp->__anon1.list).first))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
+e->destType = type;
+type->refCount++;
+ProcessExpressionType(e);
+ListAdd(initializers, MkInitializerAssignment(e));
 }
-decl->symbol = (((void *)0));
-if(!function->body->__anon1.compound.declarations)
-function->body->__anon1.compound.declarations = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
+FreeType(type);
+(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
+}
+DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
+struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
+
+__ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
+})));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+exp->expType = ProcessTypeString(templateString, 0);
+exp->type = 5;
+exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
+ProcessExpressionType(expExt);
 }
+else
+{
+exp->expType = ProcessTypeString("Container", 0);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
 }
+break;
 }
 }
-else
-thisClass = (((void *)0));
-if(id)
+if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
+{
+FreeType(exp->expType);
+exp->expType = ReplaceThisClassType(thisClass);
+}
+if(exp->expType && (exp->expType->kind == 9 || exp->expType->kind == 10 || exp->expType->kind == 15) && !exp->expType->__anon1.__anon1.members.first && exp->expType->__anon1.__anon1.enumName)
 {
-FreeSpecifier(id->_class);
-id->_class = (((void *)0));
-if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
+struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
+
+if(symbol)
 {
-struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
+if(exp->expType->kind != 15)
+{
+struct Type * member;
+char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
 
-id = GetDeclId(initDecl->declarator);
-FreeSpecifier(id->_class);
-id->_class = (((void *)0));
-}
+FreeType(exp->expType);
+exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+exp->expType->kind = symbol->type->kind;
+exp->expType->refCount++;
+exp->expType->__anon1.__anon1.enumName = enumName;
+exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
+for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
+member->refCount++;
 }
-if(function->body)
-topContext = function->body->__anon1.compound.context;
+else
 {
-struct FunctionDefinition * oldFunction = curFunction;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
 
-curFunction = function;
-if(function->body)
-ProcessStatement(function->body);
-if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
+for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
 {
-struct Statement * prevCompound = curCompound;
-struct Context * prevContext = curContext;
-struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
+struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__sys__NamedLink64)), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
 
-if(!function->body->__anon1.compound.statements)
-function->body->__anon1.compound.statements = MkList();
-ListAdd(function->body->__anon1.compound.statements, fireWatchers);
-curCompound = function->body;
-curContext = function->body->__anon1.compound.context;
-ProcessStatement(fireWatchers);
-curContext = prevContext;
-curCompound = prevCompound;
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
 }
-curFunction = oldFunction;
 }
-if(function->declarator)
-{
-ProcessDeclarator(function->declarator, 1);
 }
-topContext = oldTopContext;
-thisClass = oldThisClass;
 }
-
-static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
+yylloc = exp->loc;
+if(exp->destType && (exp->destType->kind == 18))
+;
+else if(exp->destType && !exp->destType->keepCast)
 {
-struct ClassDef * def;
-struct External * external = curExternal;
-struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
-
-for(def = definitions->first; def; def = def->next)
+if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
+exp->needTemplateCast = 1;
+if(exp->destType->kind == 0)
+;
+else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
 {
-if(def->type == 0)
+unsigned int invalidCast = 0;
+
+if(inCompiler && exp->destType->count && exp->expType)
 {
-if(def->__anon1.function->declarator)
-curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
-else
-curExternal = external;
-ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
+struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
+
+if(c1 && c1->type != 1)
+c1 = (((void *)0));
+if(c2 && c2->type != 1)
+c2 = (((void *)0));
+if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
+invalidCast = 1;
 }
-else if(def->type == 2)
+if(!exp->destType->count || unresolved || invalidCast)
 {
-if(def->__anon1.decl->type == 2)
+if(!exp->expType)
 {
-thisClass = regClass;
-ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
-thisClass = (((void *)0));
-}
-else
+yylloc = exp->loc;
+if(exp->destType->kind != 14)
 {
-struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
+char type2[1024];
 
-if(regClass)
-thisClass = regClass;
-ProcessDeclaration(def->__anon1.decl);
-thisClass = backThisClass;
+type2[0] = '\0';
+if(inCompiler)
+{
+char expString[10240];
+
+expString[0] = '\0';
+PrintType(exp->destType, type2, 0, 1);
+if(inCompiler)
+{
+PrintExpression(exp, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
+if(unresolved)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
+else if(exp->type != 16)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
 }
-else if(def->type == 1 && def->__anon1.defProperties)
+}
+else
 {
-struct MemberInit * defProperty;
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
+char expString[10240];
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
+expString[0] = '\0';
+if(inCompiler)
 {
-thisClass = regClass;
-ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
-thisClass = (((void *)0));
+PrintExpression(exp, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-FreeSymbol(thisSymbol);
+if(unresolved)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
+else if(exp->type != 16)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
-else if(def->type == 3 && def->__anon1.propertyDef)
+}
+else
 {
-struct PropertyDef * prop = def->__anon1.propertyDef;
+char type1[1024];
+char type2[1024];
 
-thisClass = regClass;
-if(prop->setStmt)
+type1[0] = '\0';
+type2[0] = '\0';
+if(inCompiler)
 {
-if(regClass)
+PrintType(exp->expType, type1, 0, 1);
+PrintType(exp->destType, type2, 0, 1);
+}
+if(exp->destType->truth && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && !strcmp(exp->destType->__anon1._class->__anon1.registered->name, "bool") && exp->expType->kind != 0 && exp->expType->kind != 9 && exp->expType->kind != 10 && (exp->expType->kind != 8 || exp->expType->classObjectType || (exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type != 1)))
+;
+else
 {
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
+char expString[10240];
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-}
-curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
-ProcessStatement(prop->setStmt);
+expString[0] = '\0';
+if(inCompiler)
+{
+PrintExpression(exp, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-if(prop->getStmt)
+if(!sourceFile || (!strstr(sourceFile, "src\\lexer.ec") && !strstr(sourceFile, "src/lexer.ec") && !strstr(sourceFile, "src\\grammar.ec") && !strstr(sourceFile, "src/grammar.ec") && !strstr(sourceFile, "src\\type.ec") && !strstr(sourceFile, "src/type.ec") && !strstr(sourceFile, "src\\expression.ec") && !strstr(sourceFile, "src/expression.ec")))
 {
-if(regClass)
+if(invalidCast)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
+else
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
+}
+if(!inCompiler)
 {
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
-
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+FreeType(exp->expType);
+exp->destType->refCount++;
+exp->expType = exp->destType;
 }
-curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
-ProcessStatement(prop->getStmt);
 }
-if(prop->issetStmt)
+}
+}
+}
+else if(exp->destType && exp->destType->kind == 13 && exp->destType->__anon1.type && exp->destType->__anon1.type->kind == 11 && exp->expType && (exp->expType->kind == 11 || exp->expType->kind == 16))
 {
-if(regClass)
+struct Expression * nbExp = GetNonBracketsExp(exp);
+
+if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
 {
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
+struct Expression * e = MoveExpContents(exp);
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
+exp->type = 11;
+exp->__anon1.cast.exp->destType = exp->destType;
+if(exp->destType)
+exp->destType->refCount++;
+exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
 }
-curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
-ProcessStatement(prop->issetStmt);
 }
-thisClass = (((void *)0));
 }
-else if(def->type == 4 && def->__anon1.propertyWatch)
+else if(unresolved)
 {
-struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
-
-thisClass = regClass;
-if(propertyWatch->compound)
+if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s::%s\n", (((void *)0))), exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name, exp->__anon1.__anon1.identifier->string);
+else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
+}
+else if(!exp->expType && exp->type != 16)
 {
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
+char expString[10240];
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-curExternal = (((void *)0));
-ProcessStatement(propertyWatch->compound);
+expString[0] = '\0';
+if(inCompiler)
+{
+PrintExpression(exp, expString);
+__ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-thisClass = (((void *)0));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
+if(inCompiler)
+ApplyAnyObjectLogic(exp);
+if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1 && exp->destType->kind != 24)))
+{
+exp->byReference = 1;
 }
+yylloc = oldyylloc;
 }
 
-static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct)
+static void ProcessFunction(struct FunctionDefinition * function)
 {
-switch(spec->type)
+struct Identifier * id = GetDeclId(function->declarator);
+struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
+struct Type * type = symbol ? symbol->type : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
+struct Context * oldTopContext = topContext;
+
+yylloc = function->loc;
+if(type && type->__anon1.__anon2.thisClass)
+{
+struct Symbol * classSym = type->__anon1.__anon2.thisClass;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
+char className[1024];
+char structName[1024];
+struct Declarator * funcDecl;
+struct Symbol * thisSymbol;
+unsigned int typedObject = 0;
+
+if(_class && !_class->base)
 {
-case 0:
+_class = currentClass;
+if(_class && !_class->symbol)
+_class->symbol = FindClass(_class->fullName);
+classSym = _class ? _class->symbol : (((void *)0));
+typedObject = 1;
+}
+thisClass = _class;
+if(inCompiler && _class)
 {
-if(spec->__anon1.specifier == THISCLASS)
+if(type->kind == 11)
 {
-if(thisClass)
+if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
 {
-spec->type = 1;
-spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
-spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
-ProcessSpecifier(spec, declareStruct);
+struct Type * param = symbol->type->__anon1.__anon2.params.first;
+
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
+FreeType(param);
 }
+if(type->classObjectType != 1)
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
+symbol->type->__anon1.__anon2.staticMethod = 1;
+symbol->type->__anon1.__anon2.thisClass = (((void *)0));
+symbol->type->extraParam = 0;
 }
-break;
 }
-case 1:
+strcpy(className, "__ecereClass_");
+FullClassNameCat(className, _class->fullName, 1);
+structName[0] = (char)0;
+FullClassNameCat(structName, _class->fullName, 0);
+funcDecl = GetFuncDecl(function->declarator);
+if(funcDecl)
 {
-struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
-
-if(symbol)
-DeclareType(curExternal, symbol->type, 1, 1);
-else if(spec->__anon1.__anon1.symbol)
+if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
 {
-struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
+struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
 
-DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
+{
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
+FreeTypeName(param);
 }
-break;
 }
-case 2:
+if(!function->propertyNoThis)
 {
-struct Enumerator * e;
+struct TypeName * thisParam = (((void *)0));
 
-if(spec->__anon1.__anon2.list)
-{
-for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
+if(type->classObjectType != 1)
 {
-if(e->exp)
-ProcessExpressionType(e->exp);
-}
-}
-if(inCompiler)
-break;
+thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
+if(!funcDecl->__anon1.function.parameters)
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
-case 3:
-case 4:
+if(typedObject)
 {
-if(spec->__anon1.__anon2.definitions)
+if(type->classObjectType != 1)
 {
-struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
-
-ProcessClass(spec->__anon1.__anon2.definitions, symbol);
+if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
+thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
 }
-break;
+thisParam = __extension__ ({
+struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
+
+__ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
+});
+DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 }
 }
-
-void ComputeDataTypes()
+if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
 {
-struct External * external;
+struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
 
-currentClass = (((void *)0));
-containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
-DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
-DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
-DeclareFunctionUtil((((void *)0)), "eSystem_New");
-DeclareFunctionUtil((((void *)0)), "eSystem_New0");
-DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
-DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
-DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
-DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
-DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
-DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
-DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
-DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
-DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
-DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
-DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
-for(external = (*ast).first; external; external = external->next)
+funcDecl = GetFuncDecl(initDecl->declarator);
+if(funcDecl)
 {
-afterExternal = curExternal = external;
-if(external->type == 0)
+if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
 {
-if(memoryGuard)
+struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
+
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
 {
-DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
-DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
+FreeTypeName(param);
 }
-currentClass = external->__anon1.function->_class;
-ProcessFunction(external->__anon1.function);
 }
-else if(external->type == 1)
-{
-if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
+if(type->classObjectType != 1)
 {
-DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
-DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
-}
-currentClass = (((void *)0));
-if(external->__anon1.declaration)
-ProcessDeclaration(external->__anon1.declaration);
-}
-else if(external->type == 2)
+if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
 {
-struct ClassDefinition * _class = external->__anon1._class;
+struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
 
-currentClass = external->symbol->__anon1.registered;
-if(memoryGuard)
-{
-DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
-DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
-}
-if(_class->definitions)
-{
-ProcessClass(_class->definitions, _class->symbol);
-}
-if(inCompiler)
-{
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
-((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
+if(!funcDecl->__anon1.function.parameters)
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 }
-else if(external->type == 4)
-{
-thisNameSpace = external->__anon1.id->string;
 }
 }
-currentClass = (((void *)0));
-thisNameSpace = (((void *)0));
-curExternal = (((void *)0));
 }
-
-static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
-{
-switch(decl->type)
-{
-case 1:
-if(decl->__anon1.identifier->classSym)
+if(function->body)
 {
-FreeSpecifier(decl->__anon1.identifier->_class);
-decl->__anon1.identifier->_class = (((void *)0));
-}
-break;
-case 3:
-if(decl->__anon1.array.exp)
-ProcessExpressionType(decl->__anon1.array.exp);
-case 0:
-case 2:
-case 4:
-case 5:
-case 6:
-case 7:
+if(type->classObjectType != 1)
 {
-struct Identifier * id = (((void *)0));
-struct Specifier * classSpec = (((void *)0));
+thisSymbol = __extension__ ({
+struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
-if(decl->type == 4)
-{
-id = GetDeclId(decl);
-if(id && id->_class)
+__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
+});
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+if(typedObject && thisSymbol->type)
 {
-classSpec = id->_class;
-id->_class = (((void *)0));
+thisSymbol->type->classObjectType = 2;
+thisSymbol->type->byReference = type->byReference;
+thisSymbol->type->typedByReference = type->byReference;
 }
 }
-if(decl->declarator)
-ProcessDeclarator(decl->declarator, isFunction);
-if(decl->type == 4)
-{
-if(classSpec)
-{
-struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
-
-if(!decl->__anon1.function.parameters)
-decl->__anon1.function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
 }
-if(decl->__anon1.function.parameters)
+if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
 {
-struct TypeName * param;
+struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
 
-for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
 {
-if(param->qualifiers)
-{
-struct Specifier * spec;
+struct __ecereNameSpace__ecere__com__Class * base;
 
-for(spec = (*param->qualifiers).first; spec; spec = spec->next)
-{
-if(spec->type == 0)
-{
-if(spec->__anon1.specifier == TYPED_OBJECT)
+for(base = _class; base && base->type != 1000; base = base->next)
 {
-struct Declarator * d = param->declarator;
-struct TypeName * newParam = (newParam = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), newParam->qualifiers = MkListOne(MkSpecifier(VOID)), newParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d), newParam);
-
-if(d->type != 5)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
-FreeList(param->qualifiers, (void *)(FreeSpecifier));
-param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
-param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
-DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
-param = newParam;
+for(member = base->membersAndProperties.first; member; member = member->next)
+if(!member->isProperty)
+break;
+if(member)
 break;
 }
-else if(spec->__anon1.specifier == ANY_OBJECT)
+}
+for(member = _class->membersAndProperties.first; member; member = member->next)
+if(!member->isProperty)
+break;
+if(member)
+{
+char pointerName[1024];
+struct Declaration * decl;
+struct Initializer * initializer;
+struct Expression * exp, * bytePtr;
+
+strcpy(pointerName, "__ecerePointer_");
+FullClassNameCat(pointerName, _class->fullName, 0);
 {
-struct Declarator * d = param->declarator;
+char className[1024];
 
-FreeList(param->qualifiers, (void *)(FreeSpecifier));
-param->qualifiers = MkListOne(MkSpecifier(VOID));
-if(d->type != 5)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
-param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
-break;
+strcpy(className, "__ecereClass_");
+FullClassNameCat(className, classSym->string, 1);
+DeclareClass(curExternal, classSym, className);
 }
-else if(spec->__anon1.specifier == THISCLASS)
+bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
+if(_class->fixed)
 {
-if(thisClass)
+struct Expression * e;
+
+if(_class->offset && _class->offset == _class->base->structSize)
 {
-spec->type = 1;
-spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
-spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
-ProcessSpecifier(spec, 0);
-}
-break;
-}
+e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
+ProcessExpressionType(e);
 }
-else if(spec->type == 1)
+else
 {
-ProcessSpecifier(spec, isFunction);
-}
+char string[256];
+
+sprintf(string, "%d", _class->offset);
+e = MkExpConstant(string);
 }
+exp = QBrackets(MkExpOp(bytePtr, '+', e));
 }
-if(param->declarator)
-ProcessDeclarator(param->declarator, 0);
+else
+{
+exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
 }
+exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
+exp->expType = __extension__ ({
+struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
+}), __ecereInstance2;
+});
+if(function->body)
+{
+yylloc = function->body->loc;
+initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
+{
+struct Context * prevContext = curContext;
+struct __ecereNameSpace__ecere__sys__OldList * list;
+
+curContext = function->body->__anon1.compound.context;
+decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
+curContext = prevContext;
 }
+decl->symbol = (((void *)0));
+if(!function->body->__anon1.compound.declarations)
+function->body->__anon1.compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
 }
-break;
 }
 }
 }
-
-static void ProcessDeclaration(struct Declaration * decl)
+else
+thisClass = (((void *)0));
+if(id)
 {
-yylloc = decl->loc;
-switch(decl->type)
+FreeSpecifier(id->_class);
+id->_class = (((void *)0));
+if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
 {
-case 1:
+struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
+
+id = GetDeclId(initDecl->declarator);
+FreeSpecifier(id->_class);
+id->_class = (((void *)0));
+}
+}
+if(function->body)
+topContext = function->body->__anon1.compound.context;
 {
-unsigned int declareStruct = 0;
+struct FunctionDefinition * oldFunction = curFunction;
 
-if(decl->__anon1.__anon1.declarators)
+curFunction = function;
+if(function->body)
+ProcessStatement(function->body);
+if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
 {
-struct InitDeclarator * d;
+struct Statement * prevCompound = curCompound;
+struct Context * prevContext = curContext;
+struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
 
-for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
+if(!function->body->__anon1.compound.statements)
+function->body->__anon1.compound.statements = MkList();
+ListAdd(function->body->__anon1.compound.statements, fireWatchers);
+curCompound = function->body;
+curContext = function->body->__anon1.compound.context;
+ProcessStatement(fireWatchers);
+curContext = prevContext;
+curCompound = prevCompound;
+}
+curFunction = oldFunction;
+}
+if(function->declarator)
 {
-struct Type * type, * subType;
+ProcessDeclarator(function->declarator, 1);
+}
+topContext = oldTopContext;
+thisClass = oldThisClass;
+}
 
-ProcessDeclarator(d->declarator, 0);
-type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
-if(d->initializer)
+static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
 {
-ProcessInitializer(d->initializer, type);
-if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
+struct ClassDef * def;
+struct External * external = curExternal;
+struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
+
+for(def = definitions->first; def; def = def->next)
 {
-if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
+if(def->type == 0)
 {
-struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
-
-inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
-d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
-if(decl->__anon1.__anon1.specifiers)
-FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
-FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
-d = (((void *)0));
-decl->type = 2;
-decl->__anon1.inst = inst;
-}
-}
+if(def->__anon1.function->declarator)
+curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
+else
+curExternal = external;
+ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
 }
-for(subType = type; subType; )
+else if(def->type == 2)
 {
-if(subType->kind == 8)
+if(def->__anon1.decl->type == 2)
 {
-declareStruct = 1;
-break;
+thisClass = regClass;
+ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
+thisClass = (((void *)0));
 }
-else if(subType->kind == 13)
-break;
-else if(subType->kind == 12)
-subType = subType->__anon1.__anon4.arrayType;
 else
-break;
-}
-FreeType(type);
-if(!d)
-break;
+{
+struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
+
+if(regClass)
+thisClass = regClass;
+ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
+thisClass = backThisClass;
 }
 }
-if(decl->__anon1.__anon1.specifiers)
+else if(def->type == 1 && def->__anon1.defProperties)
 {
-struct Specifier * s;
+struct MemberInit * defProperty;
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
 
-for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
 {
-ProcessSpecifier(s, declareStruct);
-}
-}
-break;
+thisClass = regClass;
+ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
+thisClass = (((void *)0));
 }
-case 2:
-{
-ProcessInstantiationType(decl->__anon1.inst);
-break;
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+FreeSymbol(thisSymbol);
 }
-case 0:
+else if(def->type == 3 && def->__anon1.propertyDef)
 {
-struct Specifier * spec;
-struct Declarator * d;
-unsigned int declareStruct = 0;
+struct PropertyDef * prop = def->__anon1.propertyDef;
 
-if(decl->__anon1.__anon1.declarators)
+thisClass = regClass;
+if(prop->setStmt)
 {
-for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
+if(regClass)
 {
-struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
-struct Type * subType;
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
 
-ProcessDeclarator(d, 0);
-for(subType = type; subType; )
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+}
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
+ProcessStatement(prop->setStmt);
+}
+if(prop->getStmt)
 {
-if(subType->kind == 8)
+if(regClass)
 {
-declareStruct = 1;
-break;
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
+
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 }
-else if(subType->kind == 13)
-break;
-else if(subType->kind == 12)
-subType = subType->__anon1.__anon4.arrayType;
-else
-break;
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
+ProcessStatement(prop->getStmt);
 }
-FreeType(type);
+if(prop->issetStmt)
+{
+if(regClass)
+{
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
+
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 }
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
+ProcessStatement(prop->issetStmt);
 }
-if(decl->__anon1.__anon1.specifiers)
+thisClass = (((void *)0));
+}
+else if(def->type == 4 && def->__anon1.propertyWatch)
 {
-for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
-ProcessSpecifier(spec, declareStruct);
+struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
+
+thisClass = regClass;
+if(propertyWatch->compound)
+{
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
+
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+curExternal = (((void *)0));
+ProcessStatement(propertyWatch->compound);
 }
-break;
+thisClass = (((void *)0));
 }
 }
 }
index 6d53518..dda0191 100644 (file)
@@ -507,6 +507,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -931,6 +932,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct ClassImport
@@ -1974,6 +1976,8 @@ void DeclareClass(struct External * neededFor, struct Symbol * classSym, const c
 {
 if(classSym && classSym->notYetDeclared)
 {
+if(!classSym->mustRegister)
+{
 if(!classSym->_import)
 {
 if(!classSym->module)
@@ -1988,6 +1992,7 @@ __ecereInstance1->isRemote = classSym->__anon1.registered ? classSym->__anon1.re
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->module->classes, classSym->_import);
 }
 classSym->_import->itself = 1;
+}
 classSym->notYetDeclared = 0;
 if(!classSym->__anon2.__anon1.pointerExternal && inCompiler)
 {
index d72bbd4..16366cf 100644 (file)
@@ -908,6 +908,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 extern void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char *  name);
@@ -1036,6 +1037,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
index 2ae5b3b..55f4f9c 100644 (file)
@@ -587,6 +587,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
 struct Expression * propCategory;
+unsigned int mustRegister;
 } __attribute__ ((gcc_struct));
 
 struct TemplateParameter;
@@ -606,6 +607,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
index 60d93a7..79a5c0b 100644 (file)
@@ -79,7 +79,7 @@ static const yytype_int16 yyrhs[] =
 
 static const yytype_uint16 yyrline[] =
 {
-(unsigned short)0, (unsigned short)229, (unsigned short)229, (unsigned short)247, (unsigned short)281, (unsigned short)331, (unsigned short)332, (unsigned short)359, (unsigned short)363, (unsigned short)364, (unsigned short)365, (unsigned short)382, (unsigned short)384, (unsigned short)389, (unsigned short)394, (unsigned short)399, (unsigned short)401, (unsigned short)406, (unsigned short)411, (unsigned short)412, (unsigned short)417, (unsigned short)419, (unsigned short)421, (unsigned short)423, (unsigned short)424, (unsigned short)426, (unsigned short)427, (unsigned short)428, (unsigned short)431, (unsigned short)432, (unsigned short)433, (unsigned short)434, (unsigned short)435, (unsigned short)436, (unsigned short)437, (unsigned short)438, (unsigned short)439, (unsigned short)443, (unsigned short)444, (unsigned short)445, (unsigned short)446, (unsigned short)447, (unsigned short)448, (unsigned short)461, (unsigned short)462, (unsigned short)463, (unsigned short)467, (unsigned short)496, (unsigned short)497, (unsigned short)498, (unsigned short)499, (unsigned short)503, (unsigned short)504, (unsigned short)505, (unsigned short)507, (unsigned short)508, (unsigned short)510, (unsigned short)511, (unsigned short)515, (unsigned short)516, (unsigned short)525, (unsigned short)526, (unsigned short)527, (unsigned short)528, (unsigned short)529, (unsigned short)530, (unsigned short)531, (unsigned short)535, (unsigned short)536, (unsigned short)540, (unsigned short)541, (unsigned short)542, (unsigned short)543, (unsigned short)547, (unsigned short)548, (unsigned short)549, (unsigned short)553, (unsigned short)554, (unsigned short)555, (unsigned short)559, (unsigned short)567, (unsigned short)568, (unsigned short)569, (unsigned short)570, (unsigned short)571, (unsigned short)575, (unsigned short)576, (unsigned short)577, (unsigned short)581, (unsigned short)582, (unsigned short)586, (unsigned short)587, (unsigned short)591, (unsigned short)592, (unsigned short)596, (unsigned short)597, (unsigned short)601, (unsigned short)602, (unsigned short)606, (unsigned short)607, (unsigned short)611, (unsigned short)612, (unsigned short)613, (unsigned short)617, (unsigned short)618, (unsigned short)619, (unsigned short)620, (unsigned short)621, (unsigned short)622, (unsigned short)623, (unsigned short)624, (unsigned short)625, (unsigned short)626, (unsigned short)627, (unsigned short)631, (unsigned short)632, (unsigned short)636, (unsigned short)640, (unsigned short)641, (unsigned short)642, (unsigned short)643, (unsigned short)647, (unsigned short)648, (unsigned short)649, (unsigned short)650, (unsigned short)651, (unsigned short)652, (unsigned short)653, (unsigned short)654, (unsigned short)658, (unsigned short)659, (unsigned short)660, (unsigned short)661, (unsigned short)662, (unsigned short)663, (unsigned short)664, (unsigned short)665, (unsigned short)666, (unsigned short)667, (unsigned short)671, (unsigned short)672, (unsigned short)673, (unsigned short)674, (unsigned short)675, (unsigned short)676, (unsigned short)677, (unsigned short)678, (unsigned short)679, (unsigned short)680, (unsigned short)684, (unsigned short)685, (unsigned short)686, (unsigned short)687, (unsigned short)688, (unsigned short)689, (unsigned short)690, (unsigned short)691, (unsigned short)692, (unsigned short)693, (unsigned short)694, (unsigned short)695, (unsigned short)699, (unsigned short)700, (unsigned short)704, (unsigned short)705, (unsigned short)706, (unsigned short)707, (unsigned short)708, (unsigned short)709, (unsigned short)710, (unsigned short)711, (unsigned short)712, (unsigned short)730, (unsigned short)747, (unsigned short)748, (unsigned short)749, (unsigned short)750, (unsigned short)751, (unsigned short)752, (unsigned short)753, (unsigned short)754, (unsigned short)755, (unsigned short)756, (unsigned short)757, (unsigned short)758, (unsigned short)759, (unsigned short)777, (unsigned short)794, (unsigned short)795, (unsigned short)799, (unsigned short)800, (unsigned short)804, (unsigned short)805, (unsigned short)806, (unsigned short)807, (unsigned short)808, (unsigned short)809, (unsigned short)813, (unsigned short)814, (unsigned short)815, (unsigned short)819, (unsigned short)820, (unsigned short)821, (unsigned short)826, (unsigned short)827, (unsigned short)828, (unsigned short)829, (unsigned short)830, (unsigned short)834, (unsigned short)835, (unsigned short)839, (unsigned short)840, (unsigned short)841, (unsigned short)845, (unsigned short)846, (unsigned short)850, (unsigned short)854, (unsigned short)855, (unsigned short)856, (unsigned short)861, (unsigned short)862, (unsigned short)863, (unsigned short)864, (unsigned short)865, (unsigned short)866, (unsigned short)867, (unsigned short)868, (unsigned short)869, (unsigned short)870, (unsigned short)871, (unsigned short)872, (unsigned short)873, (unsigned short)874, (unsigned short)875, (unsigned short)876, (unsigned short)877, (unsigned short)878, (unsigned short)879, (unsigned short)880, (unsigned short)881, (unsigned short)882, (unsigned short)883, (unsigned short)884, (unsigned short)888, (unsigned short)889, (unsigned short)890, (unsigned short)891, (unsigned short)892, (unsigned short)893, (unsigned short)894, (unsigned short)895, (unsigned short)896, (unsigned short)897, (unsigned short)898, (unsigned short)899, (unsigned short)900, (unsigned short)901, (unsigned short)902, (unsigned short)903, (unsigned short)904, (unsigned short)905, (unsigned short)906, (unsigned short)907, (unsigned short)908, (unsigned short)909, (unsigned short)914, (unsigned short)915, (unsigned short)916, (unsigned short)917, (unsigned short)918, (unsigned short)921, (unsigned short)922, (unsigned short)923, (unsigned short)924, (unsigned short)925, (unsigned short)930, (unsigned short)931, (unsigned short)934, (unsigned short)936, (unsigned short)941, (unsigned short)942, (unsigned short)947, (unsigned short)948, (unsigned short)959, (unsigned short)963, (unsigned short)965, (unsigned short)966, (unsigned short)968, (unsigned short)969, (unsigned short)993, (unsigned short)1008, (unsigned short)1009, (unsigned short)1013, (unsigned short)1014, (unsigned short)1018, (unsigned short)1019, (unsigned short)1023, (unsigned short)1027, (unsigned short)1028, (unsigned short)1032, (unsigned short)1034, (unsigned short)1036, (unsigned short)1038, (unsigned short)1040, (unsigned short)1043, (unsigned short)1045, (unsigned short)1047, (unsigned short)1049, (unsigned short)1051, (unsigned short)1054, (unsigned short)1056, (unsigned short)1058, (unsigned short)1060, (unsigned short)1062, (unsigned short)1065, (unsigned short)1067, (unsigned short)1069, (unsigned short)1071, (unsigned short)1073, (unsigned short)1078, (unsigned short)1079, (unsigned short)1080, (unsigned short)1081, (unsigned short)1082, (unsigned short)1083, (unsigned short)1084, (unsigned short)1085, (unsigned short)1089, (unsigned short)1091, (unsigned short)1096, (unsigned short)1098, (unsigned short)1100, (unsigned short)1102, (unsigned short)1104, (unsigned short)1109, (unsigned short)1110, (unsigned short)1114, (unsigned short)1116, (unsigned short)1117, (unsigned short)1118, (unsigned short)1119, (unsigned short)1123, (unsigned short)1125, (unsigned short)1130, (unsigned short)1132, (unsigned short)1138, (unsigned short)1140, (unsigned short)1142, (unsigned short)1144, (unsigned short)1146, (unsigned short)1148, (unsigned short)1150, (unsigned short)1152, (unsigned short)1154, (unsigned short)1156, (unsigned short)1158, (unsigned short)1163, (unsigned short)1165, (unsigned short)1167, (unsigned short)1169, (unsigned short)1171, (unsigned short)1176, (unsigned short)1177, (unsigned short)1178, (unsigned short)1179, (unsigned short)1180, (unsigned short)1181, (unsigned short)1185, (unsigned short)1186, (unsigned short)1187, (unsigned short)1188, (unsigned short)1189, (unsigned short)1190, (unsigned short)1236, (unsigned short)1237, (unsigned short)1239, (unsigned short)1241, (unsigned short)1246, (unsigned short)1248, (unsigned short)1250, (unsigned short)1252, (unsigned short)1254, (unsigned short)1259, (unsigned short)1260, (unsigned short)1263, (unsigned short)1265, (unsigned short)1267, (unsigned short)1273, (unsigned short)1277, (unsigned short)1279, (unsigned short)1281, (unsigned short)1286, (unsigned short)1287, (unsigned short)1288, (unsigned short)1290, (unsigned short)1295, (unsigned short)1296, (unsigned short)1297, (unsigned short)1298, (unsigned short)1299, (unsigned short)1303, (unsigned short)1304, (unsigned short)1308, (unsigned short)1309, (unsigned short)1310, (unsigned short)1311, (unsigned short)1315, (unsigned short)1316, (unsigned short)1320, (unsigned short)1321, (unsigned short)1325, (unsigned short)1326, (unsigned short)1327, (unsigned short)1328, (unsigned short)1329, (unsigned short)1340, (unsigned short)1365, (unsigned short)1366, (unsigned short)1370, (unsigned short)1371, (unsigned short)1375, (unsigned short)1376, (unsigned short)1380, (unsigned short)1382, (unsigned short)1384, (unsigned short)1400, (unsigned short)1402, (unsigned short)1424, (unsigned short)1426, (unsigned short)1431, (unsigned short)1432, (unsigned short)1433, (unsigned short)1434, (unsigned short)1435, (unsigned short)1436, (unsigned short)1440, (unsigned short)1442, (unsigned short)1444, (unsigned short)1449, (unsigned short)1450, (unsigned short)1454, (unsigned short)1455, (unsigned short)1458, (unsigned short)1462, (unsigned short)1463, (unsigned short)1464, (unsigned short)1468, (unsigned short)1472, (unsigned short)1480, (unsigned short)1485, (unsigned short)1486, (unsigned short)1490, (unsigned short)1491, (unsigned short)1492, (unsigned short)1496, (unsigned short)1497, (unsigned short)1498, (unsigned short)1499, (unsigned short)1501, (unsigned short)1502, (unsigned short)1503, (unsigned short)1507, (unsigned short)1508, (unsigned short)1509, (unsigned short)1510, (unsigned short)1511, (unsigned short)1515, (unsigned short)1519, (unsigned short)1521, (unsigned short)1526, (unsigned short)1528, (unsigned short)1553, (unsigned short)1555, (unsigned short)1557, (unsigned short)1559, (unsigned short)1564, (unsigned short)1566, (unsigned short)1570, (unsigned short)1572, (unsigned short)1574, (unsigned short)1576, (unsigned short)1578, (unsigned short)1584, (unsigned short)1586, (unsigned short)1591, (unsigned short)1596, (unsigned short)1597, (unsigned short)1601, (unsigned short)1603, (unsigned short)1608, (unsigned short)1613, (unsigned short)1614, (unsigned short)1615, (unsigned short)1616, (unsigned short)1617, (unsigned short)1618, (unsigned short)1622, (unsigned short)1623, (unsigned short)1624, (unsigned short)1628, (unsigned short)1629
+(unsigned short)0, (unsigned short)229, (unsigned short)229, (unsigned short)247, (unsigned short)271, (unsigned short)311, (unsigned short)312, (unsigned short)339, (unsigned short)343, (unsigned short)344, (unsigned short)345, (unsigned short)362, (unsigned short)364, (unsigned short)369, (unsigned short)374, (unsigned short)379, (unsigned short)381, (unsigned short)386, (unsigned short)391, (unsigned short)392, (unsigned short)397, (unsigned short)399, (unsigned short)401, (unsigned short)403, (unsigned short)404, (unsigned short)406, (unsigned short)407, (unsigned short)408, (unsigned short)411, (unsigned short)412, (unsigned short)413, (unsigned short)414, (unsigned short)415, (unsigned short)416, (unsigned short)417, (unsigned short)418, (unsigned short)419, (unsigned short)423, (unsigned short)424, (unsigned short)425, (unsigned short)426, (unsigned short)427, (unsigned short)428, (unsigned short)441, (unsigned short)442, (unsigned short)443, (unsigned short)447, (unsigned short)476, (unsigned short)477, (unsigned short)478, (unsigned short)479, (unsigned short)483, (unsigned short)484, (unsigned short)485, (unsigned short)487, (unsigned short)488, (unsigned short)490, (unsigned short)491, (unsigned short)495, (unsigned short)496, (unsigned short)505, (unsigned short)506, (unsigned short)507, (unsigned short)508, (unsigned short)509, (unsigned short)510, (unsigned short)511, (unsigned short)515, (unsigned short)516, (unsigned short)520, (unsigned short)521, (unsigned short)522, (unsigned short)523, (unsigned short)527, (unsigned short)528, (unsigned short)529, (unsigned short)533, (unsigned short)534, (unsigned short)535, (unsigned short)539, (unsigned short)547, (unsigned short)548, (unsigned short)549, (unsigned short)550, (unsigned short)551, (unsigned short)555, (unsigned short)556, (unsigned short)557, (unsigned short)561, (unsigned short)562, (unsigned short)566, (unsigned short)567, (unsigned short)571, (unsigned short)572, (unsigned short)576, (unsigned short)577, (unsigned short)581, (unsigned short)582, (unsigned short)586, (unsigned short)587, (unsigned short)591, (unsigned short)592, (unsigned short)593, (unsigned short)597, (unsigned short)598, (unsigned short)599, (unsigned short)600, (unsigned short)601, (unsigned short)602, (unsigned short)603, (unsigned short)604, (unsigned short)605, (unsigned short)606, (unsigned short)607, (unsigned short)611, (unsigned short)612, (unsigned short)616, (unsigned short)620, (unsigned short)621, (unsigned short)622, (unsigned short)623, (unsigned short)627, (unsigned short)628, (unsigned short)629, (unsigned short)630, (unsigned short)631, (unsigned short)632, (unsigned short)633, (unsigned short)634, (unsigned short)638, (unsigned short)639, (unsigned short)640, (unsigned short)641, (unsigned short)642, (unsigned short)643, (unsigned short)644, (unsigned short)645, (unsigned short)646, (unsigned short)647, (unsigned short)651, (unsigned short)652, (unsigned short)653, (unsigned short)654, (unsigned short)655, (unsigned short)656, (unsigned short)657, (unsigned short)658, (unsigned short)659, (unsigned short)660, (unsigned short)664, (unsigned short)665, (unsigned short)666, (unsigned short)667, (unsigned short)668, (unsigned short)669, (unsigned short)670, (unsigned short)671, (unsigned short)672, (unsigned short)673, (unsigned short)674, (unsigned short)675, (unsigned short)679, (unsigned short)680, (unsigned short)684, (unsigned short)685, (unsigned short)686, (unsigned short)687, (unsigned short)688, (unsigned short)689, (unsigned short)690, (unsigned short)691, (unsigned short)692, (unsigned short)700, (unsigned short)709, (unsigned short)710, (unsigned short)711, (unsigned short)712, (unsigned short)713, (unsigned short)714, (unsigned short)715, (unsigned short)716, (unsigned short)717, (unsigned short)718, (unsigned short)719, (unsigned short)720, (unsigned short)721, (unsigned short)729, (unsigned short)738, (unsigned short)739, (unsigned short)743, (unsigned short)744, (unsigned short)748, (unsigned short)749, (unsigned short)750, (unsigned short)751, (unsigned short)752, (unsigned short)753, (unsigned short)757, (unsigned short)758, (unsigned short)759, (unsigned short)763, (unsigned short)764, (unsigned short)765, (unsigned short)770, (unsigned short)771, (unsigned short)772, (unsigned short)773, (unsigned short)774, (unsigned short)778, (unsigned short)779, (unsigned short)783, (unsigned short)784, (unsigned short)785, (unsigned short)789, (unsigned short)790, (unsigned short)794, (unsigned short)798, (unsigned short)799, (unsigned short)800, (unsigned short)805, (unsigned short)806, (unsigned short)807, (unsigned short)808, (unsigned short)809, (unsigned short)810, (unsigned short)811, (unsigned short)812, (unsigned short)813, (unsigned short)814, (unsigned short)815, (unsigned short)816, (unsigned short)817, (unsigned short)818, (unsigned short)819, (unsigned short)820, (unsigned short)821, (unsigned short)822, (unsigned short)823, (unsigned short)824, (unsigned short)825, (unsigned short)826, (unsigned short)827, (unsigned short)828, (unsigned short)832, (unsigned short)833, (unsigned short)834, (unsigned short)835, (unsigned short)836, (unsigned short)837, (unsigned short)838, (unsigned short)839, (unsigned short)840, (unsigned short)841, (unsigned short)842, (unsigned short)843, (unsigned short)844, (unsigned short)845, (unsigned short)846, (unsigned short)847, (unsigned short)848, (unsigned short)849, (unsigned short)850, (unsigned short)851, (unsigned short)852, (unsigned short)853, (unsigned short)858, (unsigned short)859, (unsigned short)860, (unsigned short)861, (unsigned short)862, (unsigned short)865, (unsigned short)866, (unsigned short)867, (unsigned short)868, (unsigned short)869, (unsigned short)874, (unsigned short)875, (unsigned short)878, (unsigned short)880, (unsigned short)885, (unsigned short)886, (unsigned short)891, (unsigned short)892, (unsigned short)903, (unsigned short)907, (unsigned short)909, (unsigned short)910, (unsigned short)912, (unsigned short)913, (unsigned short)937, (unsigned short)952, (unsigned short)953, (unsigned short)957, (unsigned short)958, (unsigned short)962, (unsigned short)963, (unsigned short)967, (unsigned short)971, (unsigned short)972, (unsigned short)976, (unsigned short)978, (unsigned short)980, (unsigned short)982, (unsigned short)984, (unsigned short)987, (unsigned short)989, (unsigned short)991, (unsigned short)993, (unsigned short)995, (unsigned short)998, (unsigned short)1000, (unsigned short)1002, (unsigned short)1004, (unsigned short)1006, (unsigned short)1009, (unsigned short)1011, (unsigned short)1013, (unsigned short)1015, (unsigned short)1017, (unsigned short)1022, (unsigned short)1023, (unsigned short)1024, (unsigned short)1025, (unsigned short)1026, (unsigned short)1027, (unsigned short)1028, (unsigned short)1029, (unsigned short)1033, (unsigned short)1035, (unsigned short)1040, (unsigned short)1042, (unsigned short)1044, (unsigned short)1046, (unsigned short)1048, (unsigned short)1053, (unsigned short)1054, (unsigned short)1058, (unsigned short)1060, (unsigned short)1061, (unsigned short)1062, (unsigned short)1063, (unsigned short)1067, (unsigned short)1069, (unsigned short)1074, (unsigned short)1076, (unsigned short)1082, (unsigned short)1084, (unsigned short)1086, (unsigned short)1088, (unsigned short)1090, (unsigned short)1092, (unsigned short)1094, (unsigned short)1096, (unsigned short)1098, (unsigned short)1100, (unsigned short)1102, (unsigned short)1107, (unsigned short)1109, (unsigned short)1111, (unsigned short)1113, (unsigned short)1115, (unsigned short)1120, (unsigned short)1121, (unsigned short)1122, (unsigned short)1123, (unsigned short)1124, (unsigned short)1125, (unsigned short)1129, (unsigned short)1130, (unsigned short)1131, (unsigned short)1132, (unsigned short)1133, (unsigned short)1134, (unsigned short)1180, (unsigned short)1181, (unsigned short)1183, (unsigned short)1185, (unsigned short)1190, (unsigned short)1192, (unsigned short)1194, (unsigned short)1196, (unsigned short)1198, (unsigned short)1203, (unsigned short)1204, (unsigned short)1207, (unsigned short)1209, (unsigned short)1211, (unsigned short)1217, (unsigned short)1221, (unsigned short)1223, (unsigned short)1225, (unsigned short)1230, (unsigned short)1231, (unsigned short)1232, (unsigned short)1234, (unsigned short)1239, (unsigned short)1240, (unsigned short)1241, (unsigned short)1242, (unsigned short)1243, (unsigned short)1247, (unsigned short)1248, (unsigned short)1252, (unsigned short)1253, (unsigned short)1254, (unsigned short)1255, (unsigned short)1259, (unsigned short)1260, (unsigned short)1264, (unsigned short)1265, (unsigned short)1269, (unsigned short)1270, (unsigned short)1271, (unsigned short)1272, (unsigned short)1273, (unsigned short)1284, (unsigned short)1309, (unsigned short)1310, (unsigned short)1314, (unsigned short)1315, (unsigned short)1319, (unsigned short)1320, (unsigned short)1324, (unsigned short)1326, (unsigned short)1328, (unsigned short)1344, (unsigned short)1346, (unsigned short)1368, (unsigned short)1370, (unsigned short)1375, (unsigned short)1376, (unsigned short)1377, (unsigned short)1378, (unsigned short)1379, (unsigned short)1380, (unsigned short)1384, (unsigned short)1386, (unsigned short)1388, (unsigned short)1393, (unsigned short)1394, (unsigned short)1398, (unsigned short)1399, (unsigned short)1402, (unsigned short)1406, (unsigned short)1407, (unsigned short)1408, (unsigned short)1412, (unsigned short)1416, (unsigned short)1424, (unsigned short)1429, (unsigned short)1430, (unsigned short)1434, (unsigned short)1435, (unsigned short)1436, (unsigned short)1440, (unsigned short)1441, (unsigned short)1442, (unsigned short)1443, (unsigned short)1445, (unsigned short)1446, (unsigned short)1447, (unsigned short)1451, (unsigned short)1452, (unsigned short)1453, (unsigned short)1454, (unsigned short)1455, (unsigned short)1459, (unsigned short)1463, (unsigned short)1465, (unsigned short)1470, (unsigned short)1472, (unsigned short)1497, (unsigned short)1499, (unsigned short)1501, (unsigned short)1503, (unsigned short)1508, (unsigned short)1510, (unsigned short)1514, (unsigned short)1516, (unsigned short)1518, (unsigned short)1520, (unsigned short)1522, (unsigned short)1528, (unsigned short)1530, (unsigned short)1535, (unsigned short)1540, (unsigned short)1541, (unsigned short)1545, (unsigned short)1547, (unsigned short)1552, (unsigned short)1557, (unsigned short)1558, (unsigned short)1559, (unsigned short)1560, (unsigned short)1561, (unsigned short)1562, (unsigned short)1566, (unsigned short)1567, (unsigned short)1568, (unsigned short)1572, (unsigned short)1573
 };
 
 static const char * const yytname[] =
@@ -285,10 +285,6 @@ int pos;
 int included;
 } __attribute__ ((gcc_struct));
 
-extern char *  strcpy(char * , const char * );
-
-extern char *  strcat(char * , const char * );
-
 extern size_t strlen(const char * );
 
 extern char *  __ecereNameSpace__ecere__sys__CopyString(const char *  string);
@@ -329,10 +325,6 @@ extern void FreeExtDecl(struct ExtDecl * extDecl);
 
 extern struct ExtDecl * MkExtDeclString(char * s);
 
-extern struct Symbol * DeclClass(const char *  name);
-
-extern struct Symbol * _DeclClass(const char *  name);
-
 struct Location
 {
 struct CodePosition start;
@@ -425,6 +417,10 @@ struct Specifier;
 
 extern void FreeSpecifier(struct Specifier * spec);
 
+extern struct Symbol * DeclClass(struct Specifier * _class, const char *  name);
+
+extern struct Symbol * _DeclClass(struct Specifier * _class, const char *  name);
+
 extern struct Specifier * MkSpecifierName(const char *  name);
 
 extern void SetClassTemplateArgs(struct Specifier * spec, struct __ecereNameSpace__ecere__sys__OldList * templateArgs);
@@ -481,6 +477,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
+struct Specifier * nsSpec;
 } __attribute__ ((gcc_struct)) __anon1;
 struct
 {
@@ -2273,7 +2270,7 @@ switch(yyn)
 case 2:
 {
 yyval.specifier = (((void *)0));
-DeclClass(yyvsp[(1) - (2)].id->string);
+DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
 
@@ -2303,17 +2300,7 @@ break;
 case 3:
 {
 yyval.specifier = (((void *)0));
-if(yyvsp[(1) - (2)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (2)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (2)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (2)].id->string);
+_DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 FreeIdentifier(yyvsp[(1) - (2)].id);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
@@ -2342,7 +2329,7 @@ goto yysetstate;
 break;
 case 4:
 {
-DeclClass(yyvsp[(1) - (2)].id->string);
+DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
 
@@ -2378,7 +2365,7 @@ yyval.specifier = yyvsp[(1) - (1)].specifier;
 break;
 case 6:
 {
-DeclClass(yyvsp[(1) - (2)].id->string);
+DeclClass(yyvsp[(1) - (2)].id->_class, yyvsp[(1) - (2)].id->string);
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
 
@@ -3442,17 +3429,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 171:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -3461,16 +3438,7 @@ FreeIdentifier(yyvsp[(1) - (4)].id);
 break;
 case 172:
 {
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -3563,17 +3531,7 @@ FreeIdentifier(yyvsp[(2) - (2)].id);
 break;
 case 185:
 {
-if(yyvsp[(1) - (4)].id->_class)
-{
-char name[1024];
-
-strcpy(name, yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name ? yyvsp[(1) - (4)].id->_class->__anon1.__anon1.name : "");
-strcat(name, "::");
-strcat(name, yyvsp[(1) - (4)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(1) - (4)].id->string);
+_DeclClass(yyvsp[(1) - (4)].id->_class, yyvsp[(1) - (4)].id->string);
 yyval.list = MkList();
 ListAdd(yyval.list, MkSpecifierNameArgs(yyvsp[(1) - (4)].id->string, yyvsp[(3) - (4)].list));
 FreeIdentifier(yyvsp[(1) - (4)].id);
@@ -3582,16 +3540,7 @@ FreeIdentifier(yyvsp[(1) - (4)].id);
 break;
 case 186:
 {
-if(yyvsp[(2) - (5)].id->_class && !yyvsp[(2) - (5)].id->_class->__anon1.__anon1.name)
-{
-char name[1024];
-
-strcpy(name, "::");
-strcat(name, yyvsp[(2) - (5)].id->string);
-_DeclClass(name);
-}
-else
-_DeclClass(yyvsp[(2) - (5)].id->string);
+_DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ListAdd(yyvsp[(1) - (5)].list, MkSpecifierNameArgs(yyvsp[(2) - (5)].id->string, yyvsp[(4) - (5)].list));
 FreeIdentifier(yyvsp[(2) - (5)].id);
 ;
@@ -3904,7 +3853,7 @@ yyval.specifier = MkSpecifierSubClass(yyvsp[(3) - (4)].specifier);
 break;
 case 239:
 {
-_DeclClass(yyvsp[(3) - (4)].id->string);
+_DeclClass(yyvsp[(3) - (4)].id->_class, yyvsp[(3) - (4)].id->string);
 yyval.specifier = MkSpecifierSubClass(MkSpecifierName(yyvsp[(3) - (4)].id->string));
 FreeIdentifier(yyvsp[(3) - (4)].id);
 ;
@@ -4032,7 +3981,7 @@ yyval.specifier = MkSpecifierSubClass(yyvsp[(3) - (4)].specifier);
 break;
 case 263:
 {
-_DeclClass(yyvsp[(3) - (4)].id->string);
+_DeclClass(yyvsp[(3) - (4)].id->_class, yyvsp[(3) - (4)].id->string);
 yyval.specifier = MkSpecifierSubClass(MkSpecifierName(yyvsp[(3) - (4)].id->string));
 FreeIdentifier(yyvsp[(3) - (4)].id);
 ;
@@ -4048,7 +3997,7 @@ case 265:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, yyvsp[(2) - (5)].id, yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].id->string);
+DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ;
 }
 break;
@@ -4062,7 +4011,7 @@ case 267:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (4)].specifierType, yyvsp[(2) - (4)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (4)].id->string);
+DeclClass(yyvsp[(2) - (4)].id->_class, yyvsp[(2) - (4)].id->string);
 ;
 }
 break;
@@ -4076,7 +4025,7 @@ case 269:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, MkIdentifier(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name), yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (5)].specifier);
 ;
 }
@@ -4086,7 +4035,7 @@ case 270:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (6)].specifierType, yyvsp[(3) - (6)].id, yyvsp[(5) - (6)].list);
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (6)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (6)].id->string);
+DeclClass(yyvsp[(3) - (6)].id->_class, yyvsp[(3) - (6)].id->string);
 ;
 }
 break;
@@ -4102,7 +4051,7 @@ case 272:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (5)].specifierType, yyvsp[(3) - (5)].id, (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (5)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (5)].id->string);
+DeclClass(yyvsp[(3) - (5)].id->_class, yyvsp[(3) - (5)].id->string);
 ;
 }
 break;
@@ -4118,7 +4067,7 @@ case 274:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (6)].specifierType, MkIdentifier(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name), yyvsp[(5) - (6)].list);
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (6)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(3) - (6)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (6)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(3) - (6)].specifier);
 ;
 }
@@ -4127,7 +4076,7 @@ case 275:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (2)].specifierType, yyvsp[(2) - (2)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].id->string);
+DeclClass(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ;
 }
 break;
@@ -4135,7 +4084,7 @@ case 276:
 {
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (2)].specifierType, MkIdentifier(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name), (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ;
 }
@@ -4145,7 +4094,7 @@ case 277:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (3)].specifierType, yyvsp[(3) - (3)].id, (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (3)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (3)].id->string);
+DeclClass(yyvsp[(3) - (3)].id->_class, yyvsp[(3) - (3)].id->string);
 ;
 }
 break;
@@ -4154,7 +4103,7 @@ case 278:
 yyval.specifier = MkStructOrUnion(yyvsp[(1) - (3)].specifierType, MkIdentifier(yyvsp[(3) - (3)].specifier->__anon1.__anon1.name), (((void *)0)));
 yyval.specifier->__anon1.__anon2.extDeclStruct = yyvsp[(2) - (3)].extDecl;
 if(declMode)
-DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(3) - (3)].specifier->__anon1.__anon1.nsSpec, yyvsp[(3) - (3)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(3) - (3)].specifier);
 ;
 }
@@ -4554,7 +4503,7 @@ case 334:
 {
 yyval.specifier = MkEnum(yyvsp[(2) - (2)].id, (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].id->string);
+DeclClass(yyvsp[(2) - (2)].id->_class, yyvsp[(2) - (2)].id->string);
 ;
 }
 break;
@@ -4562,7 +4511,7 @@ case 335:
 {
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name), (((void *)0)));
 if(declMode)
-DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (2)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (2)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (2)].specifier);
 ;
 }
@@ -4577,7 +4526,7 @@ case 337:
 {
 yyval.specifier = MkEnum(yyvsp[(2) - (5)].id, yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].id->string);
+DeclClass(yyvsp[(2) - (5)].id->_class, yyvsp[(2) - (5)].id->string);
 ;
 }
 break;
@@ -4586,7 +4535,7 @@ case 338:
 yyval.specifier = MkEnum(yyvsp[(2) - (7)].id, yyvsp[(4) - (7)].list);
 yyval.specifier->__anon1.__anon2.definitions = yyvsp[(6) - (7)].list;
 if(declMode)
-DeclClass(yyvsp[(2) - (7)].id->string);
+DeclClass(yyvsp[(2) - (7)].id->_class, yyvsp[(2) - (7)].id->string);
 ;
 }
 break;
@@ -4595,7 +4544,7 @@ case 339:
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (7)].specifier->__anon1.__anon1.name), yyvsp[(4) - (7)].list);
 yyval.specifier->__anon1.__anon2.definitions = yyvsp[(6) - (7)].list;
 if(declMode)
-DeclClass(yyvsp[(2) - (7)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (7)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (7)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (7)].specifier);
 ;
 }
@@ -4604,7 +4553,7 @@ case 340:
 {
 yyval.specifier = MkEnum(MkIdentifier(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name), yyvsp[(4) - (5)].list);
 if(declMode)
-DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
+DeclClass(yyvsp[(2) - (5)].specifier->__anon1.__anon1.nsSpec, yyvsp[(2) - (5)].specifier->__anon1.__anon1.name);
 FreeSpecifier(yyvsp[(2) - (5)].specifier);
 ;
 }
index 0d58a1b..6cf7333 100644 (file)
@@ -1424,7 +1424,7 @@ void SetClassTemplateArgs(Specifier spec, OldList templateArgs)
          if(!symbol && spec.symbol)
          {
             // If class was only decl'ed, invoke DeclClass on this templated class as well
-            symbol = _DeclClass(templateString);
+            symbol = _DeclClass(null, templateString);
             symbol.notYetDeclared = true;
          }
          // Add a reference to all templated class to the basic class
@@ -1470,7 +1470,22 @@ Specifier _MkSpecifierName(const char * name, Symbol symbol, OldList templateArg
          }
       }
       else if(symbol)
+      {
+         char nameSpace[1024];
+         char * c = strstr(name, symbol.string);
          spec.name = CopyString(symbol.string);
+         if(c && c >= name + 2 && c[-1] == ':' && c[-2] == ':')
+         {
+            if(c > name + 2)
+            {
+               memcpy(nameSpace, name, c - name - 2);
+               nameSpace[c-name] = 0;
+               spec.nsSpec = _MkSpecifierName(nameSpace, null, null);
+            }
+            else
+               spec.nsSpec = _MkSpecifierName(null, null, null);
+         }
+      }
       else
          spec.name = CopyString(name);
       spec.symbol = symbol;
@@ -1734,12 +1749,12 @@ ClassDef MkClassDefFunction(ClassFunction function)
    return def;
 }
 
-Symbol DeclClassAddNameSpace(const char * className)
+Symbol DeclClassAddNameSpace(Specifier _class, const char * className)
 {
    char name[1024];
    int len = 0, stringLen;
    name[0] = '\0';
-   if((currentNameSpace || defaultNameSpace) && declMode != defaultAccess && defaultDeclMode != defaultAccess)
+   if(className[0] != ':' && (currentNameSpace || defaultNameSpace) && declMode != defaultAccess && defaultDeclMode != defaultAccess && (!_class || _class.name))
    {
       if(defaultNameSpace)
       {
@@ -1760,20 +1775,30 @@ Symbol DeclClassAddNameSpace(const char * className)
    memcpy(name + len, className, stringLen);
    len += stringLen;
    name[len] = 0;
-   return _DeclClass(name);
+   return _DeclClass(_class, name);
 }
 
-Symbol DeclClass(const char * name)
+Symbol DeclClass(Specifier _class, const char * name)
 {
-   if(strchr(name, ':'))
-      return _DeclClass(name);
+   if(_class || strchr(name, ':'))
+      return _DeclClass(_class, name);
    else
-      return DeclClassAddNameSpace(name);
+      return DeclClassAddNameSpace(_class, name);
 }
 
-Symbol _DeclClass(const char * name)
+Symbol _DeclClass(Specifier _class, const char * name)
 {
-   Symbol symbol = FindClass(name);
+   Symbol symbol;
+   char nameBuffer[1024];
+   if(_class)
+   {
+      strcpy(nameBuffer,  _class.name ? _class.name : "");
+      strcat(nameBuffer, "::");
+      strcat(nameBuffer, name);
+      name = nameBuffer;
+   }
+
+   symbol = FindClass(name);
    if(!symbol)
    {
       /*
@@ -1789,7 +1814,7 @@ Symbol _DeclClass(const char * name)
       symbol = Symbol
       {
          string = CopyString(name);
-         // notYetDeclared = true;
+         notYetDeclared = true;
       };
       if(!globalContext.classes.Add((BTNode)symbol))
          excludedSymbols->Add(symbol);
index e0971ed..b38b9a8 100644 (file)
@@ -760,7 +760,7 @@ static void ProcessDBTable(DBTableDef table)
       inheritanceSpecs->Add(MkSpecifier(PRIVATE));
       inheritanceSpecs->Add(MkSpecifierName("Row"));
       PushContext();
-      _class = MkClass(DeclClass(rowClassName), inheritanceSpecs, rowClassDefs);
+      _class = MkClass(DeclClass(null, rowClassName), inheritanceSpecs, rowClassDefs);
       PopContext(curContext);
 
       def = MkClassDefDefaultProperty(MkListOne(MkMemberInitExp(MkExpIdentifier(MkIdentifier("tbl")), MkInitializerAssignment(MkExpIdentifier(MkIdentifier(tableID))))));
@@ -1137,10 +1137,10 @@ public void ProcessDBTableDefinitions()
    if(inCompiler)
       PrePreProcessClassDefinitions();
 
-   DeclClass("Field");
-   DeclClass("Table");
-   DeclClass("Row");
-   DeclClass("Id");
+   DeclClass(null, "Field");
+   DeclClass(null, "Table");
+   DeclClass(null, "Row");
+   DeclClass(null, "Id");
    numIndexes = 0;
    if(ast != null)
    {
index 595a121..16b7267 100644 (file)
@@ -493,6 +493,7 @@ public:
          char * name;
          Symbol symbol;
          OldList/*<TemplateArgument>*/ * templateArgs;
+         Specifier nsSpec;
       };
       struct
       {
@@ -1301,6 +1302,7 @@ public:
    Context ctx;
    int isIterator;
    Expression propCategory;
+   bool mustRegister;   // Must register the class within the RegisterClass (also used to check whether this class is declared in this module)
 };
 
 // For the .imp file:
index 6d882d0..cfcc1a3 100644 (file)
@@ -5909,7 +5909,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 638 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string); ;}
     break;
 
   case 215:
@@ -5923,7 +5923,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 640 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), (yyvsp[(2) - (4)].id), null); if(declMode) DeclClass((yyvsp[(2) - (4)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), (yyvsp[(2) - (4)].id), null); if(declMode) DeclClass((yyvsp[(2) - (4)].id)._class, (yyvsp[(2) - (4)].id).string); ;}
     break;
 
   case 217:
@@ -5937,14 +5937,14 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 643 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).nsSpec, (yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
 #line 645 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].id)._class, (yyvsp[(3) - (6)].id).string); ;}
     break;
 
   case 220:
@@ -5958,7 +5958,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 647 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(3) - (5)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (5)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (5)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(3) - (5)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (5)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (5)].id)._class, (yyvsp[(3) - (5)].id).string); ;}
     break;
 
   case 222:
@@ -5972,35 +5972,35 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 650 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), MkIdentifier((yyvsp[(3) - (6)].specifier).name), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), MkIdentifier((yyvsp[(3) - (6)].specifier).name), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].specifier).nsSpec, (yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); ;}
     break;
 
   case 224:
 
 /* Line 1464 of yacc.c  */
 #line 654 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), (yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), (yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ;}
     break;
 
   case 225:
 
 /* Line 1464 of yacc.c  */
 #line 656 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 226:
 
 /* Line 1464 of yacc.c  */
 #line 659 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), (yyvsp[(3) - (3)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);if(declMode) DeclClass((yyvsp[(3) - (3)].id).string); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), (yyvsp[(3) - (3)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);if(declMode) DeclClass((yyvsp[(3) - (3)].id)._class, (yyvsp[(3) - (3)].id).string); ;}
     break;
 
   case 227:
 
 /* Line 1464 of yacc.c  */
 #line 661 "expression.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), MkIdentifier((yyvsp[(3) - (3)].specifier).name), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (3)].specifier).name); FreeSpecifier((yyvsp[(3) - (3)].specifier)); ;}
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), MkIdentifier((yyvsp[(3) - (3)].specifier).name), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (3)].specifier).nsSpec, (yyvsp[(3) - (3)].specifier).name); FreeSpecifier((yyvsp[(3) - (3)].specifier)); ;}
     break;
 
   case 228:
@@ -6301,14 +6301,14 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 761 "expression.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id).string); ;}
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ;}
     break;
 
   case 271:
 
 /* Line 1464 of yacc.c  */
 #line 762 "expression.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 272:
@@ -6322,28 +6322,28 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 768 "expression.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id).string); ;}
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string); ;}
     break;
 
   case 274:
 
 /* Line 1464 of yacc.c  */
 #line 769 "expression.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (7)].id), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].id).string); ;}
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (7)].id), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].id)._class, (yyvsp[(2) - (7)].id).string); ;}
     break;
 
   case 275:
 
 /* Line 1464 of yacc.c  */
 #line 770 "expression.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (7)].specifier).name), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].specifier).name); FreeSpecifier((yyvsp[(2) - (7)].specifier)); ;}
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (7)].specifier).name), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].specifier).nsSpec, (yyvsp[(2) - (7)].specifier).name); FreeSpecifier((yyvsp[(2) - (7)].specifier)); ;}
     break;
 
   case 276:
 
 /* Line 1464 of yacc.c  */
 #line 771 "expression.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).nsSpec, (yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
     break;
 
   case 277:
index a402775..891bcd3 100644 (file)
@@ -564,7 +564,7 @@ type:
   /* | identifier identifier
    {
    #ifdef PRECOMPILER
-      DeclClass($1.string);
+      DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       resetScannerPos(&@1.start);
       yyclearin;
@@ -635,30 +635,30 @@ strict_type_specifier:
 
 
 struct_or_union_specifier_compound:
-         struct_or_union identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $2, $4); if(declMode) DeclClass($2.string); }
+         struct_or_union identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $2, $4); if(declMode) DeclClass($2._class, $2.string); }
        | struct_or_union '{' struct_declaration_list '}'              { $$ = MkStructOrUnion($1, null, $3); }
-   | struct_or_union identifier '{' '}'   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2.string); }
+   | struct_or_union identifier '{' '}'   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2._class, $2.string); }
    | struct_or_union '{' '}'              { $$ = MkStructOrUnion($1, null, null); }
        | struct_or_union strict_type '{' struct_declaration_list '}'
-      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), $4); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), $4); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
 
-       | struct_or_union ext_decl identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $3, $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.string); }
+       | struct_or_union ext_decl identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $3, $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3._class, $3.string); }
        | struct_or_union ext_decl '{' struct_declaration_list '}'              { $$ = MkStructOrUnion($1, null, $4); $$.extDeclStruct = $2; }
-   | struct_or_union ext_decl identifier '{' '}'   { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.string); }
+   | struct_or_union ext_decl identifier '{' '}'   { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2; if(declMode) DeclClass($3._class, $3.string); }
    | struct_or_union ext_decl '{' '}'              { $$ = MkStructOrUnion($1, null, null); $$.extDeclStruct = $2; }
        | struct_or_union ext_decl strict_type '{' struct_declaration_list '}'
-      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.name); FreeSpecifier($3); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); }
        ;
 
 struct_or_union_specifier_nocompound:
-         struct_or_union identifier                                   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2.string); }
+         struct_or_union identifier                                   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2._class, $2.string); }
        | struct_or_union strict_type
-      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), null); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), null); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
 
        | struct_or_union ext_decl identifier
-      { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2;if(declMode) DeclClass($3.string); }
+      { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2;if(declMode) DeclClass($3._class, $3.string); }
        | struct_or_union ext_decl strict_type
-      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.name); FreeSpecifier($3); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); }
        ;
 
 struct_or_union:
@@ -758,17 +758,17 @@ struct_declarator:
        ;
 
 enum_specifier_nocompound:
-     ENUM identifier                            { $$ = MkEnum($2, null); if(declMode) DeclClass($2.string); }
-   | ENUM strict_type                           { $$ = MkEnum(MkIdentifier($2.name), null); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+     ENUM identifier                            { $$ = MkEnum($2, null); if(declMode) DeclClass($2._class, $2.string); }
+   | ENUM strict_type                           { $$ = MkEnum(MkIdentifier($2.name), null); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
    ;
 
 enum_specifier_compound:
          ENUM '{' enumerator_list '}'
       { $$ = MkEnum(null, $3); }
-       | ENUM identifier '{' enumerator_list '}'    { $$ = MkEnum($2, $4); if(declMode) DeclClass($2.string); }
-   | ENUM identifier '{' enumerator_list ';' struct_declaration_list '}'    { $$ = MkEnum($2, $4); $$.definitions = $6; if(declMode) DeclClass($2.string); }
-       | ENUM strict_type '{' enumerator_list ';' struct_declaration_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); $$.definitions = $6; if(declMode) DeclClass($2.name); FreeSpecifier($2); }
-   | ENUM strict_type '{' enumerator_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+       | ENUM identifier '{' enumerator_list '}'    { $$ = MkEnum($2, $4); if(declMode) DeclClass($2._class, $2.string); }
+   | ENUM identifier '{' enumerator_list ';' struct_declaration_list '}'    { $$ = MkEnum($2, $4); $$.definitions = $6; if(declMode) DeclClass($2._class, $2.string); }
+       | ENUM strict_type '{' enumerator_list ';' struct_declaration_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); $$.definitions = $6; if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
+   | ENUM strict_type '{' enumerator_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
        ;
 
 enumerator_list:
index 3df5862..484ef68 100644 (file)
@@ -583,8 +583,10 @@ public void PrePreProcessClassDefinitions()
          if(external.type == classExternal)
          {
             ClassDefinition _class = external._class;
-            if(_class.definitions && (!_class.symbol.registered || !inCompiler))
+            if(/*_class.definitions &&*/ (!_class.symbol.registered || !inCompiler))
             {
+               if(_class.definitions)
+                  _class.symbol.mustRegister = true;
                ProcessClass(normalClass, _class.definitions, _class.symbol, _class.baseSpecs, null, _class.loc, ast, external.prev, null, _class.declMode);
                _class.symbol.isStatic = _class.declMode == staticAccess;
             }
@@ -623,6 +625,10 @@ public void PrePreProcessClassDefinitions()
                               classType = unionClass;
                            else
                               classType = structClass;
+
+                           if(specifier.definitions || specifier.type == enumSpecifier || specifier.baseSpecs)
+                              symbol.mustRegister = true;
+
                            ProcessClass(classType, specifier.definitions, symbol, specifier.baseSpecs, specifier.list, specifier.loc, ast, external.prev, declaration.declarators, declaration.declMode);
                            symbol.isStatic = declaration.declMode == staticAccess;
                         }
index cff9733..5c82b2f 100644 (file)
@@ -1231,137 +1231,137 @@ static const yytype_int16 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   282,   282,   311,   370,   371,   481,   485,   488,   489,
-     490,   539,   541,   546,   551,   556,   558,   563,   565,   570,
-     572,   577,   579,   581,   583,   585,   589,   593,   606,   608,
-     610,   612,   614,   620,   622,   627,   632,   637,   639,   641,
-     646,   647,   651,   652,   663,   667,   668,   670,   675,   676,
-     678,   681,   693,   704,   723,   725,   730,   731,   732,   733,
-     734,   735,   736,   737,   750,   754,   755,   756,   757,   761,
-     762,   763,   764,   765,   766,   767,   771,   773,   778,   780,
-     782,   784,   786,   816,   818,   823,   825,   827,   829,   831,
-     860,   862,   864,   869,   871,   876,   878,   882,   884,   886,
-     888,   893,   896,   899,   902,   967,   969,   974,   976,   978,
-     980,   982,  1013,  1017,  1018,  1019,  1023,  1024,  1025,  1029,
-    1030,  1031,  1032,  1036,  1039,  1042,  1045,  1048,  1053,  1054,
-    1056,  1058,  1060,  1062,  1067,  1071,  1074,  1077,  1080,  1083,
-    1088,  1089,  1091,  1096,  1100,  1102,  1107,  1109,  1114,  1116,
-    1121,  1126,  1128,  1133,  1135,  1137,  1139,  1144,  1146,  1148,
-    1150,  1155,  1156,  1157,  1158,  1159,  1160,  1161,  1162,  1163,
-    1164,  1165,  1167,  1168,  1170,  1174,  1177,  1178,  1179,  1180,
-    1181,  1182,  1183,  1184,  1185,  1186,  1187,  1188,  1189,  1190,
-    1192,  1193,  1197,  1198,  1199,  1203,  1207,  1208,  1209,  1213,
-    1214,  1215,  1216,  1217,  1221,  1222,  1234,  1235,  1239,  1240,
-    1241,  1242,  1243,  1244,  1245,  1246,  1250,  1254,  1255,  1259,
-    1267,  1268,  1272,  1273,  1274,  1278,  1279,  1283,  1284,  1285,
-    1286,  1287,  1288,  1328,  1329,  1333,  1341,  1342,  1350,  1351,
-    1353,  1354,  1363,  1364,  1368,  1375,  1382,  1388,  1395,  1401,
-    1410,  1417,  1423,  1429,  1435,  1441,  1447,  1458,  1463,  1464,
-    1469,  1470,  1471,  1475,  1479,  1480,  1481,  1482,  1483,  1484,
-    1485,  1498,  1499,  1500,  1501,  1502,  1503,  1504,  1505,  1506,
-    1507,  1508,  1509,  1510,  1511,  1512,  1513,  1514,  1515,  1516,
-    1517,  1518,  1519,  1520,  1521,  1523,  1524,  1525,  1526,  1527,
-    1529,  1530,  1534,  1538,  1542,  1543,  1547,  1549,  1550,  1551,
-    1552,  1553,  1554,  1555,  1556,  1557,  1559,  1560,  1561,  1562,
-    1563,  1564,  1565,  1566,  1593,  1594,  1595,  1596,  1600,  1601,
-    1602,  1603,  1604,  1608,  1609,  1610,  1611,  1613,  1614,  1615,
-    1616,  1619,  1620,  1624,  1625,  1634,  1635,  1636,  1637,  1638,
-    1639,  1640,  1641,  1645,  1646,  1650,  1651,  1652,  1653,  1654,
-    1655,  1656,  1660,  1661,  1662,  1663,  1664,  1668,  1669,  1670,
-    1671,  1672,  1676,  1684,  1685,  1686,  1687,  1688,  1689,  1690,
-    1691,  1692,  1696,  1697,  1698,  1699,  1700,  1702,  1703,  1704,
-    1705,  1709,  1710,  1711,  1713,  1714,  1718,  1719,  1720,  1722,
-    1723,  1727,  1728,  1729,  1731,  1732,  1736,  1737,  1738,  1742,
-    1743,  1744,  1748,  1749,  1750,  1751,  1752,  1754,  1755,  1756,
-    1757,  1759,  1760,  1761,  1762,  1764,  1765,  1766,  1767,  1771,
-    1772,  1773,  1774,  1775,  1777,  1778,  1779,  1780,  1784,  1785,
-    1786,  1787,  1788,  1789,  1790,  1791,  1792,  1793,  1794,  1798,
-    1799,  1800,  1801,  1805,  1806,  1807,  1811,  1812,  1813,  1814,
-    1816,  1817,  1819,  1820,  1825,  1827,  1832,  1860,  1861,  1862,
-    1863,  1865,  1866,  1867,  1868,  1870,  1871,  1875,  1876,  1885,
-    1886,  1890,  1891,  1892,  1893,  1894,  1895,  1896,  1900,  1901,
-    1905,  1909,  1913,  1920,  1921,  1922,  1923,  1924,  1928,  1929,
-    1980,  1981,  1982,  1983,  1984,  1985,  1986,  1990,  1991,  1992,
-    1993,  1994,  2001,  2002,  2003,  2004,  2008,  2009,  2010,  2012,
-    2013,  2017,  2018,  2019,  2021,  2022,  2026,  2027,  2028,  2030,
-    2031,  2035,  2036,  2037,  2041,  2042,  2043,  2047,  2048,  2049,
-    2050,  2051,  2052,  2053,  2054,  2055,  2057,  2058,  2059,  2060,
-    2061,  2062,  2063,  2064,  2066,  2067,  2068,  2069,  2071,  2072,
-    2073,  2074,  2076,  2084,  2088,  2093,  2100,  2101,  2105,  2110,
-    2111,  2115,  2116,  2117,  2118,  2124,  2125,  2126,  2130,  2131,
-    2132,  2133,  2137,  2139,  2143,  2144,  2145,  2146,  2147,  2148,
-    2149,  2153,  2154,  2155,  2156,  2157,  2158,  2159,  2163,  2164,
-    2165,  2169,  2170,  2171,  2175,  2179,  2180,  2184,  2185,  2186,
-    2190,  2191,  2193,  2194,  2195,  2196,  2197,  2199,  2200,  2201,
-    2202,  2203,  2205,  2206,  2210,  2211,  2215,  2216,  2217,  2221,
-    2222,  2223,  2224,  2225,  2226,  2227,  2228,  2229,  2231,  2232,
-    2234,  2235,  2236,  2237,  2238,  2240,  2241,  2242,  2243,  2247,
-    2248,  2252,  2253,  2257,  2261,  2262,  2263,  2268,  2269,  2273,
-    2274,  2275,  2276,  2277,  2278,  2279,  2280,  2281,  2282,  2283,
-    2284,  2285,  2286,  2287,  2288,  2289,  2290,  2291,  2292,  2293,
-    2294,  2295,  2296,  2297,  2298,  2302,  2303,  2304,  2305,  2306,
-    2307,  2308,  2309,  2310,  2311,  2312,  2313,  2314,  2315,  2316,
-    2317,  2318,  2319,  2320,  2321,  2322,  2323,  2324,  2325,  2331,
-    2333,  2335,  2337,  2339,  2341,  2343,  2345,  2347,  2349,  2354,
-    2355,  2359,  2365,  2371,  2378,  2388,  2389,  2390,  2391,  2395,
-    2396,  2397,  2399,  2400,  2401,  2403,  2404,  2405,  2409,  2413,
-    2421,  2430,  2439,  2440,  2442,  2443,  2447,  2454,  2461,  2464,
-    2477,  2491,  2494,  2496,  2498,  2503,  2504,  2508,  2509,  2510,
-    2511,  2512,  2513,  2514,  2515,  2519,  2520,  2521,  2522,  2523,
-    2524,  2525,  2526,  2527,  2528,  2532,  2533,  2534,  2535,  2536,
-    2537,  2538,  2539,  2540,  2541,  2545,  2546,  2547,  2548,  2549,
-    2550,  2551,  2552,  2553,  2554,  2555,  2556,  2560,  2561,  2562,
-    2563,  2564,  2565,  2566,  2567,  2568,  2569,  2573,  2574,  2578,
-    2579,  2580,  2581,  2582,  2583,  2584,  2585,  2586,  2588,  2590,
-    2608,  2626,  2627,  2631,  2632,  2633,  2634,  2635,  2636,  2637,
-    2638,  2639,  2657,  2674,  2675,  2676,  2677,  2678,  2679,  2680,
-    2681,  2682,  2683,  2684,  2685,  2686,  2704,  2721,  2722,  2723,
-    2724,  2725,  2726,  2727,  2728,  2729,  2730,  2731,  2732,  2733,
-    2751,  2768,  2769,  2773,  2774,  2775,  2776,  2777,  2781,  2782,
-    2789,  2791,  2800,  2809,  2818,  2827,  2828,  2829,  2830,  2834,
-    2835,  2836,  2837,  2838,  2839,  2840,  2841,  2842,  2846,  2850,
-    2851,  2852,  2853,  2854,  2859,  2868,  2877,  2886,  2900,  2901,
-    2906,  2910,  2911,  2912,  2913,  2914,  2919,  2928,  2937,  2946,
-    2960,  2961,  3010,  3011,  3012,  3013,  3025,  3026,  3027,  3032,
-    3033,  3034,  3035,  3036,  3040,  3041,  3045,  3046,  3047,  3051,
-    3052,  3056,  3057,  3058,  3059,  3060,  3061,  3062,  3063,  3064,
-    3065,  3066,  3067,  3068,  3069,  3070,  3071,  3075,  3076,  3077,
-    3078,  3079,  3080,  3081,  3082,  3086,  3087,  3088,  3089,  3093,
-    3094,  3095,  3096,  3097,  3101,  3102,  3103,  3104,  3105,  3109,
-    3110,  3112,  3114,  3116,  3121,  3122,  3124,  3126,  3131,  3132,
-    3133,  3134,  3138,  3139,  3140,  3141,  3145,  3146,  3147,  3148,
-    3152,  3153,  3154,  3155,  3159,  3160,  3161,  3162,  3166,  3167,
-    3168,  3185,  3186,  3187,  3188,  3201,  3218,  3219,  3224,  3225,
-    3229,  3230,  3231,  3232,  3235,  3236,  3240,  3241,  3242,  3246,
-    3250,  3254,  3255,  3256,  3257,  3258,  3267,  3276,  3277,  3278,
-    3279,  3283,  3284,  3288,  3289,  3294,  3295,  3296,  3297,  3298,
-    3299,  3318,  3319,  3323,  3324,  3325,  3326,  3327,  3328,  3330,
-    3331,  3332,  3333,  3337,  3338,  3339,  3340,  3341,  3343,  3344,
-    3345,  3349,  3350,  3351,  3352,  3353,  3354,  3358,  3359,  3360,
-    3365,  3366,  3367,  3368,  3369,  3370,  3371,  3372,  3373,  3374,
-    3375,  3376,  3377,  3381,  3382,  3383,  3384,  3385,  3386,  3387,
-    3391,  3392,  3393,  3397,  3398,  3399,  3403,  3404,  3405,  3406,
-    3408,  3409,  3410,  3412,  3413,  3414,  3415,  3417,  3418,  3419,
-    3423,  3424,  3425,  3426,  3427,  3429,  3430,  3431,  3432,  3433,
-    3437,  3438,  3439,  3440,  3441,  3442,  3443,  3445,  3446,  3447,
-    3448,  3449,  3453,  3454,  3455,  3459,  3460,  3464,  3465,  3466,
-    3467,  3471,  3472,  3473,  3475,  3476,  3477,  3481,  3485,  3486,
-    3488,  3489,  3490,  3494,  3495,  3496,  3497,  3501,  3502,  3506,
-    3507,  3508,  3512,  3513,  3514,  3515,  3516,  3517,  3518,  3522,
-    3523,  3524,  3525,  3529,  3530,  3531,  3532,  3536,  3540,  3544,
-    3546,  3549,  3555,  3556,  3557,  3561,  3562,  3563,  3564,  3565,
-    3566,  3570,  3571,  3575,  3576,  3577,  3579,  3580,  3582,  3583,
-    3584,  3585,  3586,  3588,  3589,  3593,  3594,  3595,  3596,  3600,
-    3601,  3602,  3603,  3605,  3606,  3607,  3608,  3609,  3610,  3611,
-    3614,  3618,  3619,  3623,  3624,  3628,  3629,  3630,  3631,  3632,
-    3633,  3634,  3635,  3639,  3640,  3641,  3642,  3648,  3649,  3651,
-    3652,  3655,  3656,  3659,  3660,  3661,  3662,  3663,  3664,  3668,
-    3669,  3681,  3682,  3685,  3688,  3690,  3691,  3692,  3702,  3704,
-    3705,  3707,  3708,  3709,  3710,  3720,  3721,  3722,  3723,  3724,
-    3725,  3729,  3730,  3739,  3741,  3742,  3744,  3746,  3750,  3751,
-    3752,  3753,  3754,  3758,  3759,  3760,  3762,  3767,  3768,  3769,
-    3773,  3774,  3775,  3779,  3783,  3784,  3785,  3789,  3790,  3794,
-    3795,  3799,  3800,  3801,  3802,  3806,  3810,  3814,  3818
+       0,   282,   282,   301,   340,   341,   421,   425,   428,   429,
+     430,   469,   471,   476,   481,   486,   488,   493,   495,   500,
+     502,   507,   509,   511,   513,   515,   519,   523,   536,   538,
+     540,   542,   544,   550,   552,   557,   562,   567,   569,   571,
+     576,   577,   581,   582,   593,   597,   598,   600,   605,   606,
+     608,   611,   623,   634,   653,   655,   660,   661,   662,   663,
+     664,   665,   666,   667,   680,   684,   685,   686,   687,   691,
+     692,   693,   694,   695,   696,   697,   701,   703,   708,   710,
+     712,   714,   716,   746,   748,   753,   755,   757,   759,   761,
+     790,   792,   794,   799,   801,   806,   808,   812,   814,   816,
+     818,   823,   826,   829,   832,   897,   899,   904,   906,   908,
+     910,   912,   943,   947,   948,   949,   953,   954,   955,   959,
+     960,   961,   962,   966,   969,   972,   975,   978,   983,   984,
+     986,   988,   990,   992,   997,  1001,  1004,  1007,  1010,  1013,
+    1018,  1019,  1021,  1026,  1030,  1032,  1037,  1039,  1044,  1046,
+    1051,  1056,  1058,  1063,  1065,  1067,  1069,  1074,  1076,  1078,
+    1080,  1085,  1086,  1087,  1088,  1089,  1090,  1091,  1092,  1093,
+    1094,  1095,  1097,  1098,  1100,  1104,  1107,  1108,  1109,  1110,
+    1111,  1112,  1113,  1114,  1115,  1116,  1117,  1118,  1119,  1120,
+    1122,  1123,  1127,  1128,  1129,  1133,  1137,  1138,  1139,  1143,
+    1144,  1145,  1146,  1147,  1151,  1152,  1164,  1165,  1169,  1170,
+    1171,  1172,  1173,  1174,  1175,  1176,  1180,  1184,  1185,  1189,
+    1197,  1198,  1202,  1203,  1204,  1208,  1209,  1213,  1214,  1215,
+    1216,  1217,  1218,  1258,  1259,  1263,  1271,  1272,  1280,  1281,
+    1283,  1284,  1293,  1294,  1298,  1305,  1312,  1318,  1325,  1331,
+    1340,  1347,  1353,  1359,  1365,  1371,  1377,  1388,  1393,  1394,
+    1399,  1400,  1401,  1405,  1409,  1410,  1411,  1412,  1413,  1414,
+    1415,  1428,  1429,  1430,  1431,  1432,  1433,  1434,  1435,  1436,
+    1437,  1438,  1439,  1440,  1441,  1442,  1443,  1444,  1445,  1446,
+    1447,  1448,  1449,  1450,  1451,  1453,  1454,  1455,  1456,  1457,
+    1459,  1460,  1464,  1468,  1472,  1473,  1477,  1479,  1480,  1481,
+    1482,  1483,  1484,  1485,  1486,  1487,  1489,  1490,  1491,  1492,
+    1493,  1494,  1495,  1496,  1523,  1524,  1525,  1526,  1530,  1531,
+    1532,  1533,  1534,  1538,  1539,  1540,  1541,  1543,  1544,  1545,
+    1546,  1549,  1550,  1554,  1555,  1564,  1565,  1566,  1567,  1568,
+    1569,  1570,  1571,  1575,  1576,  1580,  1581,  1582,  1583,  1584,
+    1585,  1586,  1590,  1591,  1592,  1593,  1594,  1598,  1599,  1600,
+    1601,  1602,  1606,  1614,  1615,  1616,  1617,  1618,  1619,  1620,
+    1621,  1622,  1626,  1627,  1628,  1629,  1630,  1632,  1633,  1634,
+    1635,  1639,  1640,  1641,  1643,  1644,  1648,  1649,  1650,  1652,
+    1653,  1657,  1658,  1659,  1661,  1662,  1666,  1667,  1668,  1672,
+    1673,  1674,  1678,  1679,  1680,  1681,  1682,  1684,  1685,  1686,
+    1687,  1689,  1690,  1691,  1692,  1694,  1695,  1696,  1697,  1701,
+    1702,  1703,  1704,  1705,  1707,  1708,  1709,  1710,  1714,  1715,
+    1716,  1717,  1718,  1719,  1720,  1721,  1722,  1723,  1724,  1728,
+    1729,  1730,  1731,  1735,  1736,  1737,  1741,  1742,  1743,  1744,
+    1746,  1747,  1749,  1750,  1755,  1757,  1762,  1790,  1791,  1792,
+    1793,  1795,  1796,  1797,  1798,  1800,  1801,  1805,  1806,  1815,
+    1816,  1820,  1821,  1822,  1823,  1824,  1825,  1826,  1830,  1831,
+    1835,  1839,  1843,  1850,  1851,  1852,  1853,  1854,  1858,  1859,
+    1902,  1903,  1904,  1905,  1906,  1907,  1908,  1912,  1913,  1914,
+    1915,  1916,  1923,  1924,  1925,  1926,  1930,  1931,  1932,  1934,
+    1935,  1939,  1940,  1941,  1943,  1944,  1948,  1949,  1950,  1952,
+    1953,  1957,  1958,  1959,  1963,  1964,  1965,  1969,  1970,  1971,
+    1972,  1973,  1974,  1975,  1976,  1977,  1979,  1980,  1981,  1982,
+    1983,  1984,  1985,  1986,  1988,  1989,  1990,  1991,  1993,  1994,
+    1995,  1996,  1998,  2006,  2010,  2015,  2022,  2023,  2027,  2032,
+    2033,  2037,  2038,  2039,  2040,  2046,  2047,  2048,  2052,  2053,
+    2054,  2055,  2059,  2061,  2065,  2066,  2067,  2068,  2069,  2070,
+    2071,  2075,  2076,  2077,  2078,  2079,  2080,  2081,  2085,  2086,
+    2087,  2091,  2092,  2093,  2097,  2101,  2102,  2106,  2107,  2108,
+    2112,  2113,  2115,  2116,  2117,  2118,  2119,  2121,  2122,  2123,
+    2124,  2125,  2127,  2128,  2132,  2133,  2137,  2138,  2139,  2143,
+    2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2153,  2154,
+    2156,  2157,  2158,  2159,  2160,  2162,  2163,  2164,  2165,  2169,
+    2170,  2174,  2175,  2179,  2183,  2184,  2185,  2190,  2191,  2195,
+    2196,  2197,  2198,  2199,  2200,  2201,  2202,  2203,  2204,  2205,
+    2206,  2207,  2208,  2209,  2210,  2211,  2212,  2213,  2214,  2215,
+    2216,  2217,  2218,  2219,  2220,  2224,  2225,  2226,  2227,  2228,
+    2229,  2230,  2231,  2232,  2233,  2234,  2235,  2236,  2237,  2238,
+    2239,  2240,  2241,  2242,  2243,  2244,  2245,  2246,  2247,  2253,
+    2255,  2257,  2259,  2261,  2263,  2265,  2267,  2269,  2271,  2276,
+    2277,  2281,  2287,  2293,  2300,  2310,  2311,  2312,  2313,  2317,
+    2318,  2319,  2321,  2322,  2323,  2325,  2326,  2327,  2331,  2335,
+    2343,  2352,  2361,  2362,  2364,  2365,  2369,  2376,  2383,  2386,
+    2399,  2413,  2416,  2418,  2420,  2425,  2426,  2430,  2431,  2432,
+    2433,  2434,  2435,  2436,  2437,  2441,  2442,  2443,  2444,  2445,
+    2446,  2447,  2448,  2449,  2450,  2454,  2455,  2456,  2457,  2458,
+    2459,  2460,  2461,  2462,  2463,  2467,  2468,  2469,  2470,  2471,
+    2472,  2473,  2474,  2475,  2476,  2477,  2478,  2482,  2483,  2484,
+    2485,  2486,  2487,  2488,  2489,  2490,  2491,  2495,  2496,  2500,
+    2501,  2502,  2503,  2504,  2505,  2506,  2507,  2508,  2510,  2512,
+    2520,  2530,  2531,  2535,  2536,  2537,  2538,  2539,  2540,  2541,
+    2542,  2543,  2551,  2560,  2561,  2562,  2563,  2564,  2565,  2566,
+    2567,  2568,  2569,  2570,  2571,  2572,  2580,  2589,  2590,  2591,
+    2592,  2593,  2594,  2595,  2596,  2597,  2598,  2599,  2600,  2601,
+    2609,  2618,  2619,  2623,  2624,  2625,  2626,  2627,  2631,  2632,
+    2639,  2641,  2650,  2659,  2668,  2677,  2678,  2679,  2680,  2684,
+    2685,  2686,  2687,  2688,  2689,  2690,  2691,  2692,  2696,  2700,
+    2701,  2702,  2703,  2704,  2709,  2718,  2727,  2736,  2750,  2751,
+    2756,  2760,  2761,  2762,  2763,  2764,  2769,  2778,  2787,  2796,
+    2810,  2811,  2860,  2861,  2862,  2863,  2875,  2876,  2877,  2882,
+    2883,  2884,  2885,  2886,  2890,  2891,  2895,  2896,  2897,  2901,
+    2902,  2906,  2907,  2908,  2909,  2910,  2911,  2912,  2913,  2914,
+    2915,  2916,  2917,  2918,  2919,  2920,  2921,  2925,  2926,  2927,
+    2928,  2929,  2930,  2931,  2932,  2936,  2937,  2938,  2939,  2943,
+    2944,  2945,  2946,  2947,  2951,  2952,  2953,  2954,  2955,  2959,
+    2960,  2962,  2964,  2966,  2971,  2972,  2974,  2976,  2981,  2982,
+    2983,  2984,  2988,  2989,  2990,  2991,  2995,  2996,  2997,  2998,
+    3002,  3003,  3004,  3005,  3009,  3010,  3011,  3012,  3016,  3017,
+    3018,  3035,  3036,  3037,  3038,  3051,  3068,  3069,  3074,  3075,
+    3079,  3080,  3081,  3082,  3085,  3086,  3090,  3091,  3092,  3096,
+    3100,  3104,  3105,  3106,  3107,  3108,  3117,  3126,  3127,  3128,
+    3129,  3133,  3134,  3138,  3139,  3144,  3145,  3146,  3147,  3148,
+    3149,  3168,  3169,  3173,  3174,  3175,  3176,  3177,  3178,  3180,
+    3181,  3182,  3183,  3187,  3188,  3189,  3190,  3191,  3193,  3194,
+    3195,  3199,  3200,  3201,  3202,  3203,  3204,  3208,  3209,  3210,
+    3215,  3216,  3217,  3218,  3219,  3220,  3221,  3222,  3223,  3224,
+    3225,  3226,  3227,  3231,  3232,  3233,  3234,  3235,  3236,  3237,
+    3241,  3242,  3243,  3247,  3248,  3249,  3253,  3254,  3255,  3256,
+    3258,  3259,  3260,  3262,  3263,  3264,  3265,  3267,  3268,  3269,
+    3273,  3274,  3275,  3276,  3277,  3279,  3280,  3281,  3282,  3283,
+    3287,  3288,  3289,  3290,  3291,  3292,  3293,  3295,  3296,  3297,
+    3298,  3299,  3303,  3304,  3305,  3309,  3310,  3314,  3315,  3316,
+    3317,  3321,  3322,  3323,  3325,  3326,  3327,  3331,  3335,  3336,
+    3338,  3339,  3340,  3344,  3345,  3346,  3347,  3351,  3352,  3356,
+    3357,  3358,  3362,  3363,  3364,  3365,  3366,  3367,  3368,  3372,
+    3373,  3374,  3375,  3379,  3380,  3381,  3382,  3386,  3390,  3394,
+    3396,  3399,  3405,  3406,  3407,  3411,  3412,  3413,  3414,  3415,
+    3416,  3420,  3421,  3425,  3426,  3427,  3429,  3430,  3432,  3433,
+    3434,  3435,  3436,  3438,  3439,  3443,  3444,  3445,  3446,  3450,
+    3451,  3452,  3453,  3455,  3456,  3457,  3458,  3459,  3460,  3461,
+    3464,  3468,  3469,  3473,  3474,  3478,  3479,  3480,  3481,  3482,
+    3483,  3484,  3485,  3489,  3490,  3491,  3492,  3498,  3499,  3501,
+    3502,  3505,  3506,  3509,  3510,  3511,  3512,  3513,  3514,  3518,
+    3519,  3531,  3532,  3535,  3538,  3540,  3541,  3542,  3552,  3554,
+    3555,  3557,  3558,  3559,  3560,  3570,  3571,  3572,  3573,  3574,
+    3575,  3579,  3580,  3589,  3591,  3592,  3594,  3596,  3600,  3601,
+    3602,  3603,  3604,  3608,  3609,  3610,  3612,  3617,  3618,  3619,
+    3623,  3624,  3625,  3629,  3633,  3634,  3635,  3639,  3640,  3644,
+    3645,  3649,  3650,  3651,  3652,  3656,  3660,  3664,  3668
 };
 #endif
 
@@ -13484,17 +13484,7 @@ yyreduce:
 #line 283 "grammar.y"
     {
       (yyval.specifier) = null;
-      // if($1._class && !$1._class.name)
-      if((yyvsp[(1) - (2)].id)._class)
-      {
-         char name[1024];
-         strcpy(name,  (yyvsp[(1) - (2)].id)._class.name ? (yyvsp[(1) - (2)].id)._class.name : "");
-         strcat(name, "::");
-         strcat(name, (yyvsp[(1) - (2)].id).string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass((yyvsp[(1) - (2)].id).string);
+      _DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
 
       FreeIdentifier((yyvsp[(1) - (2)].id));
 
@@ -13515,21 +13505,11 @@ yyreduce:
   case 3:
 
 /* Line 1464 of yacc.c  */
-#line 312 "grammar.y"
+#line 302 "grammar.y"
     {
       (yyval.specifier) = null;
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if((yyvsp[(1) - (2)].id)._class)
-      {
-         char name[1024];
-         strcpy(name,  (yyvsp[(1) - (2)].id)._class.name ? (yyvsp[(1) - (2)].id)._class.name : "");
-         strcat(name, "::");
-         strcat(name, (yyvsp[(1) - (2)].id).string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass((yyvsp[(1) - (2)].id).string);
+      _DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
 
       FreeIdentifier((yyvsp[(1) - (2)].id));
 
@@ -13551,14 +13531,14 @@ yyreduce:
   case 4:
 
 /* Line 1464 of yacc.c  */
-#line 370 "grammar.y"
+#line 340 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (1)].specifier); ;}
     break;
 
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 372 "grammar.y"
+#line 342 "grammar.y"
     {
    #ifdef PRECOMPILER
       if(!(yyvsp[(1) - (2)].id).string[0])
@@ -13569,17 +13549,7 @@ yyreduce:
       }
       else
       {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (2)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (2)].id)._class.name ? (yyvsp[(1) - (2)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (2)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (2)].id).string);
+         _DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
 
          FreeIdentifier((yyvsp[(1) - (2)].id));
          FreeIdentifier((yyvsp[(2) - (2)].id));
@@ -13607,28 +13577,28 @@ yyreduce:
   case 6:
 
 /* Line 1464 of yacc.c  */
-#line 481 "grammar.y"
+#line 421 "grammar.y"
     { (yyval.specifier) = MkSpecifierName(yytext); ;}
     break;
 
   case 7:
 
 /* Line 1464 of yacc.c  */
-#line 485 "grammar.y"
+#line 425 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 9:
 
 /* Line 1464 of yacc.c  */
-#line 489 "grammar.y"
+#line 429 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (4)].specifier); SetClassTemplateArgs((yyval.specifier), (yyvsp[(3) - (4)].list)); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 10:
 
 /* Line 1464 of yacc.c  */
-#line 491 "grammar.y"
+#line 431 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[(1) - (4)].specifier);
       SetClassTemplateArgs((yyval.specifier), (yyvsp[(3) - (4)].list));
@@ -13644,119 +13614,119 @@ yyreduce:
   case 11:
 
 /* Line 1464 of yacc.c  */
-#line 540 "grammar.y"
+#line 470 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 542 "grammar.y"
+#line 472 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(1) - (1)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 547 "grammar.y"
+#line 477 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (3)].list), null, null, null); (yyval.classFunction).isConstructor = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 552 "grammar.y"
+#line 482 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(2) - (4)].list), null, null, null); (yyval.classFunction).isDestructor = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 557 "grammar.y"
+#line 487 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(2) - (3)].list), null, (yyvsp[(3) - (3)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 559 "grammar.y"
+#line 489 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 564 "grammar.y"
+#line 494 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 566 "grammar.y"
+#line 496 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(1) - (1)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 571 "grammar.y"
+#line 501 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(2) - (3)].list), null, (yyvsp[(3) - (3)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 573 "grammar.y"
+#line 503 "grammar.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 578 "grammar.y"
+#line 508 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 580 "grammar.y"
+#line 510 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 582 "grammar.y"
+#line 512 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 584 "grammar.y"
+#line 514 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 25:
 
 /* Line 1464 of yacc.c  */
-#line 586 "grammar.y"
+#line 516 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 26:
 
 /* Line 1464 of yacc.c  */
-#line 590 "grammar.y"
+#line 520 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 27:
 
 /* Line 1464 of yacc.c  */
-#line 594 "grammar.y"
+#line 524 "grammar.y"
     {
          if((yyvsp[(1) - (3)].classFunction).declarator)
          {
@@ -13771,112 +13741,112 @@ yyreduce:
   case 28:
 
 /* Line 1464 of yacc.c  */
-#line 607 "grammar.y"
+#line 537 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[(2) - (2)].stmt).loc.end; ;}
     break;
 
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 609 "grammar.y"
+#line 539 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (1)].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 611 "grammar.y"
+#line 541 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[(2) - (2)].stmt).loc.end; ;}
     break;
 
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 613 "grammar.y"
+#line 543 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (1)].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 32:
 
 /* Line 1464 of yacc.c  */
-#line 615 "grammar.y"
+#line 545 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 33:
 
 /* Line 1464 of yacc.c  */
-#line 621 "grammar.y"
+#line 551 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 34:
 
 /* Line 1464 of yacc.c  */
-#line 623 "grammar.y"
+#line 553 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, MkDeclaratorFunction((yyvsp[(2) - (2)].declarator), null), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 35:
 
 /* Line 1464 of yacc.c  */
-#line 628 "grammar.y"
+#line 558 "grammar.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 633 "grammar.y"
+#line 563 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 638 "grammar.y"
+#line 568 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end = (yyvsp[(2) - (2)].stmt).loc.end; (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 640 "grammar.y"
+#line 570 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (1)].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 642 "grammar.y"
+#line 572 "grammar.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (1)].classFunction), null); (yyval.classFunction).loc = (yyloc); (yyval.classFunction).loc.end.charPos++; (yyval.classFunction).loc.end.pos++;;}
     break;
 
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 646 "grammar.y"
+#line 576 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[(2) - (3)]).end;;}
     break;
 
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 647 "grammar.y"
+#line 577 "grammar.y"
     { (yyval.memberInit) = MkMemberInit(null, (yyvsp[(1) - (1)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc);;}
     break;
 
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 651 "grammar.y"
+#line 581 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[(2) - (3)]).end;;}
     break;
 
   case 43:
 
 /* Line 1464 of yacc.c  */
-#line 653 "grammar.y"
+#line 583 "grammar.y"
     {
          (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), MkInitializerAssignment(MkExpDummy()));
          (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yyval.memberInit).initializer.loc.end = (yylsp[(2) - (3)]).end;
@@ -13892,56 +13862,56 @@ yyreduce:
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 663 "grammar.y"
+#line 593 "grammar.y"
     { (yyval.memberInit) = MkMemberInit(null, (yyvsp[(1) - (1)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc);;}
     break;
 
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 667 "grammar.y"
+#line 597 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ;}
     break;
 
   case 46:
 
 /* Line 1464 of yacc.c  */
-#line 669 "grammar.y"
+#line 599 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 47:
 
 /* Line 1464 of yacc.c  */
-#line 671 "grammar.y"
+#line 601 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 675 "grammar.y"
+#line 605 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ;}
     break;
 
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 677 "grammar.y"
+#line 607 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 679 "grammar.y"
+#line 609 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 682 "grammar.y"
+#line 612 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(2) - (3)]).end;
          {
             Initializer dummy = MkInitializerAssignment(MkExpDummy());
@@ -13957,7 +13927,7 @@ yyreduce:
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 694 "grammar.y"
+#line 624 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(2) - (3)]).end;
          {
             Initializer dummy = MkInitializerAssignment(MkExpDummy());
@@ -13973,7 +13943,7 @@ yyreduce:
   case 53:
 
 /* Line 1464 of yacc.c  */
-#line 705 "grammar.y"
+#line 635 "grammar.y"
     {
          Initializer dummy = MkInitializerAssignment(MkExpDummy());
          MemberInit memberInit = MkMemberInit(null, dummy);
@@ -13994,63 +13964,63 @@ yyreduce:
   case 54:
 
 /* Line 1464 of yacc.c  */
-#line 724 "grammar.y"
+#line 654 "grammar.y"
     { if((yyvsp[(1) - (2)].list)->last) ((MemberInit)(yyvsp[(1) - (2)].list)->last).loc.end = (yylsp[(2) - (2)]).end; (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 55:
 
 /* Line 1464 of yacc.c  */
-#line 726 "grammar.y"
+#line 656 "grammar.y"
     { if((yyvsp[(1) - (2)].list)->last) ((MemberInit)(yyvsp[(1) - (2)].list)->last).loc.end = (yylsp[(2) - (2)]).end; (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 56:
 
 /* Line 1464 of yacc.c  */
-#line 730 "grammar.y"
+#line 660 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[(1) - (1)].list)); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 57:
 
 /* Line 1464 of yacc.c  */
-#line 731 "grammar.y"
+#line 661 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(1) - (1)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 58:
 
 /* Line 1464 of yacc.c  */
-#line 732 "grammar.y"
+#line 662 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[(2) - (2)].list)); ListAdd((yyval.list), members);  members.loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 59:
 
 /* Line 1464 of yacc.c  */
-#line 733 "grammar.y"
+#line 663 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 60:
 
 /* Line 1464 of yacc.c  */
-#line 734 "grammar.y"
+#line 664 "grammar.y"
     { MembersInit members = MkMembersInitList((yyvsp[(2) - (2)].list)); ListAdd((yyval.list), members); members.loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 61:
 
 /* Line 1464 of yacc.c  */
-#line 735 "grammar.y"
+#line 665 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 63:
 
 /* Line 1464 of yacc.c  */
-#line 738 "grammar.y"
+#line 668 "grammar.y"
     {
       MembersInit members = (MembersInit)(yyval.list)->last;
       if(members.type == dataMembersInit)
@@ -14068,224 +14038,224 @@ yyreduce:
   case 64:
 
 /* Line 1464 of yacc.c  */
-#line 750 "grammar.y"
+#line 680 "grammar.y"
     { MembersInit members = MkMembersInitList(MkList()); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[(1) - (1)]);  ;}
     break;
 
   case 66:
 
 /* Line 1464 of yacc.c  */
-#line 755 "grammar.y"
+#line 685 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[(1) - (1)].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 67:
 
 /* Line 1464 of yacc.c  */
-#line 756 "grammar.y"
+#line 686 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), MkMembersInitList((yyvsp[(2) - (2)].list)));   ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 68:
 
 /* Line 1464 of yacc.c  */
-#line 757 "grammar.y"
+#line 687 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), MkMembersInitList((yyvsp[(2) - (2)].list)));   ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 69:
 
 /* Line 1464 of yacc.c  */
-#line 761 "grammar.y"
+#line 691 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(1) - (1)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 70:
 
 /* Line 1464 of yacc.c  */
-#line 762 "grammar.y"
+#line 692 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 71:
 
 /* Line 1464 of yacc.c  */
-#line 763 "grammar.y"
+#line 693 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 72:
 
 /* Line 1464 of yacc.c  */
-#line 764 "grammar.y"
+#line 694 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 73:
 
 /* Line 1464 of yacc.c  */
-#line 765 "grammar.y"
+#line 695 "grammar.y"
     { ListAdd((yyval.list), MkMembersInitList((yyvsp[(2) - (2)].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 74:
 
 /* Line 1464 of yacc.c  */
-#line 766 "grammar.y"
+#line 696 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[(1) - (1)].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 75:
 
 /* Line 1464 of yacc.c  */
-#line 767 "grammar.y"
+#line 697 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[(1) - (2)].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 76:
 
 /* Line 1464 of yacc.c  */
-#line 772 "grammar.y"
+#line 702 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).start; (yyval.instance) = (yyvsp[(1) - (2)].instance); ;}
     break;
 
   case 77:
 
 /* Line 1464 of yacc.c  */
-#line 774 "grammar.y"
+#line 704 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).start; (yyval.instance) = (yyvsp[(1) - (3)].instance); ;}
     break;
 
   case 78:
 
 /* Line 1464 of yacc.c  */
-#line 779 "grammar.y"
+#line 709 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), (yyvsp[(4) - (4)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (4)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 79:
 
 /* Line 1464 of yacc.c  */
-#line 781 "grammar.y"
+#line 711 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (5)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (5)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 80:
 
 /* Line 1464 of yacc.c  */
-#line 783 "grammar.y"
+#line 713 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), (yyvsp[(4) - (4)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (4)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 81:
 
 /* Line 1464 of yacc.c  */
-#line 785 "grammar.y"
+#line 715 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (3)].list), MkExpIdentifier((yyvsp[(2) - (3)].id)), null); (yyval.instance).exp.loc = (yylsp[(2) - (3)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (3)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 82:
 
 /* Line 1464 of yacc.c  */
-#line 787 "grammar.y"
+#line 717 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), null);(yyval.instance).exp.loc = (yylsp[(2) - (4)]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (4)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 83:
 
 /* Line 1464 of yacc.c  */
-#line 817 "grammar.y"
+#line 747 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).start; ;}
     break;
 
   case 84:
 
 /* Line 1464 of yacc.c  */
-#line 819 "grammar.y"
+#line 749 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).start; ;}
     break;
 
   case 85:
 
 /* Line 1464 of yacc.c  */
-#line 824 "grammar.y"
+#line 754 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), (yyvsp[(4) - (4)].list));(yyval.instance).exp.loc = (yylsp[(2) - (4)]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 86:
 
 /* Line 1464 of yacc.c  */
-#line 826 "grammar.y"
+#line 756 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (5)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (5)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 87:
 
 /* Line 1464 of yacc.c  */
-#line 828 "grammar.y"
+#line 758 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), (yyvsp[(4) - (4)].list));(yyval.instance).exp.loc = (yylsp[(2) - (4)]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 88:
 
 /* Line 1464 of yacc.c  */
-#line 830 "grammar.y"
+#line 760 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (3)].list), MkExpIdentifier((yyvsp[(2) - (3)].id)), null);(yyval.instance).exp.loc = (yylsp[(2) - (3)]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (3)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 89:
 
 /* Line 1464 of yacc.c  */
-#line 832 "grammar.y"
+#line 762 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), null);(yyval.instance).exp.loc = (yylsp[(2) - (4)]);  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (4)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 90:
 
 /* Line 1464 of yacc.c  */
-#line 861 "grammar.y"
+#line 791 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (5)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(5) - (5)]).start;;}
     break;
 
   case 91:
 
 /* Line 1464 of yacc.c  */
-#line 863 "grammar.y"
+#line 793 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).exp.loc = (yylsp[(2) - (5)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(5) - (5)]).start;;}
     break;
 
   case 92:
 
 /* Line 1464 of yacc.c  */
-#line 865 "grammar.y"
+#line 795 "grammar.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), MkList());  (yyval.instance).exp.loc = (yylsp[(2) - (4)]); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).start;;}
     break;
 
   case 93:
 
 /* Line 1464 of yacc.c  */
-#line 870 "grammar.y"
+#line 800 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).start; (yyval.instance) = (yyvsp[(1) - (2)].instance); ;}
     break;
 
   case 94:
 
 /* Line 1464 of yacc.c  */
-#line 872 "grammar.y"
+#line 802 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).start; (yyval.instance) = (yyvsp[(1) - (3)].instance); ;}
     break;
 
   case 95:
 
 /* Line 1464 of yacc.c  */
-#line 877 "grammar.y"
+#line 807 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (3)].specifier), null, (yyvsp[(3) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 96:
 
 /* Line 1464 of yacc.c  */
-#line 879 "grammar.y"
+#line 809 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (3)]);
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (3)].id).string), null, (yyvsp[(3) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end; FreeIdentifier((yyvsp[(1) - (3)].id)); ;}
     break;
@@ -14293,35 +14263,35 @@ yyreduce:
   case 97:
 
 /* Line 1464 of yacc.c  */
-#line 883 "grammar.y"
+#line 813 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (3)].specifier), null, (yyvsp[(3) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 98:
 
 /* Line 1464 of yacc.c  */
-#line 885 "grammar.y"
+#line 815 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (2)].specifier), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 99:
 
 /* Line 1464 of yacc.c  */
-#line 887 "grammar.y"
+#line 817 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (4)].specifier), null, (yyvsp[(3) - (4)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (4)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 100:
 
 /* Line 1464 of yacc.c  */
-#line 889 "grammar.y"
+#line 819 "grammar.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (3)].specifier), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++;  ;}
     break;
 
   case 101:
 
 /* Line 1464 of yacc.c  */
-#line 894 "grammar.y"
+#line 824 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (3)]);
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (3)].id).string), null, (yyvsp[(3) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[(1) - (3)].id)); ;}
     break;
@@ -14329,7 +14299,7 @@ yyreduce:
   case 102:
 
 /* Line 1464 of yacc.c  */
-#line 897 "grammar.y"
+#line 827 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (2)]);
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (2)].id).string), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[(1) - (2)].id)); ;}
     break;
@@ -14337,7 +14307,7 @@ yyreduce:
   case 103:
 
 /* Line 1464 of yacc.c  */
-#line 900 "grammar.y"
+#line 830 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (4)]);
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (4)].id).string), null, (yyvsp[(3) - (4)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (4)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[(1) - (4)].id)); ;}
     break;
@@ -14345,7 +14315,7 @@ yyreduce:
   case 104:
 
 /* Line 1464 of yacc.c  */
-#line 903 "grammar.y"
+#line 833 "grammar.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (3)]);
       yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (3)].id).string), null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; FreeIdentifier((yyvsp[(1) - (3)].id)); ;}
     break;
@@ -14353,840 +14323,840 @@ yyreduce:
   case 105:
 
 /* Line 1464 of yacc.c  */
-#line 968 "grammar.y"
+#line 898 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).start; ;}
     break;
 
   case 106:
 
 /* Line 1464 of yacc.c  */
-#line 970 "grammar.y"
+#line 900 "grammar.y"
     { (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).start; ;}
     break;
 
   case 107:
 
 /* Line 1464 of yacc.c  */
-#line 975 "grammar.y"
+#line 905 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[(2) - (2)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 108:
 
 /* Line 1464 of yacc.c  */
-#line 977 "grammar.y"
+#line 907 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[(2) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (3)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 109:
 
 /* Line 1464 of yacc.c  */
-#line 979 "grammar.y"
+#line 909 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(1) - (2)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++;  ;}
     break;
 
   case 110:
 
 /* Line 1464 of yacc.c  */
-#line 981 "grammar.y"
+#line 911 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, null);  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (1)]).end; (yyval.instance).insideLoc.end = (yylsp[(1) - (1)]).end;  (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 111:
 
 /* Line 1464 of yacc.c  */
-#line 983 "grammar.y"
+#line 913 "grammar.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[(2) - (2)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).end; (yyval.instance).loc.end.charPos++; (yyval.instance).loc.end.pos++; ;}
     break;
 
   case 112:
 
 /* Line 1464 of yacc.c  */
-#line 1013 "grammar.y"
+#line 943 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); ;}
     break;
 
   case 113:
 
 /* Line 1464 of yacc.c  */
-#line 1017 "grammar.y"
+#line 947 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[(2) - (3)]).end; ;}
     break;
 
   case 114:
 
 /* Line 1464 of yacc.c  */
-#line 1018 "grammar.y"
+#line 948 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), MkInitializerAssignment(MkExpDummy())); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[(2) - (3)]).end; (yyval.memberInit).initializer.loc.end = (yylsp[(2) - (3)]).end; ;}
     break;
 
   case 115:
 
 /* Line 1464 of yacc.c  */
-#line 1019 "grammar.y"
+#line 949 "grammar.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (2)].exp), null); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); ;}
     break;
 
   case 116:
 
 /* Line 1464 of yacc.c  */
-#line 1023 "grammar.y"
+#line 953 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ((MemberInit)(yyval.list)->last).loc = (yyloc); ;}
     break;
 
   case 117:
 
 /* Line 1464 of yacc.c  */
-#line 1024 "grammar.y"
+#line 954 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 118:
 
 /* Line 1464 of yacc.c  */
-#line 1025 "grammar.y"
+#line 955 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 119:
 
 /* Line 1464 of yacc.c  */
-#line 1029 "grammar.y"
+#line 959 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ((MemberInit)(yyval.list)->last).loc = (yyloc); ;}
     break;
 
   case 120:
 
 /* Line 1464 of yacc.c  */
-#line 1030 "grammar.y"
+#line 960 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 121:
 
 /* Line 1464 of yacc.c  */
-#line 1031 "grammar.y"
+#line 961 "grammar.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 123:
 
 /* Line 1464 of yacc.c  */
-#line 1037 "grammar.y"
+#line 967 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (4)].list), null, (yyvsp[(3) - (4)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 124:
 
 /* Line 1464 of yacc.c  */
-#line 1040 "grammar.y"
+#line 970 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (5)].list), (yyvsp[(3) - (5)].declarator), (yyvsp[(4) - (5)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 125:
 
 /* Line 1464 of yacc.c  */
-#line 1043 "grammar.y"
+#line 973 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (3)].list), null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 126:
 
 /* Line 1464 of yacc.c  */
-#line 1046 "grammar.y"
+#line 976 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (4)].list), (yyvsp[(3) - (4)].declarator), null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 127:
 
 /* Line 1464 of yacc.c  */
-#line 1049 "grammar.y"
+#line 979 "grammar.y"
     { (yyval.prop) = MkProperty(null, null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 129:
 
 /* Line 1464 of yacc.c  */
-#line 1055 "grammar.y"
+#line 985 "grammar.y"
     { (yyvsp[(1) - (3)].prop).setStmt = (yyvsp[(3) - (3)].stmt); ;}
     break;
 
   case 130:
 
 /* Line 1464 of yacc.c  */
-#line 1057 "grammar.y"
+#line 987 "grammar.y"
     { (yyvsp[(1) - (3)].prop).getStmt = (yyvsp[(3) - (3)].stmt); ;}
     break;
 
   case 131:
 
 /* Line 1464 of yacc.c  */
-#line 1059 "grammar.y"
+#line 989 "grammar.y"
     { (yyvsp[(1) - (3)].prop).issetStmt = (yyvsp[(3) - (3)].stmt); ;}
     break;
 
   case 132:
 
 /* Line 1464 of yacc.c  */
-#line 1061 "grammar.y"
+#line 991 "grammar.y"
     { (yyvsp[(1) - (2)].prop).isWatchable = true; ;}
     break;
 
   case 133:
 
 /* Line 1464 of yacc.c  */
-#line 1063 "grammar.y"
+#line 993 "grammar.y"
     { (yyvsp[(1) - (3)].prop).category = (yyvsp[(3) - (3)].exp); ;}
     break;
 
   case 134:
 
 /* Line 1464 of yacc.c  */
-#line 1067 "grammar.y"
+#line 997 "grammar.y"
     { (yyvsp[(1) - (2)].prop).loc.end = (yylsp[(2) - (2)]).end; (yyval.prop) = (yyvsp[(1) - (2)].prop); ;}
     break;
 
   case 135:
 
 /* Line 1464 of yacc.c  */
-#line 1072 "grammar.y"
+#line 1002 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (4)].list), null, (yyvsp[(3) - (4)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 136:
 
 /* Line 1464 of yacc.c  */
-#line 1075 "grammar.y"
+#line 1005 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (5)].list), (yyvsp[(3) - (5)].declarator), (yyvsp[(4) - (5)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 137:
 
 /* Line 1464 of yacc.c  */
-#line 1078 "grammar.y"
+#line 1008 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (3)].list), null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 138:
 
 /* Line 1464 of yacc.c  */
-#line 1081 "grammar.y"
+#line 1011 "grammar.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (4)].list), (yyvsp[(3) - (4)].declarator), null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 139:
 
 /* Line 1464 of yacc.c  */
-#line 1084 "grammar.y"
+#line 1014 "grammar.y"
     { (yyval.prop) = MkProperty(null, null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 141:
 
 /* Line 1464 of yacc.c  */
-#line 1090 "grammar.y"
+#line 1020 "grammar.y"
     { (yyvsp[(1) - (3)].prop).setStmt = (yyvsp[(3) - (3)].stmt); ;}
     break;
 
   case 142:
 
 /* Line 1464 of yacc.c  */
-#line 1092 "grammar.y"
+#line 1022 "grammar.y"
     { (yyvsp[(1) - (3)].prop).getStmt = (yyvsp[(3) - (3)].stmt); ;}
     break;
 
   case 143:
 
 /* Line 1464 of yacc.c  */
-#line 1096 "grammar.y"
+#line 1026 "grammar.y"
     { (yyvsp[(1) - (2)].prop).loc.end = (yylsp[(2) - (2)]).end; ;}
     break;
 
   case 144:
 
 /* Line 1464 of yacc.c  */
-#line 1101 "grammar.y"
+#line 1031 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 145:
 
 /* Line 1464 of yacc.c  */
-#line 1103 "grammar.y"
+#line 1033 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].id)); ;}
     break;
 
   case 146:
 
 /* Line 1464 of yacc.c  */
-#line 1108 "grammar.y"
+#line 1038 "grammar.y"
     { (yyval.propertyWatch) = MkPropertyWatch((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 147:
 
 /* Line 1464 of yacc.c  */
-#line 1110 "grammar.y"
+#line 1040 "grammar.y"
     { (yyval.propertyWatch) = MkDeleteWatch((yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 148:
 
 /* Line 1464 of yacc.c  */
-#line 1115 "grammar.y"
+#line 1045 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[(1) - (1)].propertyWatch)); ;}
     break;
 
   case 149:
 
 /* Line 1464 of yacc.c  */
-#line 1117 "grammar.y"
+#line 1047 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].propertyWatch)); ;}
     break;
 
   case 150:
 
 /* Line 1464 of yacc.c  */
-#line 1122 "grammar.y"
+#line 1052 "grammar.y"
     { (yyval.propertyWatch) = MkPropertyWatch((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); ;}
     break;
 
   case 151:
 
 /* Line 1464 of yacc.c  */
-#line 1127 "grammar.y"
+#line 1057 "grammar.y"
     { (yyval.stmt) = MkWatchStmt(null, (yyvsp[(3) - (7)].exp), (yyvsp[(6) - (7)].list)); ;}
     break;
 
   case 152:
 
 /* Line 1464 of yacc.c  */
-#line 1129 "grammar.y"
+#line 1059 "grammar.y"
     { (yyval.stmt) = MkWatchStmt((yyvsp[(1) - (9)].exp), (yyvsp[(5) - (9)].exp), (yyvsp[(8) - (9)].list)); ;}
     break;
 
   case 153:
 
 /* Line 1464 of yacc.c  */
-#line 1134 "grammar.y"
+#line 1064 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt(null, (yyvsp[(3) - (6)].exp), (yyvsp[(5) - (6)].list)); ;}
     break;
 
   case 154:
 
 /* Line 1464 of yacc.c  */
-#line 1136 "grammar.y"
+#line 1066 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt((yyvsp[(1) - (8)].exp), (yyvsp[(5) - (8)].exp), (yyvsp[(7) - (8)].list)); ;}
     break;
 
   case 155:
 
 /* Line 1464 of yacc.c  */
-#line 1138 "grammar.y"
+#line 1068 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt(null, (yyvsp[(3) - (4)].exp), null); ;}
     break;
 
   case 156:
 
 /* Line 1464 of yacc.c  */
-#line 1140 "grammar.y"
+#line 1070 "grammar.y"
     { (yyval.stmt) = MkStopWatchingStmt((yyvsp[(1) - (6)].exp), (yyvsp[(5) - (6)].exp), null); ;}
     break;
 
   case 157:
 
 /* Line 1464 of yacc.c  */
-#line 1145 "grammar.y"
+#line 1075 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt(null, null); ;}
     break;
 
   case 158:
 
 /* Line 1464 of yacc.c  */
-#line 1147 "grammar.y"
+#line 1077 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt(null, (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 159:
 
 /* Line 1464 of yacc.c  */
-#line 1149 "grammar.y"
+#line 1079 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt((yyvsp[(1) - (3)].exp), null); ;}
     break;
 
   case 160:
 
 /* Line 1464 of yacc.c  */
-#line 1151 "grammar.y"
+#line 1081 "grammar.y"
     { (yyval.stmt) = MkFireWatchersStmt((yyvsp[(1) - (4)].exp), (yyvsp[(4) - (4)].list)); ;}
     break;
 
   case 161:
 
 /* Line 1464 of yacc.c  */
-#line 1155 "grammar.y"
+#line 1085 "grammar.y"
     { (yyval.classDef) = (yyvsp[(1) - (2)].classDef); (yyval.classDef).loc.end = (yylsp[(2) - (2)]).end; ;}
     break;
 
   case 162:
 
 /* Line 1464 of yacc.c  */
-#line 1156 "grammar.y"
+#line 1086 "grammar.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[(1) - (2)].list)); if((yyvsp[(1) - (2)].list)->last) ((MemberInit)(yyvsp[(1) - (2)].list)->last).loc.end = (yylsp[(2) - (2)]).start; (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 163:
 
 /* Line 1464 of yacc.c  */
-#line 1157 "grammar.y"
+#line 1087 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[(1) - (1)].classFunction)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 164:
 
 /* Line 1464 of yacc.c  */
-#line 1158 "grammar.y"
+#line 1088 "grammar.y"
     { (yyval.classDef) = MkClassDefProperty((yyvsp[(1) - (1)].prop)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 165:
 
 /* Line 1464 of yacc.c  */
-#line 1159 "grammar.y"
+#line 1089 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[(2) - (2)].classFunction)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 166:
 
 /* Line 1464 of yacc.c  */
-#line 1160 "grammar.y"
+#line 1090 "grammar.y"
     { (yyval.classDef) = MkClassDefProperty((yyvsp[(2) - (2)].prop)); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 167:
 
 /* Line 1464 of yacc.c  */
-#line 1161 "grammar.y"
+#line 1091 "grammar.y"
     { (yyval.classDef) = MkClassDefClassProperty((yyvsp[(1) - (1)].prop)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 168:
 
 /* Line 1464 of yacc.c  */
-#line 1162 "grammar.y"
+#line 1092 "grammar.y"
     { (yyval.classDef) = null; deleteWatchable = true; ;}
     break;
 
   case 169:
 
 /* Line 1464 of yacc.c  */
-#line 1163 "grammar.y"
+#line 1093 "grammar.y"
     { (yyval.classDef) = MkClassDefNoExpansion(); ;}
     break;
 
   case 170:
 
 /* Line 1464 of yacc.c  */
-#line 1164 "grammar.y"
+#line 1094 "grammar.y"
     { (yyval.classDef) = MkClassDefFixed(); ;}
     break;
 
   case 171:
 
 /* Line 1464 of yacc.c  */
-#line 1165 "grammar.y"
+#line 1095 "grammar.y"
     { (yyval.classDef) = MkClassDefClassPropertyValue((yyvsp[(3) - (7)].id), (yyvsp[(6) - (7)].initializer)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 172:
 
 /* Line 1464 of yacc.c  */
-#line 1167 "grammar.y"
+#line 1097 "grammar.y"
     { (yyval.classDef) = null; ;}
     break;
 
   case 173:
 
 /* Line 1464 of yacc.c  */
-#line 1168 "grammar.y"
+#line 1098 "grammar.y"
     { memberAccessStack[defaultMemberAccess] = (yyvsp[(1) - (2)].declMode); if(defaultMemberAccess == 0) { (yyval.classDef) = MkClassDefMemberAccess(); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); (yyval.classDef).loc = (yyloc); } else (yyval.classDef) = null; ;}
     break;
 
   case 174:
 
 /* Line 1464 of yacc.c  */
-#line 1170 "grammar.y"
+#line 1100 "grammar.y"
     { (yyval.classDef) = MkClassDefAccessOverride((yyvsp[(1) - (4)].declMode), (yyvsp[(3) - (4)].id)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 175:
 
 /* Line 1464 of yacc.c  */
-#line 1174 "grammar.y"
+#line 1104 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[(1) - (1)].classFunction)); (yyval.classDef).loc = (yyvsp[(1) - (1)].classFunction).loc;  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 176:
 
 /* Line 1464 of yacc.c  */
-#line 1177 "grammar.y"
+#line 1107 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(1) - (1)].list), null, null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 177:
 
 /* Line 1464 of yacc.c  */
-#line 1178 "grammar.y"
+#line 1108 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 178:
 
 /* Line 1464 of yacc.c  */
-#line 1179 "grammar.y"
+#line 1109 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(2) - (3)].list), (yyvsp[(3) - (3)].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (3)].declMode); ;}
     break;
 
   case 179:
 
 /* Line 1464 of yacc.c  */
-#line 1180 "grammar.y"
+#line 1110 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(2) - (2)].list), null, null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 180:
 
 /* Line 1464 of yacc.c  */
-#line 1181 "grammar.y"
+#line 1111 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(2) - (2)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 181:
 
 /* Line 1464 of yacc.c  */
-#line 1182 "grammar.y"
+#line 1112 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(2) - (2)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 182:
 
 /* Line 1464 of yacc.c  */
-#line 1183 "grammar.y"
+#line 1113 "grammar.y"
     { (yyval.classDef) = MkClassDefClassData(MkStructDeclaration((yyvsp[(2) - (3)].list), (yyvsp[(3) - (3)].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 183:
 
 /* Line 1464 of yacc.c  */
-#line 1184 "grammar.y"
+#line 1114 "grammar.y"
     { (yyval.classDef) = MkClassDefPropertyWatch((yyvsp[(1) - (1)].propertyWatch)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 184:
 
 /* Line 1464 of yacc.c  */
-#line 1185 "grammar.y"
+#line 1115 "grammar.y"
     { (yyval.classDef) = MkClassDefDesigner((yyvsp[(2) - (2)].id).string); FreeIdentifier((yyvsp[(2) - (2)].id)); ;}
     break;
 
   case 185:
 
 /* Line 1464 of yacc.c  */
-#line 1186 "grammar.y"
+#line 1116 "grammar.y"
     { (yyval.classDef) = MkClassDefDesigner((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 186:
 
 /* Line 1464 of yacc.c  */
-#line 1187 "grammar.y"
+#line 1117 "grammar.y"
     { (yyval.classDef) = MkClassDefDesignerDefaultProperty((yyvsp[(2) - (2)].id)); ;}
     break;
 
   case 187:
 
 /* Line 1464 of yacc.c  */
-#line 1188 "grammar.y"
+#line 1118 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (1)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 188:
 
 /* Line 1464 of yacc.c  */
-#line 1189 "grammar.y"
+#line 1119 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (1)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 189:
 
 /* Line 1464 of yacc.c  */
-#line 1190 "grammar.y"
+#line 1120 "grammar.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[(1) - (1)].list)); if((yyvsp[(1) - (1)].list)->last) ((MemberInit)(yyvsp[(1) - (1)].list)->last).loc.end = (yylsp[(1) - (1)]).end; (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 190:
 
 /* Line 1464 of yacc.c  */
-#line 1192 "grammar.y"
+#line 1122 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (2)].instance))); (yyval.classDef).loc = (yyvsp[(1) - (2)].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 191:
 
 /* Line 1464 of yacc.c  */
-#line 1193 "grammar.y"
+#line 1123 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (2)].instance))); (yyval.classDef).loc = (yyvsp[(1) - (2)].instance).loc; (yyval.classDef).decl.loc = (yyval.classDef).loc;  (yyval.classDef).memberAccess = memberAccessStack[defaultMemberAccess]; ;}
     break;
 
   case 192:
 
 /* Line 1464 of yacc.c  */
-#line 1197 "grammar.y"
+#line 1127 "grammar.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[(2) - (2)].classFunction)); (yyval.classDef).loc = (yyloc);  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; (yyval.classDef).memberAccess = (yyvsp[(1) - (2)].declMode); ;}
     break;
 
   case 193:
 
 /* Line 1464 of yacc.c  */
-#line 1198 "grammar.y"
+#line 1128 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(2) - (3)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[(1) - (3)].declMode); ;}
     break;
 
   case 194:
 
 /* Line 1464 of yacc.c  */
-#line 1199 "grammar.y"
+#line 1129 "grammar.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(2) - (3)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyval.classDef).loc; (yyval.classDef).memberAccess = (yyvsp[(1) - (3)].declMode); ;}
     break;
 
   case 195:
 
 /* Line 1464 of yacc.c  */
-#line 1203 "grammar.y"
+#line 1133 "grammar.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[(1) - (1)].list)); (yyval.classDef).loc = (yyloc);  (yyval.classDef).loc.end.charPos++; (yyval.classDef).loc.end.pos++; ;}
     break;
 
   case 196:
 
 /* Line 1464 of yacc.c  */
-#line 1207 "grammar.y"
+#line 1137 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].classDef)); ;}
     break;
 
   case 197:
 
 /* Line 1464 of yacc.c  */
-#line 1208 "grammar.y"
+#line 1138 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].classDef)); ;}
     break;
 
   case 198:
 
 /* Line 1464 of yacc.c  */
-#line 1209 "grammar.y"
+#line 1139 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].classDef)); ;}
     break;
 
   case 199:
 
 /* Line 1464 of yacc.c  */
-#line 1213 "grammar.y"
+#line 1143 "grammar.y"
     { yyerror(); (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].classDef)); ;}
     break;
 
   case 202:
 
 /* Line 1464 of yacc.c  */
-#line 1216 "grammar.y"
+#line 1146 "grammar.y"
     { yyerror(); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyval.list), (yyvsp[(2) - (2)].classDef)); ;}
     break;
 
   case 203:
 
 /* Line 1464 of yacc.c  */
-#line 1217 "grammar.y"
+#line 1147 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyval.list), (yyvsp[(2) - (2)].classDef)); ;}
     break;
 
   case 204:
 
 /* Line 1464 of yacc.c  */
-#line 1221 "grammar.y"
+#line 1151 "grammar.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 205:
 
 /* Line 1464 of yacc.c  */
-#line 1222 "grammar.y"
+#line 1152 "grammar.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 206:
 
 /* Line 1464 of yacc.c  */
-#line 1234 "grammar.y"
+#line 1164 "grammar.y"
     { (yyval.templateArgument) = MkTemplateTypeArgument(MkTemplateDatatype((yyvsp[(1) - (1)].list), null)); ;}
     break;
 
   case 207:
 
 /* Line 1464 of yacc.c  */
-#line 1235 "grammar.y"
+#line 1165 "grammar.y"
     { (yyval.templateArgument) = MkTemplateTypeArgument(MkTemplateDatatype((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator))); ;}
     break;
 
   case 208:
 
 /* Line 1464 of yacc.c  */
-#line 1239 "grammar.y"
+#line 1169 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[(2) - (2)].id), null, null); ;}
     break;
 
   case 209:
 
 /* Line 1464 of yacc.c  */
-#line 1240 "grammar.y"
+#line 1170 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[(2) - (4)].id), null, (yyvsp[(4) - (4)].templateArgument)); ;}
     break;
 
   case 210:
 
 /* Line 1464 of yacc.c  */
-#line 1241 "grammar.y"
+#line 1171 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[(2) - (4)].id), (yyvsp[(4) - (4)].templateDatatype), null); ;}
     break;
 
   case 211:
 
 /* Line 1464 of yacc.c  */
-#line 1242 "grammar.y"
+#line 1172 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].templateDatatype), (yyvsp[(6) - (6)].templateArgument)); ;}
     break;
 
   case 212:
 
 /* Line 1464 of yacc.c  */
-#line 1243 "grammar.y"
+#line 1173 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[(2) - (2)].string)), null, null); delete (yyvsp[(2) - (2)].string); ;}
     break;
 
   case 213:
 
 /* Line 1464 of yacc.c  */
-#line 1244 "grammar.y"
+#line 1174 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[(2) - (4)].string)), null, (yyvsp[(4) - (4)].templateArgument)); ;}
     break;
 
   case 214:
 
 /* Line 1464 of yacc.c  */
-#line 1245 "grammar.y"
+#line 1175 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[(2) - (4)].string)), (yyvsp[(4) - (4)].templateDatatype), null); ;}
     break;
 
   case 215:
 
 /* Line 1464 of yacc.c  */
-#line 1246 "grammar.y"
+#line 1176 "grammar.y"
     { (yyval.templateParameter) = MkTypeTemplateParameter(MkIdentifier((yyvsp[(2) - (6)].string)), (yyvsp[(4) - (6)].templateDatatype), (yyvsp[(6) - (6)].templateArgument)); ;}
     break;
 
   case 216:
 
 /* Line 1464 of yacc.c  */
-#line 1250 "grammar.y"
+#line 1180 "grammar.y"
     { (yyval.templateArgument) = MkTemplateIdentifierArgument((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 217:
 
 /* Line 1464 of yacc.c  */
-#line 1254 "grammar.y"
+#line 1184 "grammar.y"
     { (yyval.templateParameter) = MkIdentifierTemplateParameter((yyvsp[(1) - (1)].id), dataMember, null); ;}
     break;
 
   case 218:
 
 /* Line 1464 of yacc.c  */
-#line 1255 "grammar.y"
+#line 1185 "grammar.y"
     { (yyval.templateParameter) = MkIdentifierTemplateParameter((yyvsp[(1) - (3)].id), dataMember, (yyvsp[(3) - (3)].templateArgument)); ;}
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
-#line 1259 "grammar.y"
+#line 1189 "grammar.y"
     { (yyval.templateArgument) = MkTemplateExpressionArgument((yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 220:
 
 /* Line 1464 of yacc.c  */
-#line 1267 "grammar.y"
+#line 1197 "grammar.y"
     { (yyval.templateParameter) = MkExpressionTemplateParameter((yyvsp[(2) - (4)].id), MkTemplateDatatype((yyvsp[(1) - (4)].list), null), (yyvsp[(4) - (4)].templateArgument)); ;}
     break;
 
   case 221:
 
 /* Line 1464 of yacc.c  */
-#line 1268 "grammar.y"
+#line 1198 "grammar.y"
     { (yyval.templateParameter) = MkExpressionTemplateParameter((yyvsp[(3) - (5)].id), MkTemplateDatatype((yyvsp[(1) - (5)].list), (yyvsp[(2) - (5)].declarator)), (yyvsp[(5) - (5)].templateArgument)); ;}
     break;
 
   case 225:
 
 /* Line 1464 of yacc.c  */
-#line 1278 "grammar.y"
+#line 1208 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].templateParameter)); ;}
     break;
 
   case 226:
 
 /* Line 1464 of yacc.c  */
-#line 1279 "grammar.y"
+#line 1209 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].templateParameter)); ;}
     break;
 
   case 230:
 
 /* Line 1464 of yacc.c  */
-#line 1286 "grammar.y"
+#line 1216 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument); (yyval.templateArgument).name = (yyvsp[(1) - (3)].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 231:
 
 /* Line 1464 of yacc.c  */
-#line 1287 "grammar.y"
+#line 1217 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument); (yyval.templateArgument).name = (yyvsp[(1) - (3)].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 232:
 
 /* Line 1464 of yacc.c  */
-#line 1288 "grammar.y"
+#line 1218 "grammar.y"
     { (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument); (yyval.templateArgument).name = (yyvsp[(1) - (3)].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 233:
 
 /* Line 1464 of yacc.c  */
-#line 1328 "grammar.y"
+#line 1258 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].templateArgument)); ;}
     break;
 
   case 234:
 
 /* Line 1464 of yacc.c  */
-#line 1329 "grammar.y"
+#line 1259 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].templateArgument)); ;}
     break;
 
   case 235:
 
 /* Line 1464 of yacc.c  */
-#line 1334 "grammar.y"
+#line 1264 "grammar.y"
     {
       if(curContext != globalContext)
          PopContext(curContext);
@@ -15197,16 +15167,16 @@ yyreduce:
   case 236:
 
 /* Line 1464 of yacc.c  */
-#line 1341 "grammar.y"
-    { (void)(yyvsp[(1) - (2)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(2) - (2)].id).string); FreeIdentifier((yyvsp[(2) - (2)].id)); (yyval.symbol).nameLoc = (yylsp[(2) - (2)]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1271 "grammar.y"
+    { (void)(yyvsp[(1) - (2)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); FreeIdentifier((yyvsp[(2) - (2)].id)); (yyval.symbol).nameLoc = (yylsp[(2) - (2)]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 237:
 
 /* Line 1464 of yacc.c  */
-#line 1343 "grammar.y"
+#line 1273 "grammar.y"
     {
-      (void)(yyvsp[(1) - (2)].context); (yyval.symbol) = DeclClass((yyvsp[(2) - (2)].specifier).name);
+      (void)(yyvsp[(1) - (2)].context); (yyval.symbol) = DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name);
       (yyval.symbol).nameLoc = (yylsp[(2) - (2)]);
       FreeSpecifier((yyvsp[(2) - (2)].specifier));
       ++defaultMemberAccess;
@@ -15217,30 +15187,30 @@ yyreduce:
   case 238:
 
 /* Line 1464 of yacc.c  */
-#line 1350 "grammar.y"
-    { (void)(yyvsp[(2) - (3)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(3) - (3)].id).string); FreeIdentifier((yyvsp[(1) - (3)].id)); FreeIdentifier((yyvsp[(3) - (3)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (3)]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1280 "grammar.y"
+    { (void)(yyvsp[(2) - (3)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(3) - (3)].id)._class, (yyvsp[(3) - (3)].id).string); FreeIdentifier((yyvsp[(1) - (3)].id)); FreeIdentifier((yyvsp[(3) - (3)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (3)]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 239:
 
 /* Line 1464 of yacc.c  */
-#line 1351 "grammar.y"
-    { (void)(yyvsp[(2) - (3)].context); (yyval.symbol) = DeclClass((yyvsp[(3) - (3)].specifier).name); FreeIdentifier((yyvsp[(1) - (3)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (3)]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[(3) - (3)].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1281 "grammar.y"
+    { (void)(yyvsp[(2) - (3)].context); (yyval.symbol) = DeclClass((yyvsp[(3) - (3)].specifier).nsSpec, (yyvsp[(3) - (3)].specifier).name); FreeIdentifier((yyvsp[(1) - (3)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (3)]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[(3) - (3)].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 240:
 
 /* Line 1464 of yacc.c  */
-#line 1353 "grammar.y"
-    { (void)(yyvsp[(1) - (5)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(2) - (5)].id).string); (yyval.symbol).templateParams = (yyvsp[(4) - (5)].list); FreeIdentifier((yyvsp[(2) - (5)].id)); (yyval.symbol).nameLoc = (yylsp[(2) - (5)]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1283 "grammar.y"
+    { (void)(yyvsp[(1) - (5)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string); (yyval.symbol).templateParams = (yyvsp[(4) - (5)].list); FreeIdentifier((yyvsp[(2) - (5)].id)); (yyval.symbol).nameLoc = (yylsp[(2) - (5)]); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 241:
 
 /* Line 1464 of yacc.c  */
-#line 1355 "grammar.y"
+#line 1285 "grammar.y"
     {
-      (void)(yyvsp[(1) - (5)].context); (yyval.symbol) = DeclClass((yyvsp[(2) - (5)].specifier).name);
+      (void)(yyvsp[(1) - (5)].context); (yyval.symbol) = DeclClass((yyvsp[(2) - (5)].specifier).nsSpec, (yyvsp[(2) - (5)].specifier).name);
       (yyval.symbol).templateParams = (yyvsp[(4) - (5)].list);
       (yyval.symbol).nameLoc = (yylsp[(2) - (5)]);
       FreeSpecifier((yyvsp[(2) - (5)].specifier));
@@ -15252,21 +15222,21 @@ yyreduce:
   case 242:
 
 /* Line 1464 of yacc.c  */
-#line 1363 "grammar.y"
-    { (void)(yyvsp[(2) - (6)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(3) - (6)].id).string); (yyval.symbol).templateParams = (yyvsp[(5) - (6)].list); FreeIdentifier((yyvsp[(1) - (6)].id)); FreeIdentifier((yyvsp[(3) - (6)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (6)]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1293 "grammar.y"
+    { (void)(yyvsp[(2) - (6)].context); (yyval.symbol) = DeclClassAddNameSpace((yyvsp[(3) - (6)].id)._class, (yyvsp[(3) - (6)].id).string); (yyval.symbol).templateParams = (yyvsp[(5) - (6)].list); FreeIdentifier((yyvsp[(1) - (6)].id)); FreeIdentifier((yyvsp[(3) - (6)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (6)]); (yyval.symbol).isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 243:
 
 /* Line 1464 of yacc.c  */
-#line 1364 "grammar.y"
-    { (void)(yyvsp[(2) - (6)].context); (yyval.symbol) = DeclClass((yyvsp[(3) - (6)].specifier).name); (yyval.symbol).templateParams = (yyvsp[(5) - (6)].list); FreeIdentifier((yyvsp[(1) - (6)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (6)]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[(3) - (6)].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
+#line 1294 "grammar.y"
+    { (void)(yyvsp[(2) - (6)].context); (yyval.symbol) = DeclClass((yyvsp[(3) - (6)].specifier).nsSpec, (yyvsp[(3) - (6)].specifier).name); (yyval.symbol).templateParams = (yyvsp[(5) - (6)].list); FreeIdentifier((yyvsp[(1) - (6)].id)); (yyval.symbol).nameLoc = (yylsp[(3) - (6)]); (yyval.symbol).isRemote = true; FreeSpecifier((yyvsp[(3) - (6)].specifier)); memberAccessStack[++defaultMemberAccess] = privateAccess; ;}
     break;
 
   case 244:
 
 /* Line 1464 of yacc.c  */
-#line 1369 "grammar.y"
+#line 1299 "grammar.y"
     {
          (yyval._class).loc = (yyloc);
          (yyval._class) = (yyvsp[(1) - (2)]._class);
@@ -15276,7 +15246,7 @@ yyreduce:
   case 245:
 
 /* Line 1464 of yacc.c  */
-#line 1376 "grammar.y"
+#line 1306 "grammar.y"
     {
          (yyval._class) = (yyvsp[(1) - (2)]._class); (yyval._class).definitions = MkList(); (yyval._class).blockStart = (yylsp[(2) - (2)]);  (yyval._class).loc = (yyloc);
          POP_DEFAULT_ACCESS
@@ -15287,7 +15257,7 @@ yyreduce:
   case 246:
 
 /* Line 1464 of yacc.c  */
-#line 1383 "grammar.y"
+#line 1313 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[(1) - (3)].symbol), null, MkList()); (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc);
          POP_DEFAULT_ACCESS
@@ -15298,7 +15268,7 @@ yyreduce:
   case 247:
 
 /* Line 1464 of yacc.c  */
-#line 1389 "grammar.y"
+#line 1319 "grammar.y"
     {
          (yyval._class) = (yyvsp[(1) - (3)]._class); (yyval._class).definitions = MkList(); (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc);
          POP_DEFAULT_ACCESS
@@ -15309,9 +15279,9 @@ yyreduce:
   case 248:
 
 /* Line 1464 of yacc.c  */
-#line 1396 "grammar.y"
+#line 1326 "grammar.y"
     {
-         (void)(yyvsp[(1) - (3)].context); (yyval._class) = MkClass(DeclClassAddNameSpace((yyvsp[(2) - (3)].id).string), null, null); FreeIdentifier((yyvsp[(2) - (3)].id));
+         (void)(yyvsp[(1) - (3)].context); (yyval._class) = MkClass(DeclClassAddNameSpace((yyvsp[(2) - (3)].id)._class, (yyvsp[(2) - (3)].id).string), null, null); FreeIdentifier((yyvsp[(2) - (3)].id));
          POP_DEFAULT_ACCESS
          PopContext(curContext);
       ;}
@@ -15320,9 +15290,9 @@ yyreduce:
   case 249:
 
 /* Line 1464 of yacc.c  */
-#line 1402 "grammar.y"
+#line 1332 "grammar.y"
     {
-         (void)(yyvsp[(1) - (3)].context); (yyval._class) = MkClass(DeclClass((yyvsp[(2) - (3)].specifier).name), null, null); FreeSpecifier((yyvsp[(2) - (3)].specifier));
+         (void)(yyvsp[(1) - (3)].context); (yyval._class) = MkClass(DeclClass((yyvsp[(2) - (3)].specifier).nsSpec, (yyvsp[(2) - (3)].specifier).name), null, null); FreeSpecifier((yyvsp[(2) - (3)].specifier));
          POP_DEFAULT_ACCESS
          PopContext(curContext);
       ;}
@@ -15331,7 +15301,7 @@ yyreduce:
   case 250:
 
 /* Line 1464 of yacc.c  */
-#line 1411 "grammar.y"
+#line 1341 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].list), null);
       ;}
@@ -15340,7 +15310,7 @@ yyreduce:
   case 251:
 
 /* Line 1464 of yacc.c  */
-#line 1418 "grammar.y"
+#line 1348 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[(1) - (3)].symbol), null, (yyvsp[(3) - (3)].list)); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]); (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15351,7 +15321,7 @@ yyreduce:
   case 252:
 
 /* Line 1464 of yacc.c  */
-#line 1424 "grammar.y"
+#line 1354 "grammar.y"
     {
          (yyval._class) = (yyvsp[(1) - (3)]._class); (yyval._class).definitions = (yyvsp[(3) - (3)].list); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15362,7 +15332,7 @@ yyreduce:
   case 253:
 
 /* Line 1464 of yacc.c  */
-#line 1430 "grammar.y"
+#line 1360 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[(1) - (3)].symbol), null, (yyvsp[(3) - (3)].list)); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]); (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15373,7 +15343,7 @@ yyreduce:
   case 254:
 
 /* Line 1464 of yacc.c  */
-#line 1436 "grammar.y"
+#line 1366 "grammar.y"
     {
          (yyval._class) = (yyvsp[(1) - (3)]._class); (yyval._class).definitions = (yyvsp[(3) - (3)].list); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15384,7 +15354,7 @@ yyreduce:
   case 255:
 
 /* Line 1464 of yacc.c  */
-#line 1442 "grammar.y"
+#line 1372 "grammar.y"
     {
          (yyval._class) = MkClass((yyvsp[(1) - (3)].symbol), null, MkList()); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15395,7 +15365,7 @@ yyreduce:
   case 256:
 
 /* Line 1464 of yacc.c  */
-#line 1448 "grammar.y"
+#line 1378 "grammar.y"
     {
          (yyval._class) = (yyvsp[(1) - (3)]._class); (yyval._class).definitions = MkList(); (yyval._class).deleteWatchable = deleteWatchable; deleteWatchable = false; (yyval._class).blockStart = (yylsp[(2) - (3)]);  (yyval._class).loc = (yyloc); (yyval._class).loc.end.charPos++; (yyval._class).loc.end.pos++;
          POP_DEFAULT_ACCESS
@@ -15406,91 +15376,91 @@ yyreduce:
   case 257:
 
 /* Line 1464 of yacc.c  */
-#line 1459 "grammar.y"
+#line 1389 "grammar.y"
     { (yyval.id) = MkIdentifier(yytext); (yyval.id).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 259:
 
 /* Line 1464 of yacc.c  */
-#line 1465 "grammar.y"
+#line 1395 "grammar.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[(2) - (3)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 260:
 
 /* Line 1464 of yacc.c  */
-#line 1469 "grammar.y"
+#line 1399 "grammar.y"
     { (yyval.exp) = MkExpString((yyvsp[(1) - (1)].string)); delete (yyvsp[(1) - (1)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 261:
 
 /* Line 1464 of yacc.c  */
-#line 1470 "grammar.y"
+#line 1400 "grammar.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[(2) - (2)].string), null); delete (yyvsp[(2) - (2)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 262:
 
 /* Line 1464 of yacc.c  */
-#line 1471 "grammar.y"
+#line 1401 "grammar.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[(4) - (4)].string), (yyvsp[(2) - (4)].string)); delete (yyvsp[(2) - (4)].string); delete (yyvsp[(4) - (4)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 263:
 
 /* Line 1464 of yacc.c  */
-#line 1475 "grammar.y"
+#line 1405 "grammar.y"
     { (yyval.exp) = MkExpConstant(yytext); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 264:
 
 /* Line 1464 of yacc.c  */
-#line 1479 "grammar.y"
+#line 1409 "grammar.y"
     { (yyval.exp) = MkExpIdentifier((yyvsp[(1) - (1)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 265:
 
 /* Line 1464 of yacc.c  */
-#line 1480 "grammar.y"
+#line 1410 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (1)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 266:
 
 /* Line 1464 of yacc.c  */
-#line 1481 "grammar.y"
+#line 1411 "grammar.y"
     { (yyval.exp) = MkExpExtensionCompound((yyvsp[(3) - (4)].stmt)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 267:
 
 /* Line 1464 of yacc.c  */
-#line 1482 "grammar.y"
+#line 1412 "grammar.y"
     { (yyval.exp) = MkExpExtensionExpression((yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 268:
 
 /* Line 1464 of yacc.c  */
-#line 1483 "grammar.y"
+#line 1413 "grammar.y"
     { (yyval.exp) = MkExpExtensionInitializer((yyvsp[(3) - (5)].typeName), (yyvsp[(5) - (5)].initializer)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 269:
 
 /* Line 1464 of yacc.c  */
-#line 1484 "grammar.y"
+#line 1414 "grammar.y"
     { (yyval.exp) = MkExpExtensionInitializer((yyvsp[(3) - (8)].typeName), MkInitializerAssignment(MkExpExtensionInitializer((yyvsp[(6) - (8)].typeName), (yyvsp[(8) - (8)].initializer)))); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 270:
 
 /* Line 1464 of yacc.c  */
-#line 1486 "grammar.y"
+#line 1416 "grammar.y"
     {
       char * constant = (yyvsp[(1) - (2)].exp).constant;
       int len = strlen(constant);
@@ -15508,630 +15478,630 @@ yyreduce:
   case 271:
 
 /* Line 1464 of yacc.c  */
-#line 1498 "grammar.y"
+#line 1428 "grammar.y"
     { (yyval.exp) = (yyvsp[(1) - (1)].exp); ;}
     break;
 
   case 273:
 
 /* Line 1464 of yacc.c  */
-#line 1500 "grammar.y"
+#line 1430 "grammar.y"
     { (yyval.exp) = MkExpWideString(yytext); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 274:
 
 /* Line 1464 of yacc.c  */
-#line 1501 "grammar.y"
+#line 1431 "grammar.y"
     { Expression exp = MkExpDummy(); exp.loc.start = (yylsp[(1) - (2)]).end; exp.loc.end = (yylsp[(2) - (2)]).start; (yyval.exp) = MkExpBrackets(MkListOne(exp)); (yyval.exp).loc = (yyloc); yyerror(); ;}
     break;
 
   case 275:
 
 /* Line 1464 of yacc.c  */
-#line 1502 "grammar.y"
+#line 1432 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 276:
 
 /* Line 1464 of yacc.c  */
-#line 1503 "grammar.y"
+#line 1433 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 277:
 
 /* Line 1464 of yacc.c  */
-#line 1504 "grammar.y"
+#line 1434 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 278:
 
 /* Line 1464 of yacc.c  */
-#line 1505 "grammar.y"
+#line 1435 "grammar.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 279:
 
 /* Line 1464 of yacc.c  */
-#line 1506 "grammar.y"
+#line 1436 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 280:
 
 /* Line 1464 of yacc.c  */
-#line 1507 "grammar.y"
+#line 1437 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 281:
 
 /* Line 1464 of yacc.c  */
-#line 1508 "grammar.y"
+#line 1438 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 282:
 
 /* Line 1464 of yacc.c  */
-#line 1509 "grammar.y"
+#line 1439 "grammar.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 283:
 
 /* Line 1464 of yacc.c  */
-#line 1510 "grammar.y"
+#line 1440 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 284:
 
 /* Line 1464 of yacc.c  */
-#line 1511 "grammar.y"
+#line 1441 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 285:
 
 /* Line 1464 of yacc.c  */
-#line 1512 "grammar.y"
+#line 1442 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 286:
 
 /* Line 1464 of yacc.c  */
-#line 1513 "grammar.y"
+#line 1443 "grammar.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 287:
 
 /* Line 1464 of yacc.c  */
-#line 1514 "grammar.y"
+#line 1444 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 288:
 
 /* Line 1464 of yacc.c  */
-#line 1515 "grammar.y"
+#line 1445 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 289:
 
 /* Line 1464 of yacc.c  */
-#line 1516 "grammar.y"
+#line 1446 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 290:
 
 /* Line 1464 of yacc.c  */
-#line 1517 "grammar.y"
+#line 1447 "grammar.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 291:
 
 /* Line 1464 of yacc.c  */
-#line 1518 "grammar.y"
+#line 1448 "grammar.y"
     { (yyval.exp) = MkExpClass((yyvsp[(3) - (4)].list), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 292:
 
 /* Line 1464 of yacc.c  */
-#line 1519 "grammar.y"
+#line 1449 "grammar.y"
     { (yyval.exp) = MkExpClass((yyvsp[(3) - (5)].list), (yyvsp[(4) - (5)].declarator)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 293:
 
 /* Line 1464 of yacc.c  */
-#line 1520 "grammar.y"
+#line 1450 "grammar.y"
     { (yyval.exp) = MkExpClass(MkListOne(MkSpecifierName((yyvsp[(3) - (4)].id).string)), null); FreeIdentifier((yyvsp[(3) - (4)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 294:
 
 /* Line 1464 of yacc.c  */
-#line 1521 "grammar.y"
+#line 1451 "grammar.y"
     { (yyval.exp) = MkExpVaArg((yyvsp[(3) - (6)].exp), (yyvsp[(5) - (6)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 295:
 
 /* Line 1464 of yacc.c  */
-#line 1523 "grammar.y"
+#line 1453 "grammar.y"
     { (yyval.exp) = MkExpClassData((yyvsp[(3) - (4)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 300:
 
 /* Line 1464 of yacc.c  */
-#line 1529 "grammar.y"
+#line 1459 "grammar.y"
     { (yyval.exp) = MkExpArray((yyvsp[(2) - (3)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 301:
 
 /* Line 1464 of yacc.c  */
-#line 1530 "grammar.y"
+#line 1460 "grammar.y"
     { (yyval.exp) = MkExpArray(null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 302:
 
 /* Line 1464 of yacc.c  */
-#line 1534 "grammar.y"
+#line 1464 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (1)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 303:
 
 /* Line 1464 of yacc.c  */
-#line 1538 "grammar.y"
+#line 1468 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (2)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 304:
 
 /* Line 1464 of yacc.c  */
-#line 1542 "grammar.y"
+#line 1472 "grammar.y"
     { yyerror(); (yyval.exp) = MkExpBrackets((yyvsp[(2) - (2)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 305:
 
 /* Line 1464 of yacc.c  */
-#line 1543 "grammar.y"
+#line 1473 "grammar.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[(2) - (2)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 307:
 
 /* Line 1464 of yacc.c  */
-#line 1549 "grammar.y"
+#line 1479 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 308:
 
 /* Line 1464 of yacc.c  */
-#line 1550 "grammar.y"
+#line 1480 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 309:
 
 /* Line 1464 of yacc.c  */
-#line 1551 "grammar.y"
+#line 1481 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 310:
 
 /* Line 1464 of yacc.c  */
-#line 1552 "grammar.y"
+#line 1482 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (4)]).start; (yyval.exp).call.argLoc.end = (yylsp[(4) - (4)]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 311:
 
 /* Line 1464 of yacc.c  */
-#line 1553 "grammar.y"
+#line 1483 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (4)]).start; (yyval.exp).call.argLoc.end = (yylsp[(4) - (4)]).end; (yyval.exp).loc = (yyloc); if((yyvsp[(3) - (4)].list)->last) ((Expression)(yyvsp[(3) - (4)].list)->last).loc.end = (yylsp[(4) - (4)]).start; ;}
     break;
 
   case 312:
 
 /* Line 1464 of yacc.c  */
-#line 1554 "grammar.y"
+#line 1484 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 313:
 
 /* Line 1464 of yacc.c  */
-#line 1555 "grammar.y"
+#line 1485 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 314:
 
 /* Line 1464 of yacc.c  */
-#line 1556 "grammar.y"
+#line 1486 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 315:
 
 /* Line 1464 of yacc.c  */
-#line 1557 "grammar.y"
+#line 1487 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 316:
 
 /* Line 1464 of yacc.c  */
-#line 1559 "grammar.y"
+#line 1489 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 317:
 
 /* Line 1464 of yacc.c  */
-#line 1560 "grammar.y"
+#line 1490 "grammar.y"
     { (yyval.exp) = MkExpIndex((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 318:
 
 /* Line 1464 of yacc.c  */
-#line 1561 "grammar.y"
+#line 1491 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 319:
 
 /* Line 1464 of yacc.c  */
-#line 1562 "grammar.y"
+#line 1492 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (4)]).start; (yyval.exp).call.argLoc.end = (yylsp[(4) - (4)]).end;(yyval.exp).loc = (yyloc); ;}
     break;
 
   case 320:
 
 /* Line 1464 of yacc.c  */
-#line 1563 "grammar.y"
+#line 1493 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 321:
 
 /* Line 1464 of yacc.c  */
-#line 1564 "grammar.y"
+#line 1494 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 322:
 
 /* Line 1464 of yacc.c  */
-#line 1565 "grammar.y"
+#line 1495 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 323:
 
 /* Line 1464 of yacc.c  */
-#line 1566 "grammar.y"
+#line 1496 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 324:
 
 /* Line 1464 of yacc.c  */
-#line 1593 "grammar.y"
+#line 1523 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 325:
 
 /* Line 1464 of yacc.c  */
-#line 1594 "grammar.y"
+#line 1524 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 326:
 
 /* Line 1464 of yacc.c  */
-#line 1595 "grammar.y"
+#line 1525 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 327:
 
 /* Line 1464 of yacc.c  */
-#line 1596 "grammar.y"
+#line 1526 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 328:
 
 /* Line 1464 of yacc.c  */
-#line 1600 "grammar.y"
+#line 1530 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 329:
 
 /* Line 1464 of yacc.c  */
-#line 1601 "grammar.y"
+#line 1531 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 330:
 
 /* Line 1464 of yacc.c  */
-#line 1602 "grammar.y"
+#line 1532 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 331:
 
 /* Line 1464 of yacc.c  */
-#line 1603 "grammar.y"
+#line 1533 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 332:
 
 /* Line 1464 of yacc.c  */
-#line 1604 "grammar.y"
+#line 1534 "grammar.y"
     { Expression exp = MkExpDummy(); yyerror(); exp.loc.start = (yylsp[(2) - (2)]).end; exp.loc.end = (yylsp[(2) - (2)]).end; (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), exp); ;}
     break;
 
   case 333:
 
 /* Line 1464 of yacc.c  */
-#line 1608 "grammar.y"
+#line 1538 "grammar.y"
     { (yyval.exp) = MkExpOp(null, INC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 334:
 
 /* Line 1464 of yacc.c  */
-#line 1609 "grammar.y"
+#line 1539 "grammar.y"
     { (yyval.exp) = MkExpOp(null, DEC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 335:
 
 /* Line 1464 of yacc.c  */
-#line 1610 "grammar.y"
+#line 1540 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[(1) - (2)].i), (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 336:
 
 /* Line 1464 of yacc.c  */
-#line 1611 "grammar.y"
+#line 1541 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[(1) - (2)].i), (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 337:
 
 /* Line 1464 of yacc.c  */
-#line 1613 "grammar.y"
+#line 1543 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 338:
 
 /* Line 1464 of yacc.c  */
-#line 1614 "grammar.y"
+#line 1544 "grammar.y"
     { (yyval.exp) = MkExpTypeSize((yyvsp[(3) - (4)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 339:
 
 /* Line 1464 of yacc.c  */
-#line 1615 "grammar.y"
+#line 1545 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[(4) - (5)].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 340:
 
 /* Line 1464 of yacc.c  */
-#line 1616 "grammar.y"
+#line 1546 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[(4) - (5)].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 341:
 
 /* Line 1464 of yacc.c  */
-#line 1619 "grammar.y"
+#line 1549 "grammar.y"
     { (yyval.exp) = MkExpOp(null, ALIGNOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 342:
 
 /* Line 1464 of yacc.c  */
-#line 1620 "grammar.y"
+#line 1550 "grammar.y"
     { (yyval.exp) = MkExpTypeAlign((yyvsp[(3) - (4)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 345:
 
 /* Line 1464 of yacc.c  */
-#line 1634 "grammar.y"
+#line 1564 "grammar.y"
     { (yyval.i) = '&'; ;}
     break;
 
   case 346:
 
 /* Line 1464 of yacc.c  */
-#line 1635 "grammar.y"
+#line 1565 "grammar.y"
     { (yyval.i) = '*'; ;}
     break;
 
   case 347:
 
 /* Line 1464 of yacc.c  */
-#line 1636 "grammar.y"
+#line 1566 "grammar.y"
     { (yyval.i) = '+'; ;}
     break;
 
   case 348:
 
 /* Line 1464 of yacc.c  */
-#line 1637 "grammar.y"
+#line 1567 "grammar.y"
     { (yyval.i) = '-'; ;}
     break;
 
   case 349:
 
 /* Line 1464 of yacc.c  */
-#line 1638 "grammar.y"
+#line 1568 "grammar.y"
     { (yyval.i) = '~'; ;}
     break;
 
   case 350:
 
 /* Line 1464 of yacc.c  */
-#line 1639 "grammar.y"
+#line 1569 "grammar.y"
     { (yyval.i) = '!'; ;}
     break;
 
   case 351:
 
 /* Line 1464 of yacc.c  */
-#line 1640 "grammar.y"
+#line 1570 "grammar.y"
     { (yyval.i) = DELETE; ;}
     break;
 
   case 352:
 
 /* Line 1464 of yacc.c  */
-#line 1641 "grammar.y"
+#line 1571 "grammar.y"
     { (yyval.i) = _INCREF; ;}
     break;
 
   case 354:
 
 /* Line 1464 of yacc.c  */
-#line 1646 "grammar.y"
+#line 1576 "grammar.y"
     { (yyval.exp) = MkExpCast((yyvsp[(2) - (4)].typeName), (yyvsp[(4) - (4)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 356:
 
 /* Line 1464 of yacc.c  */
-#line 1651 "grammar.y"
+#line 1581 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '*', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 357:
 
 /* Line 1464 of yacc.c  */
-#line 1652 "grammar.y"
+#line 1582 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '/', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 358:
 
 /* Line 1464 of yacc.c  */
-#line 1653 "grammar.y"
+#line 1583 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '%', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 359:
 
 /* Line 1464 of yacc.c  */
-#line 1654 "grammar.y"
+#line 1584 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '*', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 360:
 
 /* Line 1464 of yacc.c  */
-#line 1655 "grammar.y"
+#line 1585 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '/', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 361:
 
 /* Line 1464 of yacc.c  */
-#line 1656 "grammar.y"
+#line 1586 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '%', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 363:
 
 /* Line 1464 of yacc.c  */
-#line 1661 "grammar.y"
+#line 1591 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '+', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 364:
 
 /* Line 1464 of yacc.c  */
-#line 1662 "grammar.y"
+#line 1592 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '-', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 365:
 
 /* Line 1464 of yacc.c  */
-#line 1663 "grammar.y"
+#line 1593 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '+', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 366:
 
 /* Line 1464 of yacc.c  */
-#line 1664 "grammar.y"
+#line 1594 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '-', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 368:
 
 /* Line 1464 of yacc.c  */
-#line 1669 "grammar.y"
+#line 1599 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LEFT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 369:
 
 /* Line 1464 of yacc.c  */
-#line 1670 "grammar.y"
+#line 1600 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), RIGHT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 370:
 
 /* Line 1464 of yacc.c  */
-#line 1671 "grammar.y"
+#line 1601 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LEFT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 371:
 
 /* Line 1464 of yacc.c  */
-#line 1672 "grammar.y"
+#line 1602 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), RIGHT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 372:
 
 /* Line 1464 of yacc.c  */
-#line 1677 "grammar.y"
+#line 1607 "grammar.y"
     {
       (yyval.exp) = (yyvsp[(1) - (2)].exp);
       skipErrors = true;
@@ -16141,768 +16111,760 @@ yyreduce:
   case 374:
 
 /* Line 1464 of yacc.c  */
-#line 1685 "grammar.y"
+#line 1615 "grammar.y"
     { skipErrors = false; (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), '<', (yyvsp[(2) - (2)].exp)/*$3*/); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 375:
 
 /* Line 1464 of yacc.c  */
-#line 1686 "grammar.y"
+#line 1616 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '>', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 376:
 
 /* Line 1464 of yacc.c  */
-#line 1687 "grammar.y"
+#line 1617 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 377:
 
 /* Line 1464 of yacc.c  */
-#line 1688 "grammar.y"
+#line 1618 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), GE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 378:
 
 /* Line 1464 of yacc.c  */
-#line 1689 "grammar.y"
+#line 1619 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '<', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 379:
 
 /* Line 1464 of yacc.c  */
-#line 1690 "grammar.y"
+#line 1620 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '>', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 380:
 
 /* Line 1464 of yacc.c  */
-#line 1691 "grammar.y"
+#line 1621 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 381:
 
 /* Line 1464 of yacc.c  */
-#line 1692 "grammar.y"
+#line 1622 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), GE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 383:
 
 /* Line 1464 of yacc.c  */
-#line 1697 "grammar.y"
+#line 1627 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 384:
 
 /* Line 1464 of yacc.c  */
-#line 1698 "grammar.y"
+#line 1628 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 385:
 
 /* Line 1464 of yacc.c  */
-#line 1699 "grammar.y"
+#line 1629 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 386:
 
 /* Line 1464 of yacc.c  */
-#line 1700 "grammar.y"
+#line 1630 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 387:
 
 /* Line 1464 of yacc.c  */
-#line 1702 "grammar.y"
+#line 1632 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 388:
 
 /* Line 1464 of yacc.c  */
-#line 1703 "grammar.y"
+#line 1633 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 389:
 
 /* Line 1464 of yacc.c  */
-#line 1704 "grammar.y"
+#line 1634 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 390:
 
 /* Line 1464 of yacc.c  */
-#line 1705 "grammar.y"
+#line 1635 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 392:
 
 /* Line 1464 of yacc.c  */
-#line 1710 "grammar.y"
+#line 1640 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 393:
 
 /* Line 1464 of yacc.c  */
-#line 1711 "grammar.y"
+#line 1641 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 394:
 
 /* Line 1464 of yacc.c  */
-#line 1713 "grammar.y"
+#line 1643 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 395:
 
 /* Line 1464 of yacc.c  */
-#line 1714 "grammar.y"
+#line 1644 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 397:
 
 /* Line 1464 of yacc.c  */
-#line 1719 "grammar.y"
+#line 1649 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 398:
 
 /* Line 1464 of yacc.c  */
-#line 1720 "grammar.y"
+#line 1650 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 399:
 
 /* Line 1464 of yacc.c  */
-#line 1722 "grammar.y"
+#line 1652 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 400:
 
 /* Line 1464 of yacc.c  */
-#line 1723 "grammar.y"
+#line 1653 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 402:
 
 /* Line 1464 of yacc.c  */
-#line 1728 "grammar.y"
+#line 1658 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 403:
 
 /* Line 1464 of yacc.c  */
-#line 1729 "grammar.y"
+#line 1659 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 404:
 
 /* Line 1464 of yacc.c  */
-#line 1731 "grammar.y"
+#line 1661 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 405:
 
 /* Line 1464 of yacc.c  */
-#line 1732 "grammar.y"
+#line 1662 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 407:
 
 /* Line 1464 of yacc.c  */
-#line 1737 "grammar.y"
+#line 1667 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), AND_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 408:
 
 /* Line 1464 of yacc.c  */
-#line 1738 "grammar.y"
+#line 1668 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), AND_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 410:
 
 /* Line 1464 of yacc.c  */
-#line 1743 "grammar.y"
+#line 1673 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), OR_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 411:
 
 /* Line 1464 of yacc.c  */
-#line 1744 "grammar.y"
+#line 1674 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), OR_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 413:
 
 /* Line 1464 of yacc.c  */
-#line 1749 "grammar.y"
+#line 1679 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 414:
 
 /* Line 1464 of yacc.c  */
-#line 1750 "grammar.y"
+#line 1680 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 415:
 
 /* Line 1464 of yacc.c  */
-#line 1751 "grammar.y"
+#line 1681 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 416:
 
 /* Line 1464 of yacc.c  */
-#line 1752 "grammar.y"
+#line 1682 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 417:
 
 /* Line 1464 of yacc.c  */
-#line 1754 "grammar.y"
+#line 1684 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 418:
 
 /* Line 1464 of yacc.c  */
-#line 1755 "grammar.y"
+#line 1685 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 419:
 
 /* Line 1464 of yacc.c  */
-#line 1756 "grammar.y"
+#line 1686 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 420:
 
 /* Line 1464 of yacc.c  */
-#line 1757 "grammar.y"
+#line 1687 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 421:
 
 /* Line 1464 of yacc.c  */
-#line 1759 "grammar.y"
+#line 1689 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 422:
 
 /* Line 1464 of yacc.c  */
-#line 1760 "grammar.y"
+#line 1690 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 423:
 
 /* Line 1464 of yacc.c  */
-#line 1761 "grammar.y"
+#line 1691 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 424:
 
 /* Line 1464 of yacc.c  */
-#line 1762 "grammar.y"
+#line 1692 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 425:
 
 /* Line 1464 of yacc.c  */
-#line 1764 "grammar.y"
+#line 1694 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 426:
 
 /* Line 1464 of yacc.c  */
-#line 1765 "grammar.y"
+#line 1695 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 427:
 
 /* Line 1464 of yacc.c  */
-#line 1766 "grammar.y"
+#line 1696 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 428:
 
 /* Line 1464 of yacc.c  */
-#line 1767 "grammar.y"
+#line 1697 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 430:
 
 /* Line 1464 of yacc.c  */
-#line 1772 "grammar.y"
+#line 1702 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 431:
 
 /* Line 1464 of yacc.c  */
-#line 1773 "grammar.y"
+#line 1703 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 432:
 
 /* Line 1464 of yacc.c  */
-#line 1774 "grammar.y"
+#line 1704 "grammar.y"
     { Compiler_Error($"l-value expected\n"); (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 433:
 
 /* Line 1464 of yacc.c  */
-#line 1775 "grammar.y"
+#line 1705 "grammar.y"
     { Compiler_Error($"l-value expected\n"); (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 434:
 
 /* Line 1464 of yacc.c  */
-#line 1777 "grammar.y"
+#line 1707 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 435:
 
 /* Line 1464 of yacc.c  */
-#line 1778 "grammar.y"
+#line 1708 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 436:
 
 /* Line 1464 of yacc.c  */
-#line 1779 "grammar.y"
+#line 1709 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 437:
 
 /* Line 1464 of yacc.c  */
-#line 1780 "grammar.y"
+#line 1710 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 438:
 
 /* Line 1464 of yacc.c  */
-#line 1784 "grammar.y"
+#line 1714 "grammar.y"
     { (yyval.i) = '='; ;}
     break;
 
   case 439:
 
 /* Line 1464 of yacc.c  */
-#line 1785 "grammar.y"
+#line 1715 "grammar.y"
     { (yyval.i) = MUL_ASSIGN; ;}
     break;
 
   case 440:
 
 /* Line 1464 of yacc.c  */
-#line 1786 "grammar.y"
+#line 1716 "grammar.y"
     { (yyval.i) = DIV_ASSIGN; ;}
     break;
 
   case 441:
 
 /* Line 1464 of yacc.c  */
-#line 1787 "grammar.y"
+#line 1717 "grammar.y"
     { (yyval.i) = MOD_ASSIGN; ;}
     break;
 
   case 442:
 
 /* Line 1464 of yacc.c  */
-#line 1788 "grammar.y"
+#line 1718 "grammar.y"
     { (yyval.i) = ADD_ASSIGN; ;}
     break;
 
   case 443:
 
 /* Line 1464 of yacc.c  */
-#line 1789 "grammar.y"
+#line 1719 "grammar.y"
     { (yyval.i) = SUB_ASSIGN; ;}
     break;
 
   case 444:
 
 /* Line 1464 of yacc.c  */
-#line 1790 "grammar.y"
+#line 1720 "grammar.y"
     { (yyval.i) = LEFT_ASSIGN; ;}
     break;
 
   case 445:
 
 /* Line 1464 of yacc.c  */
-#line 1791 "grammar.y"
+#line 1721 "grammar.y"
     { (yyval.i) = RIGHT_ASSIGN; ;}
     break;
 
   case 446:
 
 /* Line 1464 of yacc.c  */
-#line 1792 "grammar.y"
+#line 1722 "grammar.y"
     { (yyval.i) = AND_ASSIGN; ;}
     break;
 
   case 447:
 
 /* Line 1464 of yacc.c  */
-#line 1793 "grammar.y"
+#line 1723 "grammar.y"
     { (yyval.i) = XOR_ASSIGN; ;}
     break;
 
   case 448:
 
 /* Line 1464 of yacc.c  */
-#line 1794 "grammar.y"
+#line 1724 "grammar.y"
     { (yyval.i) = OR_ASSIGN; ;}
     break;
 
   case 449:
 
 /* Line 1464 of yacc.c  */
-#line 1798 "grammar.y"
+#line 1728 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 450:
 
 /* Line 1464 of yacc.c  */
-#line 1799 "grammar.y"
+#line 1729 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 451:
 
 /* Line 1464 of yacc.c  */
-#line 1800 "grammar.y"
+#line 1730 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 453:
 
 /* Line 1464 of yacc.c  */
-#line 1805 "grammar.y"
+#line 1735 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 454:
 
 /* Line 1464 of yacc.c  */
-#line 1806 "grammar.y"
+#line 1736 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 455:
 
 /* Line 1464 of yacc.c  */
-#line 1807 "grammar.y"
+#line 1737 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 457:
 
 /* Line 1464 of yacc.c  */
-#line 1812 "grammar.y"
+#line 1742 "grammar.y"
     { (yyval.exp) = MkExpDummy(); (yyval.exp).loc = (yyloc); /*printf("Sorry, didn't mean that syntax error\n");*/ ;}
     break;
 
   case 459:
 
 /* Line 1464 of yacc.c  */
-#line 1814 "grammar.y"
+#line 1744 "grammar.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (2)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 460:
 
 /* Line 1464 of yacc.c  */
-#line 1816 "grammar.y"
+#line 1746 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[(1) - (3)].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 461:
 
 /* Line 1464 of yacc.c  */
-#line 1817 "grammar.y"
+#line 1747 "grammar.y"
     { (yyval.exp) = MkExpPointer((yyvsp[(1) - (3)].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 462:
 
 /* Line 1464 of yacc.c  */
-#line 1819 "grammar.y"
+#line 1749 "grammar.y"
     { yyerror(); (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 463:
 
 /* Line 1464 of yacc.c  */
-#line 1820 "grammar.y"
+#line 1750 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 464:
 
 /* Line 1464 of yacc.c  */
-#line 1825 "grammar.y"
+#line 1755 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[(1) - (3)].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 465:
 
 /* Line 1464 of yacc.c  */
-#line 1827 "grammar.y"
+#line 1757 "grammar.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].list)); (yyval.exp).loc = (yyloc); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).call.argLoc.end.charPos++;;}
     break;
 
   case 466:
 
 /* Line 1464 of yacc.c  */
-#line 1832 "grammar.y"
+#line 1762 "grammar.y"
     { (yyval.exp) = MkExpMember((yyvsp[(1) - (3)].exp), null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 467:
 
 /* Line 1464 of yacc.c  */
-#line 1860 "grammar.y"
+#line 1790 "grammar.y"
     { (yyval.exp) = MkExpOp(null, INC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 468:
 
 /* Line 1464 of yacc.c  */
-#line 1861 "grammar.y"
+#line 1791 "grammar.y"
     { (yyval.exp) = MkExpOp(null, DEC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 469:
 
 /* Line 1464 of yacc.c  */
-#line 1862 "grammar.y"
+#line 1792 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[(1) - (2)].i), (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 470:
 
 /* Line 1464 of yacc.c  */
-#line 1863 "grammar.y"
+#line 1793 "grammar.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[(1) - (2)].i), (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 471:
 
 /* Line 1464 of yacc.c  */
-#line 1865 "grammar.y"
+#line 1795 "grammar.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 472:
 
 /* Line 1464 of yacc.c  */
-#line 1866 "grammar.y"
+#line 1796 "grammar.y"
     { (yyval.exp) = MkExpTypeSize((yyvsp[(3) - (5)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 473:
 
 /* Line 1464 of yacc.c  */
-#line 1867 "grammar.y"
+#line 1797 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[(4) - (6)].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 474:
 
 /* Line 1464 of yacc.c  */
-#line 1868 "grammar.y"
+#line 1798 "grammar.y"
     { (yyval.exp) = MkExpClassSize((yyvsp[(4) - (6)].specifier)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 475:
 
 /* Line 1464 of yacc.c  */
-#line 1870 "grammar.y"
+#line 1800 "grammar.y"
     { (yyval.exp) = MkExpOp(null, ALIGNOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 476:
 
 /* Line 1464 of yacc.c  */
-#line 1871 "grammar.y"
+#line 1801 "grammar.y"
     { (yyval.exp) = MkExpTypeAlign((yyvsp[(3) - (5)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 480:
 
 /* Line 1464 of yacc.c  */
-#line 1886 "grammar.y"
+#line 1816 "grammar.y"
     { (yyval.exp) = MkExpCast((yyvsp[(2) - (4)].typeName), (yyvsp[(4) - (4)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 482:
 
 /* Line 1464 of yacc.c  */
-#line 1891 "grammar.y"
+#line 1821 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '*', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 483:
 
 /* Line 1464 of yacc.c  */
-#line 1892 "grammar.y"
+#line 1822 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '/', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 484:
 
 /* Line 1464 of yacc.c  */
-#line 1893 "grammar.y"
+#line 1823 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '%', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 485:
 
 /* Line 1464 of yacc.c  */
-#line 1894 "grammar.y"
+#line 1824 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '*', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 486:
 
 /* Line 1464 of yacc.c  */
-#line 1895 "grammar.y"
+#line 1825 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '/', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 487:
 
 /* Line 1464 of yacc.c  */
-#line 1896 "grammar.y"
+#line 1826 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '%', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 489:
 
 /* Line 1464 of yacc.c  */
-#line 1901 "grammar.y"
+#line 1831 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '+', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 490:
 
 /* Line 1464 of yacc.c  */
-#line 1905 "grammar.y"
+#line 1835 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '-', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 491:
 
 /* Line 1464 of yacc.c  */
-#line 1909 "grammar.y"
+#line 1839 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '+', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 492:
 
 /* Line 1464 of yacc.c  */
-#line 1913 "grammar.y"
+#line 1843 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '-', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 494:
 
 /* Line 1464 of yacc.c  */
-#line 1921 "grammar.y"
+#line 1851 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LEFT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 495:
 
 /* Line 1464 of yacc.c  */
-#line 1922 "grammar.y"
+#line 1852 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), RIGHT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 496:
 
 /* Line 1464 of yacc.c  */
-#line 1923 "grammar.y"
+#line 1853 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LEFT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 497:
 
 /* Line 1464 of yacc.c  */
-#line 1924 "grammar.y"
+#line 1854 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), RIGHT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 499:
 
 /* Line 1464 of yacc.c  */
-#line 1930 "grammar.y"
+#line 1860 "grammar.y"
     {
       if((yyvsp[(1) - (2)].exp).type == identifierExp)
       {
-         if((yyvsp[(1) - (2)].exp).identifier._class && !(yyvsp[(1) - (2)].exp).identifier._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(1) - (2)].exp).identifier.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (2)].exp).identifier.string);
+         _DeclClass((yyvsp[(1) - (2)].exp).identifier._class, (yyvsp[(1) - (2)].exp).identifier.string);
 
          // printf("Declaring Class %s\n", $1.identifier.string);
          skipErrors = false;
@@ -16946,392 +16908,392 @@ yyreduce:
   case 500:
 
 /* Line 1464 of yacc.c  */
-#line 1980 "grammar.y"
+#line 1902 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '>', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 501:
 
 /* Line 1464 of yacc.c  */
-#line 1981 "grammar.y"
+#line 1903 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 502:
 
 /* Line 1464 of yacc.c  */
-#line 1982 "grammar.y"
+#line 1904 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), GE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 503:
 
 /* Line 1464 of yacc.c  */
-#line 1983 "grammar.y"
+#line 1905 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '<', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 504:
 
 /* Line 1464 of yacc.c  */
-#line 1984 "grammar.y"
+#line 1906 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '>', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 505:
 
 /* Line 1464 of yacc.c  */
-#line 1985 "grammar.y"
+#line 1907 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 506:
 
 /* Line 1464 of yacc.c  */
-#line 1986 "grammar.y"
+#line 1908 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), GE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 508:
 
 /* Line 1464 of yacc.c  */
-#line 1991 "grammar.y"
+#line 1913 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 509:
 
 /* Line 1464 of yacc.c  */
-#line 1992 "grammar.y"
+#line 1914 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 510:
 
 /* Line 1464 of yacc.c  */
-#line 1993 "grammar.y"
+#line 1915 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 511:
 
 /* Line 1464 of yacc.c  */
-#line 1994 "grammar.y"
+#line 1916 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 512:
 
 /* Line 1464 of yacc.c  */
-#line 2001 "grammar.y"
+#line 1923 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 513:
 
 /* Line 1464 of yacc.c  */
-#line 2002 "grammar.y"
+#line 1924 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 514:
 
 /* Line 1464 of yacc.c  */
-#line 2003 "grammar.y"
+#line 1925 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 515:
 
 /* Line 1464 of yacc.c  */
-#line 2004 "grammar.y"
+#line 1926 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 517:
 
 /* Line 1464 of yacc.c  */
-#line 2009 "grammar.y"
+#line 1931 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 518:
 
 /* Line 1464 of yacc.c  */
-#line 2010 "grammar.y"
+#line 1932 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 519:
 
 /* Line 1464 of yacc.c  */
-#line 2012 "grammar.y"
+#line 1934 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 520:
 
 /* Line 1464 of yacc.c  */
-#line 2013 "grammar.y"
+#line 1935 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 522:
 
 /* Line 1464 of yacc.c  */
-#line 2018 "grammar.y"
+#line 1940 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 523:
 
 /* Line 1464 of yacc.c  */
-#line 2019 "grammar.y"
+#line 1941 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 524:
 
 /* Line 1464 of yacc.c  */
-#line 2021 "grammar.y"
+#line 1943 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 525:
 
 /* Line 1464 of yacc.c  */
-#line 2022 "grammar.y"
+#line 1944 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 527:
 
 /* Line 1464 of yacc.c  */
-#line 2027 "grammar.y"
+#line 1949 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 528:
 
 /* Line 1464 of yacc.c  */
-#line 2028 "grammar.y"
+#line 1950 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 529:
 
 /* Line 1464 of yacc.c  */
-#line 2030 "grammar.y"
+#line 1952 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 530:
 
 /* Line 1464 of yacc.c  */
-#line 2031 "grammar.y"
+#line 1953 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 532:
 
 /* Line 1464 of yacc.c  */
-#line 2036 "grammar.y"
+#line 1958 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), AND_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 533:
 
 /* Line 1464 of yacc.c  */
-#line 2037 "grammar.y"
+#line 1959 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), AND_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 535:
 
 /* Line 1464 of yacc.c  */
-#line 2042 "grammar.y"
+#line 1964 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), OR_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 536:
 
 /* Line 1464 of yacc.c  */
-#line 2043 "grammar.y"
+#line 1965 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), OR_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 538:
 
 /* Line 1464 of yacc.c  */
-#line 2048 "grammar.y"
+#line 1970 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 539:
 
 /* Line 1464 of yacc.c  */
-#line 2049 "grammar.y"
+#line 1971 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 540:
 
 /* Line 1464 of yacc.c  */
-#line 2050 "grammar.y"
+#line 1972 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 541:
 
 /* Line 1464 of yacc.c  */
-#line 2051 "grammar.y"
+#line 1973 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 542:
 
 /* Line 1464 of yacc.c  */
-#line 2052 "grammar.y"
+#line 1974 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 543:
 
 /* Line 1464 of yacc.c  */
-#line 2053 "grammar.y"
+#line 1975 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 544:
 
 /* Line 1464 of yacc.c  */
-#line 2054 "grammar.y"
+#line 1976 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 545:
 
 /* Line 1464 of yacc.c  */
-#line 2055 "grammar.y"
+#line 1977 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 546:
 
 /* Line 1464 of yacc.c  */
-#line 2057 "grammar.y"
+#line 1979 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 547:
 
 /* Line 1464 of yacc.c  */
-#line 2058 "grammar.y"
+#line 1980 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 548:
 
 /* Line 1464 of yacc.c  */
-#line 2059 "grammar.y"
+#line 1981 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 549:
 
 /* Line 1464 of yacc.c  */
-#line 2060 "grammar.y"
+#line 1982 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 550:
 
 /* Line 1464 of yacc.c  */
-#line 2061 "grammar.y"
+#line 1983 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 551:
 
 /* Line 1464 of yacc.c  */
-#line 2062 "grammar.y"
+#line 1984 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 552:
 
 /* Line 1464 of yacc.c  */
-#line 2063 "grammar.y"
+#line 1985 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 553:
 
 /* Line 1464 of yacc.c  */
-#line 2064 "grammar.y"
+#line 1986 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list), MkExpDummy()); (yyval.exp).loc = (yyloc); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (4)]); ;}
     break;
 
   case 554:
 
 /* Line 1464 of yacc.c  */
-#line 2066 "grammar.y"
+#line 1988 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 555:
 
 /* Line 1464 of yacc.c  */
-#line 2067 "grammar.y"
+#line 1989 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 556:
 
 /* Line 1464 of yacc.c  */
-#line 2068 "grammar.y"
+#line 1990 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 557:
 
 /* Line 1464 of yacc.c  */
-#line 2069 "grammar.y"
+#line 1991 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 558:
 
 /* Line 1464 of yacc.c  */
-#line 2071 "grammar.y"
+#line 1993 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 559:
 
 /* Line 1464 of yacc.c  */
-#line 2072 "grammar.y"
+#line 1994 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 560:
 
 /* Line 1464 of yacc.c  */
-#line 2073 "grammar.y"
+#line 1995 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 561:
 
 /* Line 1464 of yacc.c  */
-#line 2074 "grammar.y"
+#line 1996 "grammar.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 562:
 
 /* Line 1464 of yacc.c  */
-#line 2077 "grammar.y"
+#line 1999 "grammar.y"
     {
          yyerror();
          (yyval.exp) = MkExpCondition((yyvsp[(1) - (3)].exp), MkListOne(MkExpDummy()), MkExpDummy());
@@ -17344,7 +17306,7 @@ yyreduce:
   case 563:
 
 /* Line 1464 of yacc.c  */
-#line 2085 "grammar.y"
+#line 2007 "grammar.y"
     {
          (yyval.exp) = MkExpCondition((yyvsp[(1) - (3)].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[(2) - (3)]); (yyval.exp).cond.elseExp.loc = (yylsp[(3) - (3)]);
       ;}
@@ -17353,7 +17315,7 @@ yyreduce:
   case 564:
 
 /* Line 1464 of yacc.c  */
-#line 2089 "grammar.y"
+#line 2011 "grammar.y"
     {
          yyerror();
          (yyval.exp) = MkExpCondition((yyvsp[(1) - (2)].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[(2) - (2)]); (yyval.exp).cond.elseExp.loc = (yylsp[(2) - (2)]);
@@ -17363,7 +17325,7 @@ yyreduce:
   case 565:
 
 /* Line 1464 of yacc.c  */
-#line 2094 "grammar.y"
+#line 2016 "grammar.y"
     {
          (yyval.exp) = MkExpCondition((yyvsp[(1) - (2)].exp), MkListOne(MkExpDummy()), MkExpDummy()); (yyval.exp).loc = (yyloc); ((Expression)(yyval.exp).cond.exp->last).loc = (yylsp[(2) - (2)]); (yyval.exp).cond.elseExp.loc = (yylsp[(2) - (2)]);
       ;}
@@ -17372,994 +17334,994 @@ yyreduce:
   case 567:
 
 /* Line 1464 of yacc.c  */
-#line 2101 "grammar.y"
+#line 2023 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 568:
 
 /* Line 1464 of yacc.c  */
-#line 2105 "grammar.y"
+#line 2027 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 569:
 
 /* Line 1464 of yacc.c  */
-#line 2110 "grammar.y"
+#line 2032 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 570:
 
 /* Line 1464 of yacc.c  */
-#line 2111 "grammar.y"
+#line 2033 "grammar.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 571:
 
 /* Line 1464 of yacc.c  */
-#line 2115 "grammar.y"
+#line 2037 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 572:
 
 /* Line 1464 of yacc.c  */
-#line 2116 "grammar.y"
+#line 2038 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (2)].exp)); ;}
     break;
 
   case 573:
 
 /* Line 1464 of yacc.c  */
-#line 2117 "grammar.y"
+#line 2039 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 574:
 
 /* Line 1464 of yacc.c  */
-#line 2118 "grammar.y"
+#line 2040 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 575:
 
 /* Line 1464 of yacc.c  */
-#line 2124 "grammar.y"
+#line 2046 "grammar.y"
     { yyerror(); (yyval.list) = (yyvsp[(1) - (2)].list); FreeList((yyvsp[(2) - (2)].list), FreeExpression); ;}
     break;
 
   case 576:
 
 /* Line 1464 of yacc.c  */
-#line 2125 "grammar.y"
+#line 2047 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); FreeList((yyvsp[(2) - (2)].list), FreeExpression); ;}
     break;
 
   case 577:
 
 /* Line 1464 of yacc.c  */
-#line 2126 "grammar.y"
+#line 2048 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); FreeList((yyvsp[(2) - (2)].list), FreeExpression); ;}
     break;
 
   case 578:
 
 /* Line 1464 of yacc.c  */
-#line 2130 "grammar.y"
+#line 2052 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 579:
 
 /* Line 1464 of yacc.c  */
-#line 2131 "grammar.y"
+#line 2053 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (2)].exp)); ;}
     break;
 
   case 580:
 
 /* Line 1464 of yacc.c  */
-#line 2132 "grammar.y"
+#line 2054 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 581:
 
 /* Line 1464 of yacc.c  */
-#line 2133 "grammar.y"
+#line 2055 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 584:
 
 /* Line 1464 of yacc.c  */
-#line 2143 "grammar.y"
+#line 2065 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPEDEF); ;}
     break;
 
   case 585:
 
 /* Line 1464 of yacc.c  */
-#line 2144 "grammar.y"
+#line 2066 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTERN); ;}
     break;
 
   case 586:
 
 /* Line 1464 of yacc.c  */
-#line 2145 "grammar.y"
+#line 2067 "grammar.y"
     { (yyval.specifier) = MkSpecifier(STATIC); ;}
     break;
 
   case 587:
 
 /* Line 1464 of yacc.c  */
-#line 2146 "grammar.y"
+#line 2068 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THREAD); ;}
     break;
 
   case 588:
 
 /* Line 1464 of yacc.c  */
-#line 2147 "grammar.y"
+#line 2069 "grammar.y"
     { (yyval.specifier) = MkSpecifier(AUTO); ;}
     break;
 
   case 589:
 
 /* Line 1464 of yacc.c  */
-#line 2148 "grammar.y"
+#line 2070 "grammar.y"
     { (yyval.specifier) = MkSpecifier(REGISTER); ;}
     break;
 
   case 590:
 
 /* Line 1464 of yacc.c  */
-#line 2149 "grammar.y"
+#line 2071 "grammar.y"
     { (yyval.specifier) = MkSpecifier(RESTRICT); ;}
     break;
 
   case 591:
 
 /* Line 1464 of yacc.c  */
-#line 2153 "grammar.y"
+#line 2075 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPEDEF); structDeclMode = declMode = defaultAccess; ;}
     break;
 
   case 592:
 
 /* Line 1464 of yacc.c  */
-#line 2154 "grammar.y"
+#line 2076 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTERN); ;}
     break;
 
   case 593:
 
 /* Line 1464 of yacc.c  */
-#line 2155 "grammar.y"
+#line 2077 "grammar.y"
     { (yyval.specifier) = MkSpecifier(STATIC); structDeclMode = declMode = staticAccess; ;}
     break;
 
   case 594:
 
 /* Line 1464 of yacc.c  */
-#line 2156 "grammar.y"
+#line 2078 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THREAD); ;}
     break;
 
   case 595:
 
 /* Line 1464 of yacc.c  */
-#line 2157 "grammar.y"
+#line 2079 "grammar.y"
     { (yyval.specifier) = MkSpecifier(AUTO); ;}
     break;
 
   case 596:
 
 /* Line 1464 of yacc.c  */
-#line 2158 "grammar.y"
+#line 2080 "grammar.y"
     { (yyval.specifier) = MkSpecifier(REGISTER); ;}
     break;
 
   case 597:
 
 /* Line 1464 of yacc.c  */
-#line 2159 "grammar.y"
+#line 2081 "grammar.y"
     { (yyval.specifier) = MkSpecifier(RESTRICT); ;}
     break;
 
   case 598:
 
 /* Line 1464 of yacc.c  */
-#line 2163 "grammar.y"
+#line 2085 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[(1) - (1)].id), null); ;}
     break;
 
   case 599:
 
 /* Line 1464 of yacc.c  */
-#line 2164 "grammar.y"
+#line 2086 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 600:
 
 /* Line 1464 of yacc.c  */
-#line 2165 "grammar.y"
+#line 2087 "grammar.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 601:
 
 /* Line 1464 of yacc.c  */
-#line 2169 "grammar.y"
+#line 2091 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].enumerator)); ;}
     break;
 
   case 602:
 
 /* Line 1464 of yacc.c  */
-#line 2170 "grammar.y"
+#line 2092 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].enumerator)); ;}
     break;
 
   case 604:
 
 /* Line 1464 of yacc.c  */
-#line 2175 "grammar.y"
+#line 2097 "grammar.y"
     { memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 605:
 
 /* Line 1464 of yacc.c  */
-#line 2179 "grammar.y"
+#line 2101 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (2)].id), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 606:
 
 /* Line 1464 of yacc.c  */
-#line 2180 "grammar.y"
+#line 2102 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 607:
 
 /* Line 1464 of yacc.c  */
-#line 2184 "grammar.y"
+#line 2106 "grammar.y"
     { (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS (yyval.specifier) = (yyvsp[(1) - (2)].specifier); ;}
     break;
 
   case 608:
 
 /* Line 1464 of yacc.c  */
-#line 2185 "grammar.y"
+#line 2107 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (4)].id), null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 609:
 
 /* Line 1464 of yacc.c  */
-#line 2186 "grammar.y"
+#line 2108 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (4)].specifier).name), null); FreeSpecifier((yyvsp[(2) - (4)].specifier)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 610:
 
 /* Line 1464 of yacc.c  */
-#line 2190 "grammar.y"
+#line 2112 "grammar.y"
     { (yyval.specifier) = MkEnum(null, (yyvsp[(3) - (3)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 611:
 
 /* Line 1464 of yacc.c  */
-#line 2191 "grammar.y"
+#line 2113 "grammar.y"
     { (yyval.specifier) = MkEnum(null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 612:
 
 /* Line 1464 of yacc.c  */
-#line 2193 "grammar.y"
+#line 2115 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (4)].id), (yyvsp[(4) - (4)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 613:
 
 /* Line 1464 of yacc.c  */
-#line 2194 "grammar.y"
+#line 2116 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list));  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 614:
 
 /* Line 1464 of yacc.c  */
-#line 2195 "grammar.y"
+#line 2117 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (4)].id), null);  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 615:
 
 /* Line 1464 of yacc.c  */
-#line 2196 "grammar.y"
+#line 2118 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[(6) - (6)].list);  POP_DEFAULT_ACCESS ;}
     break;
 
   case 616:
 
 /* Line 1464 of yacc.c  */
-#line 2197 "grammar.y"
+#line 2119 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[(6) - (6)].list);  POP_DEFAULT_ACCESS ;}
     break;
 
   case 617:
 
 /* Line 1464 of yacc.c  */
-#line 2199 "grammar.y"
+#line 2121 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (4)].specifier).name), (yyvsp[(4) - (4)].list)); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[(2) - (4)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 618:
 
 /* Line 1464 of yacc.c  */
-#line 2200 "grammar.y"
+#line 2122 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[(2) - (5)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 619:
 
 /* Line 1464 of yacc.c  */
-#line 2201 "grammar.y"
+#line 2123 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (4)].specifier).name), null); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[(2) - (4)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 620:
 
 /* Line 1464 of yacc.c  */
-#line 2202 "grammar.y"
+#line 2124 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (6)].specifier).name), (yyvsp[(4) - (6)].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[(6) - (6)].list); FreeSpecifier((yyvsp[(2) - (6)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 621:
 
 /* Line 1464 of yacc.c  */
-#line 2203 "grammar.y"
+#line 2125 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (6)].specifier).name), (yyvsp[(4) - (6)].list)); (yyval.specifier).loc = (yyloc); (yyval.specifier).definitions = (yyvsp[(6) - (6)].list); FreeSpecifier((yyvsp[(2) - (6)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 622:
 
 /* Line 1464 of yacc.c  */
-#line 2205 "grammar.y"
+#line 2127 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 623:
 
 /* Line 1464 of yacc.c  */
-#line 2206 "grammar.y"
+#line 2128 "grammar.y"
     { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); (yyval.specifier).loc = (yyloc); FreeSpecifier((yyvsp[(2) - (5)].specifier)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 624:
 
 /* Line 1464 of yacc.c  */
-#line 2210 "grammar.y"
-    { (yyval.id) = (yyvsp[(2) - (2)].id); if(declMode) DeclClassAddNameSpace((yyvsp[(2) - (2)].id).string); ;}
+#line 2132 "grammar.y"
+    { (yyval.id) = (yyvsp[(2) - (2)].id); if(declMode) DeclClassAddNameSpace((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ;}
     break;
 
   case 625:
 
 /* Line 1464 of yacc.c  */
-#line 2211 "grammar.y"
-    { (yyval.id) = MkIdentifier((yyvsp[(2) - (2)].specifier).name); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
+#line 2133 "grammar.y"
+    { (yyval.id) = MkIdentifier((yyvsp[(2) - (2)].specifier).name); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 626:
 
 /* Line 1464 of yacc.c  */
-#line 2215 "grammar.y"
+#line 2137 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (2)].specifier); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 627:
 
 /* Line 1464 of yacc.c  */
-#line 2216 "grammar.y"
+#line 2138 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (5)].id), null); (yyval.specifier).baseSpecs = (yyvsp[(3) - (5)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 628:
 
 /* Line 1464 of yacc.c  */
-#line 2217 "grammar.y"
+#line 2139 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (3)].id), null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 629:
 
 /* Line 1464 of yacc.c  */
-#line 2221 "grammar.y"
+#line 2143 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (5)].id), (yyvsp[(5) - (5)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (5)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 630:
 
 /* Line 1464 of yacc.c  */
-#line 2222 "grammar.y"
+#line 2144 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (6)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 631:
 
 /* Line 1464 of yacc.c  */
-#line 2223 "grammar.y"
+#line 2145 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (5)].id), null); (yyval.specifier).baseSpecs = (yyvsp[(3) - (5)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 632:
 
 /* Line 1464 of yacc.c  */
-#line 2224 "grammar.y"
+#line 2146 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (7)].id), (yyvsp[(5) - (7)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (7)].list); (yyval.specifier).definitions = (yyvsp[(7) - (7)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 633:
 
 /* Line 1464 of yacc.c  */
-#line 2225 "grammar.y"
+#line 2147 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (7)].id), (yyvsp[(5) - (7)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (7)].list); (yyval.specifier).definitions = (yyvsp[(7) - (7)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 634:
 
 /* Line 1464 of yacc.c  */
-#line 2226 "grammar.y"
+#line 2148 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (8)].id), (yyvsp[(5) - (8)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (8)].list); (yyval.specifier).definitions = (yyvsp[(8) - (8)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 635:
 
 /* Line 1464 of yacc.c  */
-#line 2227 "grammar.y"
+#line 2149 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (8)].id), (yyvsp[(5) - (8)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (8)].list); (yyval.specifier).definitions = (yyvsp[(8) - (8)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 636:
 
 /* Line 1464 of yacc.c  */
-#line 2228 "grammar.y"
+#line 2150 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (7)].id), null); (yyval.specifier).baseSpecs = (yyvsp[(3) - (7)].list); (yyval.specifier).definitions = (yyvsp[(7) - (7)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 637:
 
 /* Line 1464 of yacc.c  */
-#line 2229 "grammar.y"
+#line 2151 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (7)].id), null); (yyval.specifier).baseSpecs = (yyvsp[(3) - (7)].list); (yyval.specifier).definitions = (yyvsp[(7) - (7)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 638:
 
 /* Line 1464 of yacc.c  */
-#line 2231 "grammar.y"
+#line 2153 "grammar.y"
     { (yyval.specifier) = MkEnum(null, (yyvsp[(3) - (3)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 639:
 
 /* Line 1464 of yacc.c  */
-#line 2232 "grammar.y"
+#line 2154 "grammar.y"
     { (yyval.specifier) = MkEnum(null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 640:
 
 /* Line 1464 of yacc.c  */
-#line 2234 "grammar.y"
+#line 2156 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 641:
 
 /* Line 1464 of yacc.c  */
-#line 2235 "grammar.y"
+#line 2157 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].list)); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 642:
 
 /* Line 1464 of yacc.c  */
-#line 2236 "grammar.y"
+#line 2158 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (3)].id), null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 643:
 
 /* Line 1464 of yacc.c  */
-#line 2237 "grammar.y"
+#line 2159 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (5)].id), (yyvsp[(3) - (5)].list)); (yyval.specifier).definitions = (yyvsp[(5) - (5)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 644:
 
 /* Line 1464 of yacc.c  */
-#line 2238 "grammar.y"
+#line 2160 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (5)].id), (yyvsp[(3) - (5)].list)); (yyval.specifier).definitions = (yyvsp[(5) - (5)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 645:
 
 /* Line 1464 of yacc.c  */
-#line 2240 "grammar.y"
+#line 2162 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (6)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 646:
 
 /* Line 1464 of yacc.c  */
-#line 2241 "grammar.y"
+#line 2163 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (7)].id), (yyvsp[(5) - (7)].list)); (yyval.specifier).baseSpecs = (yyvsp[(3) - (7)].list);  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 647:
 
 /* Line 1464 of yacc.c  */
-#line 2242 "grammar.y"
+#line 2164 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (6)].id), null); (yyval.specifier).baseSpecs = (yyvsp[(3) - (6)].list); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 648:
 
 /* Line 1464 of yacc.c  */
-#line 2243 "grammar.y"
+#line 2165 "grammar.y"
     { (yyval.specifier) = MkEnum((yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].list));  (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 653:
 
 /* Line 1464 of yacc.c  */
-#line 2257 "grammar.y"
+#line 2179 "grammar.y"
     { (yyval.specifier) = MkSpecifierExtended((yyvsp[(1) - (1)].extDecl)); ;}
     break;
 
   case 654:
 
 /* Line 1464 of yacc.c  */
-#line 2261 "grammar.y"
+#line 2183 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CONST); ;}
     break;
 
   case 655:
 
 /* Line 1464 of yacc.c  */
-#line 2262 "grammar.y"
+#line 2184 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOLATILE); ;}
     break;
 
   case 656:
 
 /* Line 1464 of yacc.c  */
-#line 2263 "grammar.y"
+#line 2185 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (1)].specifier); ;}
     break;
 
   case 657:
 
 /* Line 1464 of yacc.c  */
-#line 2268 "grammar.y"
+#line 2190 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 658:
 
 /* Line 1464 of yacc.c  */
-#line 2269 "grammar.y"
+#line 2191 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier));  ;}
     break;
 
   case 659:
 
 /* Line 1464 of yacc.c  */
-#line 2273 "grammar.y"
+#line 2195 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 660:
 
 /* Line 1464 of yacc.c  */
-#line 2274 "grammar.y"
+#line 2196 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 661:
 
 /* Line 1464 of yacc.c  */
-#line 2275 "grammar.y"
+#line 2197 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 662:
 
 /* Line 1464 of yacc.c  */
-#line 2276 "grammar.y"
+#line 2198 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 663:
 
 /* Line 1464 of yacc.c  */
-#line 2277 "grammar.y"
+#line 2199 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 664:
 
 /* Line 1464 of yacc.c  */
-#line 2278 "grammar.y"
+#line 2200 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 665:
 
 /* Line 1464 of yacc.c  */
-#line 2279 "grammar.y"
+#line 2201 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 666:
 
 /* Line 1464 of yacc.c  */
-#line 2280 "grammar.y"
+#line 2202 "grammar.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 667:
 
 /* Line 1464 of yacc.c  */
-#line 2281 "grammar.y"
+#line 2203 "grammar.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 668:
 
 /* Line 1464 of yacc.c  */
-#line 2282 "grammar.y"
+#line 2204 "grammar.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 669:
 
 /* Line 1464 of yacc.c  */
-#line 2283 "grammar.y"
+#line 2205 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 670:
 
 /* Line 1464 of yacc.c  */
-#line 2284 "grammar.y"
+#line 2206 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 671:
 
 /* Line 1464 of yacc.c  */
-#line 2285 "grammar.y"
+#line 2207 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 675:
 
 /* Line 1464 of yacc.c  */
-#line 2289 "grammar.y"
+#line 2211 "grammar.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 676:
 
 /* Line 1464 of yacc.c  */
-#line 2290 "grammar.y"
+#line 2212 "grammar.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 677:
 
 /* Line 1464 of yacc.c  */
-#line 2291 "grammar.y"
-    { _DeclClass((yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
+#line 2213 "grammar.y"
+    { _DeclClass((yyvsp[(3) - (4)].id)._class, (yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
     break;
 
   case 678:
 
 /* Line 1464 of yacc.c  */
-#line 2292 "grammar.y"
+#line 2214 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 679:
 
 /* Line 1464 of yacc.c  */
-#line 2293 "grammar.y"
+#line 2215 "grammar.y"
     { (yyval.specifier) = MkSpecifier(TYPED_OBJECT); ;}
     break;
 
   case 680:
 
 /* Line 1464 of yacc.c  */
-#line 2294 "grammar.y"
+#line 2216 "grammar.y"
     { (yyval.specifier) = MkSpecifier(ANY_OBJECT); ;}
     break;
 
   case 681:
 
 /* Line 1464 of yacc.c  */
-#line 2295 "grammar.y"
+#line 2217 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_BOOL); ;}
     break;
 
   case 682:
 
 /* Line 1464 of yacc.c  */
-#line 2296 "grammar.y"
+#line 2218 "grammar.y"
     { (yyval.specifier) = MkSpecifier(BOOL); ;}
     break;
 
   case 683:
 
 /* Line 1464 of yacc.c  */
-#line 2297 "grammar.y"
+#line 2219 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_COMPLEX); ;}
     break;
 
   case 684:
 
 /* Line 1464 of yacc.c  */
-#line 2298 "grammar.y"
+#line 2220 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_IMAGINARY); ;}
     break;
 
   case 685:
 
 /* Line 1464 of yacc.c  */
-#line 2302 "grammar.y"
+#line 2224 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 686:
 
 /* Line 1464 of yacc.c  */
-#line 2303 "grammar.y"
+#line 2225 "grammar.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 687:
 
 /* Line 1464 of yacc.c  */
-#line 2304 "grammar.y"
+#line 2226 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 688:
 
 /* Line 1464 of yacc.c  */
-#line 2305 "grammar.y"
+#line 2227 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 689:
 
 /* Line 1464 of yacc.c  */
-#line 2306 "grammar.y"
+#line 2228 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 690:
 
 /* Line 1464 of yacc.c  */
-#line 2307 "grammar.y"
+#line 2229 "grammar.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 691:
 
 /* Line 1464 of yacc.c  */
-#line 2308 "grammar.y"
+#line 2230 "grammar.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 692:
 
 /* Line 1464 of yacc.c  */
-#line 2309 "grammar.y"
+#line 2231 "grammar.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 693:
 
 /* Line 1464 of yacc.c  */
-#line 2310 "grammar.y"
+#line 2232 "grammar.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 694:
 
 /* Line 1464 of yacc.c  */
-#line 2311 "grammar.y"
+#line 2233 "grammar.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 695:
 
 /* Line 1464 of yacc.c  */
-#line 2312 "grammar.y"
+#line 2234 "grammar.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 696:
 
 /* Line 1464 of yacc.c  */
-#line 2313 "grammar.y"
+#line 2235 "grammar.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 697:
 
 /* Line 1464 of yacc.c  */
-#line 2314 "grammar.y"
+#line 2236 "grammar.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 701:
 
 /* Line 1464 of yacc.c  */
-#line 2318 "grammar.y"
+#line 2240 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_BOOL); ;}
     break;
 
   case 702:
 
 /* Line 1464 of yacc.c  */
-#line 2319 "grammar.y"
+#line 2241 "grammar.y"
     { (yyval.specifier) = MkSpecifier(BOOL); ;}
     break;
 
   case 703:
 
 /* Line 1464 of yacc.c  */
-#line 2320 "grammar.y"
+#line 2242 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_COMPLEX); ;}
     break;
 
   case 704:
 
 /* Line 1464 of yacc.c  */
-#line 2321 "grammar.y"
+#line 2243 "grammar.y"
     { (yyval.specifier) = MkSpecifier(_IMAGINARY); ;}
     break;
 
   case 705:
 
 /* Line 1464 of yacc.c  */
-#line 2322 "grammar.y"
+#line 2244 "grammar.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 706:
 
 /* Line 1464 of yacc.c  */
-#line 2323 "grammar.y"
+#line 2245 "grammar.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 707:
 
 /* Line 1464 of yacc.c  */
-#line 2324 "grammar.y"
-    { _DeclClass((yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
+#line 2246 "grammar.y"
+    { _DeclClass((yyvsp[(3) - (4)].id)._class, (yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
     break;
 
   case 708:
 
 /* Line 1464 of yacc.c  */
-#line 2325 "grammar.y"
+#line 2247 "grammar.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 709:
 
 /* Line 1464 of yacc.c  */
-#line 2332 "grammar.y"
+#line 2254 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (1)].declarator), null); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 710:
 
 /* Line 1464 of yacc.c  */
-#line 2334 "grammar.y"
+#line 2256 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (2)].declarator), null); (yyval.declarator).structDecl.attrib = (yyvsp[(2) - (2)].attrib); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 711:
 
 /* Line 1464 of yacc.c  */
-#line 2336 "grammar.y"
+#line 2258 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator(null, (yyvsp[(2) - (2)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 712:
 
 /* Line 1464 of yacc.c  */
-#line 2338 "grammar.y"
+#line 2260 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 713:
 
 /* Line 1464 of yacc.c  */
-#line 2340 "grammar.y"
+#line 2262 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (5)].declarator), (yyvsp[(3) - (5)].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[(5) - (5)].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 714:
 
 /* Line 1464 of yacc.c  */
-#line 2342 "grammar.y"
+#line 2264 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator(null, (yyvsp[(2) - (2)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 715:
 
 /* Line 1464 of yacc.c  */
-#line 2344 "grammar.y"
+#line 2266 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 716:
 
 /* Line 1464 of yacc.c  */
-#line 2346 "grammar.y"
+#line 2268 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (5)].declarator), (yyvsp[(3) - (5)].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[(5) - (5)].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 717:
 
 /* Line 1464 of yacc.c  */
-#line 2348 "grammar.y"
+#line 2270 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (5)].declarator), (yyvsp[(3) - (5)].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[(5) - (5)].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 718:
 
 /* Line 1464 of yacc.c  */
-#line 2350 "grammar.y"
+#line 2272 "grammar.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (5)].declarator), (yyvsp[(3) - (5)].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[(5) - (5)].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 719:
 
 /* Line 1464 of yacc.c  */
-#line 2354 "grammar.y"
+#line 2276 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].declarator)); ;}
     break;
 
   case 720:
 
 /* Line 1464 of yacc.c  */
-#line 2355 "grammar.y"
+#line 2277 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].declarator)); ;}
     break;
 
   case 721:
 
 /* Line 1464 of yacc.c  */
-#line 2360 "grammar.y"
+#line 2282 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), (yyvsp[(2) - (2)].id), null);
          (yyval.specifier).addNameSpace = true;
@@ -18370,7 +18332,7 @@ yyreduce:
   case 722:
 
 /* Line 1464 of yacc.c  */
-#line 2366 "grammar.y"
+#line 2288 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), MkIdentifier((yyvsp[(2) - (2)].specifier).name), null);
          (yyval.specifier).ctx = PushContext();
@@ -18381,7 +18343,7 @@ yyreduce:
   case 723:
 
 /* Line 1464 of yacc.c  */
-#line 2372 "grammar.y"
+#line 2294 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), (yyvsp[(3) - (3)].id), null);
          (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);
@@ -18393,7 +18355,7 @@ yyreduce:
   case 724:
 
 /* Line 1464 of yacc.c  */
-#line 2379 "grammar.y"
+#line 2301 "grammar.y"
     {
          (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), MkIdentifier((yyvsp[(3) - (3)].specifier).name), null);
          (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);
@@ -18405,110 +18367,110 @@ yyreduce:
   case 725:
 
 /* Line 1464 of yacc.c  */
-#line 2388 "grammar.y"
+#line 2310 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (2)].specifier); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 726:
 
 /* Line 1464 of yacc.c  */
-#line 2389 "grammar.y"
+#line 2311 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 727:
 
 /* Line 1464 of yacc.c  */
-#line 2390 "grammar.y"
+#line 2312 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, null); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 728:
 
 /* Line 1464 of yacc.c  */
-#line 2391 "grammar.y"
+#line 2313 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (4)].extDecl); (yyval.specifier).loc = (yyloc); POP_DEFAULT_ACCESS ;}
     break;
 
   case 729:
 
 /* Line 1464 of yacc.c  */
-#line 2395 "grammar.y"
+#line 2317 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); AddStructDefinitions((yyvsp[(1) - (3)].specifier), (yyvsp[(3) - (3)].list));  POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 730:
 
 /* Line 1464 of yacc.c  */
-#line 2396 "grammar.y"
+#line 2318 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); AddStructDefinitions((yyvsp[(1) - (3)].specifier), (yyvsp[(3) - (3)].list));  POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 731:
 
 /* Line 1464 of yacc.c  */
-#line 2397 "grammar.y"
+#line 2319 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 732:
 
 /* Line 1464 of yacc.c  */
-#line 2399 "grammar.y"
+#line 2321 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, (yyvsp[(3) - (3)].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 733:
 
 /* Line 1464 of yacc.c  */
-#line 2400 "grammar.y"
+#line 2322 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, (yyvsp[(3) - (3)].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 734:
 
 /* Line 1464 of yacc.c  */
-#line 2401 "grammar.y"
+#line 2323 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 735:
 
 /* Line 1464 of yacc.c  */
-#line 2403 "grammar.y"
+#line 2325 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, (yyvsp[(4) - (4)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (4)].extDecl); POP_DEFAULT_ACCESS ;}
     break;
 
   case 736:
 
 /* Line 1464 of yacc.c  */
-#line 2404 "grammar.y"
+#line 2326 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, (yyvsp[(4) - (4)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (4)].extDecl); POP_DEFAULT_ACCESS ;}
     break;
 
   case 737:
 
 /* Line 1464 of yacc.c  */
-#line 2405 "grammar.y"
+#line 2327 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (4)].extDecl); POP_DEFAULT_ACCESS ;}
     break;
 
   case 738:
 
 /* Line 1464 of yacc.c  */
-#line 2409 "grammar.y"
+#line 2331 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (1)].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 739:
 
 /* Line 1464 of yacc.c  */
-#line 2414 "grammar.y"
+#line 2336 "grammar.y"
     {
         (yyval.specifier) = (yyvsp[(1) - (1)].specifier);
         if(declMode)
         {
-           ((yyvsp[(1) - (1)].specifier).addNameSpace ? DeclClassAddNameSpace : DeclClass)((yyvsp[(1) - (1)].specifier).id.string);
+           ((yyvsp[(1) - (1)].specifier).addNameSpace ? DeclClassAddNameSpace : DeclClass)((yyvsp[(1) - (1)].specifier).id._class, (yyvsp[(1) - (1)].specifier).id.string);
         }
      ;}
     break;
@@ -18516,9 +18478,9 @@ yyreduce:
   case 740:
 
 /* Line 1464 of yacc.c  */
-#line 2422 "grammar.y"
+#line 2344 "grammar.y"
     {
-      Symbol symbol = ((yyvsp[(1) - (4)].specifier).addNameSpace ? DeclClassAddNameSpace : DeclClass)((yyvsp[(1) - (4)].specifier).id.string);
+      Symbol symbol = ((yyvsp[(1) - (4)].specifier).addNameSpace ? DeclClassAddNameSpace : DeclClass)((yyvsp[(1) - (4)].specifier).id._class, (yyvsp[(1) - (4)].specifier).id.string);
       (yyval.specifier) = (yyvsp[(1) - (4)].specifier);
       symbol.templateParams = (yyvsp[(3) - (4)].list);
    ;}
@@ -18527,7 +18489,7 @@ yyreduce:
   case 741:
 
 /* Line 1464 of yacc.c  */
-#line 2431 "grammar.y"
+#line 2353 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[(1) - (3)].specifier);
       (yyval.specifier).baseSpecs = (yyvsp[(3) - (3)].list);
@@ -18538,35 +18500,35 @@ yyreduce:
   case 742:
 
 /* Line 1464 of yacc.c  */
-#line 2439 "grammar.y"
+#line 2361 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (2)].specifier); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 743:
 
 /* Line 1464 of yacc.c  */
-#line 2441 "grammar.y"
+#line 2363 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 744:
 
 /* Line 1464 of yacc.c  */
-#line 2442 "grammar.y"
+#line 2364 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 745:
 
 /* Line 1464 of yacc.c  */
-#line 2443 "grammar.y"
+#line 2365 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 746:
 
 /* Line 1464 of yacc.c  */
-#line 2448 "grammar.y"
+#line 2370 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[(1) - (3)].specifier);
       (yyval.specifier).definitions = (yyvsp[(3) - (3)].list);
@@ -18578,7 +18540,7 @@ yyreduce:
   case 747:
 
 /* Line 1464 of yacc.c  */
-#line 2455 "grammar.y"
+#line 2377 "grammar.y"
     {
       (yyval.specifier) = (yyvsp[(1) - (3)].specifier);
       (yyval.specifier).definitions = (yyvsp[(3) - (3)].list);
@@ -18590,14 +18552,14 @@ yyreduce:
   case 748:
 
 /* Line 1464 of yacc.c  */
-#line 2462 "grammar.y"
+#line 2384 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); POP_DEFAULT_ACCESS PopContext(curContext);;}
     break;
 
   case 749:
 
 /* Line 1464 of yacc.c  */
-#line 2465 "grammar.y"
+#line 2387 "grammar.y"
     {
         PopContext(curContext);
         if(!declMode)
@@ -18615,7 +18577,7 @@ yyreduce:
   case 750:
 
 /* Line 1464 of yacc.c  */
-#line 2478 "grammar.y"
+#line 2400 "grammar.y"
     {
         PopContext(curContext);
 
@@ -18634,495 +18596,485 @@ yyreduce:
   case 751:
 
 /* Line 1464 of yacc.c  */
-#line 2492 "grammar.y"
+#line 2414 "grammar.y"
     { (yyval.specifier) = (yyvsp[(1) - (3)].specifier); POP_DEFAULT_ACCESS PopContext(curContext); ;}
     break;
 
   case 752:
 
 /* Line 1464 of yacc.c  */
-#line 2495 "grammar.y"
+#line 2417 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, (yyvsp[(3) - (3)].list)); POP_DEFAULT_ACCESS  ;}
     break;
 
   case 753:
 
 /* Line 1464 of yacc.c  */
-#line 2497 "grammar.y"
+#line 2419 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, (yyvsp[(3) - (3)].list)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 754:
 
 /* Line 1464 of yacc.c  */
-#line 2499 "grammar.y"
+#line 2421 "grammar.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, null); POP_DEFAULT_ACCESS ;}
     break;
 
   case 755:
 
 /* Line 1464 of yacc.c  */
-#line 2503 "grammar.y"
+#line 2425 "grammar.y"
     { (yyval.specifierType) = structSpecifier; memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 756:
 
 /* Line 1464 of yacc.c  */
-#line 2504 "grammar.y"
+#line 2426 "grammar.y"
     { (yyval.specifierType) = unionSpecifier; memberAccessStack[++defaultMemberAccess] = publicAccess; ;}
     break;
 
   case 757:
 
 /* Line 1464 of yacc.c  */
-#line 2508 "grammar.y"
+#line 2430 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 758:
 
 /* Line 1464 of yacc.c  */
-#line 2509 "grammar.y"
+#line 2431 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 759:
 
 /* Line 1464 of yacc.c  */
-#line 2510 "grammar.y"
+#line 2432 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 760:
 
 /* Line 1464 of yacc.c  */
-#line 2511 "grammar.y"
+#line 2433 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 761:
 
 /* Line 1464 of yacc.c  */
-#line 2512 "grammar.y"
+#line 2434 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 762:
 
 /* Line 1464 of yacc.c  */
-#line 2513 "grammar.y"
+#line 2435 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 763:
 
 /* Line 1464 of yacc.c  */
-#line 2514 "grammar.y"
+#line 2436 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 764:
 
 /* Line 1464 of yacc.c  */
-#line 2515 "grammar.y"
+#line 2437 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 765:
 
 /* Line 1464 of yacc.c  */
-#line 2519 "grammar.y"
+#line 2441 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 766:
 
 /* Line 1464 of yacc.c  */
-#line 2520 "grammar.y"
+#line 2442 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 767:
 
 /* Line 1464 of yacc.c  */
-#line 2521 "grammar.y"
+#line 2443 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 768:
 
 /* Line 1464 of yacc.c  */
-#line 2522 "grammar.y"
+#line 2444 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 769:
 
 /* Line 1464 of yacc.c  */
-#line 2523 "grammar.y"
+#line 2445 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 770:
 
 /* Line 1464 of yacc.c  */
-#line 2524 "grammar.y"
+#line 2446 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 771:
 
 /* Line 1464 of yacc.c  */
-#line 2525 "grammar.y"
+#line 2447 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 772:
 
 /* Line 1464 of yacc.c  */
-#line 2526 "grammar.y"
+#line 2448 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 773:
 
 /* Line 1464 of yacc.c  */
-#line 2527 "grammar.y"
+#line 2449 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 774:
 
 /* Line 1464 of yacc.c  */
-#line 2528 "grammar.y"
+#line 2450 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 775:
 
 /* Line 1464 of yacc.c  */
-#line 2532 "grammar.y"
+#line 2454 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 776:
 
 /* Line 1464 of yacc.c  */
-#line 2533 "grammar.y"
+#line 2455 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 777:
 
 /* Line 1464 of yacc.c  */
-#line 2534 "grammar.y"
+#line 2456 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 778:
 
 /* Line 1464 of yacc.c  */
-#line 2535 "grammar.y"
+#line 2457 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 779:
 
 /* Line 1464 of yacc.c  */
-#line 2536 "grammar.y"
+#line 2458 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 780:
 
 /* Line 1464 of yacc.c  */
-#line 2537 "grammar.y"
+#line 2459 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 781:
 
 /* Line 1464 of yacc.c  */
-#line 2538 "grammar.y"
+#line 2460 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 782:
 
 /* Line 1464 of yacc.c  */
-#line 2539 "grammar.y"
+#line 2461 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 783:
 
 /* Line 1464 of yacc.c  */
-#line 2540 "grammar.y"
+#line 2462 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 784:
 
 /* Line 1464 of yacc.c  */
-#line 2541 "grammar.y"
+#line 2463 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 785:
 
 /* Line 1464 of yacc.c  */
-#line 2545 "grammar.y"
+#line 2467 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 786:
 
 /* Line 1464 of yacc.c  */
-#line 2546 "grammar.y"
+#line 2468 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 787:
 
 /* Line 1464 of yacc.c  */
-#line 2547 "grammar.y"
+#line 2469 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 788:
 
 /* Line 1464 of yacc.c  */
-#line 2548 "grammar.y"
+#line 2470 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 789:
 
 /* Line 1464 of yacc.c  */
-#line 2549 "grammar.y"
+#line 2471 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 790:
 
 /* Line 1464 of yacc.c  */
-#line 2550 "grammar.y"
+#line 2472 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 791:
 
 /* Line 1464 of yacc.c  */
-#line 2551 "grammar.y"
+#line 2473 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 792:
 
 /* Line 1464 of yacc.c  */
-#line 2552 "grammar.y"
+#line 2474 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 793:
 
 /* Line 1464 of yacc.c  */
-#line 2553 "grammar.y"
+#line 2475 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 794:
 
 /* Line 1464 of yacc.c  */
-#line 2554 "grammar.y"
+#line 2476 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 795:
 
 /* Line 1464 of yacc.c  */
-#line 2555 "grammar.y"
+#line 2477 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 796:
 
 /* Line 1464 of yacc.c  */
-#line 2556 "grammar.y"
+#line 2478 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 797:
 
 /* Line 1464 of yacc.c  */
-#line 2560 "grammar.y"
+#line 2482 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 798:
 
 /* Line 1464 of yacc.c  */
-#line 2561 "grammar.y"
+#line 2483 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 799:
 
 /* Line 1464 of yacc.c  */
-#line 2562 "grammar.y"
+#line 2484 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 800:
 
 /* Line 1464 of yacc.c  */
-#line 2563 "grammar.y"
+#line 2485 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 801:
 
 /* Line 1464 of yacc.c  */
-#line 2564 "grammar.y"
+#line 2486 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 802:
 
 /* Line 1464 of yacc.c  */
-#line 2565 "grammar.y"
+#line 2487 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 803:
 
 /* Line 1464 of yacc.c  */
-#line 2566 "grammar.y"
+#line 2488 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 804:
 
 /* Line 1464 of yacc.c  */
-#line 2567 "grammar.y"
+#line 2489 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 805:
 
 /* Line 1464 of yacc.c  */
-#line 2568 "grammar.y"
+#line 2490 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 806:
 
 /* Line 1464 of yacc.c  */
-#line 2569 "grammar.y"
+#line 2491 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 807:
 
 /* Line 1464 of yacc.c  */
-#line 2573 "grammar.y"
+#line 2495 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 808:
 
 /* Line 1464 of yacc.c  */
-#line 2574 "grammar.y"
+#line 2496 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 809:
 
 /* Line 1464 of yacc.c  */
-#line 2578 "grammar.y"
+#line 2500 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifier(PRIVATE)); ;}
     break;
 
   case 810:
 
 /* Line 1464 of yacc.c  */
-#line 2579 "grammar.y"
+#line 2501 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifier(PUBLIC)); ;}
     break;
 
   case 811:
 
 /* Line 1464 of yacc.c  */
-#line 2580 "grammar.y"
+#line 2502 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 812:
 
 /* Line 1464 of yacc.c  */
-#line 2581 "grammar.y"
+#line 2503 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 813:
 
 /* Line 1464 of yacc.c  */
-#line 2582 "grammar.y"
+#line 2504 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 814:
 
 /* Line 1464 of yacc.c  */
-#line 2583 "grammar.y"
+#line 2505 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 815:
 
 /* Line 1464 of yacc.c  */
-#line 2584 "grammar.y"
+#line 2506 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 816:
 
 /* Line 1464 of yacc.c  */
-#line 2585 "grammar.y"
+#line 2507 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 817:
 
 /* Line 1464 of yacc.c  */
-#line 2587 "grammar.y"
-    { _DeclClass((yyvsp[(1) - (1)].id).string); (yyval.list) = MkListOne(MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id)); ;}
+#line 2509 "grammar.y"
+    { _DeclClass((yyvsp[(1) - (1)].id)._class, (yyvsp[(1) - (1)].id).string); (yyval.list) = MkListOne(MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 818:
 
 /* Line 1464 of yacc.c  */
-#line 2588 "grammar.y"
-    { (yyval.list) = (yyvsp[(1) - (2)].list); _DeclClass((yyvsp[(2) - (2)].id).string); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id)); ;}
+#line 2510 "grammar.y"
+    { (yyval.list) = (yyvsp[(1) - (2)].list); _DeclClass((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id)); ;}
     break;
 
   case 819:
 
 /* Line 1464 of yacc.c  */
-#line 2591 "grammar.y"
+#line 2513 "grammar.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -19133,18 +19085,10 @@ yyreduce:
   case 820:
 
 /* Line 1464 of yacc.c  */
-#line 2609 "grammar.y"
+#line 2521 "grammar.y"
     {
          (yyval.list) = (yyvsp[(1) - (5)].list);
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -19153,82 +19097,72 @@ yyreduce:
   case 822:
 
 /* Line 1464 of yacc.c  */
-#line 2627 "grammar.y"
+#line 2531 "grammar.y"
     { (yyval.list) = MkListOne(MkStructOrUnion((yyvsp[(1) - (1)].specifierType), null, null)); POP_DEFAULT_ACCESS ;}
     break;
 
   case 823:
 
 /* Line 1464 of yacc.c  */
-#line 2631 "grammar.y"
+#line 2535 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 824:
 
 /* Line 1464 of yacc.c  */
-#line 2632 "grammar.y"
+#line 2536 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 825:
 
 /* Line 1464 of yacc.c  */
-#line 2633 "grammar.y"
+#line 2537 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 826:
 
 /* Line 1464 of yacc.c  */
-#line 2634 "grammar.y"
+#line 2538 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 827:
 
 /* Line 1464 of yacc.c  */
-#line 2635 "grammar.y"
+#line 2539 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 828:
 
 /* Line 1464 of yacc.c  */
-#line 2636 "grammar.y"
+#line 2540 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 829:
 
 /* Line 1464 of yacc.c  */
-#line 2637 "grammar.y"
+#line 2541 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id));}
     break;
 
   case 830:
 
 /* Line 1464 of yacc.c  */
-#line 2638 "grammar.y"
+#line 2542 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id));}
     break;
 
   case 831:
 
 /* Line 1464 of yacc.c  */
-#line 2640 "grammar.y"
+#line 2544 "grammar.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -19239,17 +19173,9 @@ yyreduce:
   case 832:
 
 /* Line 1464 of yacc.c  */
-#line 2658 "grammar.y"
+#line 2552 "grammar.y"
     {
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -19258,103 +19184,93 @@ yyreduce:
   case 833:
 
 /* Line 1464 of yacc.c  */
-#line 2674 "grammar.y"
+#line 2560 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 834:
 
 /* Line 1464 of yacc.c  */
-#line 2675 "grammar.y"
+#line 2561 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 835:
 
 /* Line 1464 of yacc.c  */
-#line 2676 "grammar.y"
+#line 2562 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 836:
 
 /* Line 1464 of yacc.c  */
-#line 2677 "grammar.y"
+#line 2563 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 837:
 
 /* Line 1464 of yacc.c  */
-#line 2678 "grammar.y"
+#line 2564 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 838:
 
 /* Line 1464 of yacc.c  */
-#line 2679 "grammar.y"
+#line 2565 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 839:
 
 /* Line 1464 of yacc.c  */
-#line 2680 "grammar.y"
+#line 2566 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 840:
 
 /* Line 1464 of yacc.c  */
-#line 2681 "grammar.y"
+#line 2567 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 841:
 
 /* Line 1464 of yacc.c  */
-#line 2682 "grammar.y"
+#line 2568 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 842:
 
 /* Line 1464 of yacc.c  */
-#line 2683 "grammar.y"
+#line 2569 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 843:
 
 /* Line 1464 of yacc.c  */
-#line 2684 "grammar.y"
+#line 2570 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id));}
     break;
 
   case 844:
 
 /* Line 1464 of yacc.c  */
-#line 2685 "grammar.y"
+#line 2571 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id));}
     break;
 
   case 845:
 
 /* Line 1464 of yacc.c  */
-#line 2687 "grammar.y"
+#line 2573 "grammar.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -19365,17 +19281,9 @@ yyreduce:
   case 846:
 
 /* Line 1464 of yacc.c  */
-#line 2705 "grammar.y"
+#line 2581 "grammar.y"
     {
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -19384,103 +19292,93 @@ yyreduce:
   case 847:
 
 /* Line 1464 of yacc.c  */
-#line 2721 "grammar.y"
+#line 2589 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 848:
 
 /* Line 1464 of yacc.c  */
-#line 2722 "grammar.y"
+#line 2590 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 849:
 
 /* Line 1464 of yacc.c  */
-#line 2723 "grammar.y"
+#line 2591 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 850:
 
 /* Line 1464 of yacc.c  */
-#line 2724 "grammar.y"
+#line 2592 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 851:
 
 /* Line 1464 of yacc.c  */
-#line 2725 "grammar.y"
+#line 2593 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 852:
 
 /* Line 1464 of yacc.c  */
-#line 2726 "grammar.y"
+#line 2594 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 853:
 
 /* Line 1464 of yacc.c  */
-#line 2727 "grammar.y"
+#line 2595 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 854:
 
 /* Line 1464 of yacc.c  */
-#line 2728 "grammar.y"
+#line 2596 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 855:
 
 /* Line 1464 of yacc.c  */
-#line 2729 "grammar.y"
+#line 2597 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 856:
 
 /* Line 1464 of yacc.c  */
-#line 2730 "grammar.y"
+#line 2598 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 857:
 
 /* Line 1464 of yacc.c  */
-#line 2731 "grammar.y"
+#line 2599 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id));}
     break;
 
   case 858:
 
 /* Line 1464 of yacc.c  */
-#line 2732 "grammar.y"
+#line 2600 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id));}
     break;
 
   case 859:
 
 /* Line 1464 of yacc.c  */
-#line 2734 "grammar.y"
+#line 2602 "grammar.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -19491,17 +19389,9 @@ yyreduce:
   case 860:
 
 /* Line 1464 of yacc.c  */
-#line 2752 "grammar.y"
+#line 2610 "grammar.y"
     {
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -19510,56 +19400,56 @@ yyreduce:
   case 861:
 
 /* Line 1464 of yacc.c  */
-#line 2768 "grammar.y"
+#line 2618 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), null); ;}
     break;
 
   case 862:
 
 /* Line 1464 of yacc.c  */
-#line 2769 "grammar.y"
+#line 2619 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), null); ;}
     break;
 
   case 863:
 
 /* Line 1464 of yacc.c  */
-#line 2773 "grammar.y"
+#line 2623 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(1) - (1)].id)))); ;}
     break;
 
   case 864:
 
 /* Line 1464 of yacc.c  */
-#line 2774 "grammar.y"
+#line 2624 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(3) - (3)].id)))); ;}
     break;
 
   case 865:
 
 /* Line 1464 of yacc.c  */
-#line 2775 "grammar.y"
+#line 2625 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(3) - (3)].id)))); ;}
     break;
 
   case 866:
 
 /* Line 1464 of yacc.c  */
-#line 2776 "grammar.y"
+#line 2626 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(3) - (3)].id)))); ;}
     break;
 
   case 867:
 
 /* Line 1464 of yacc.c  */
-#line 2777 "grammar.y"
+#line 2627 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(3) - (3)].id)))); ;}
     break;
 
   case 869:
 
 /* Line 1464 of yacc.c  */
-#line 2783 "grammar.y"
+#line 2633 "grammar.y"
     {
       char * colon = RSearchString((yyvsp[(1) - (1)].specifier).name, "::", strlen((yyvsp[(1) - (1)].specifier).name), true, false);
       String s = colon ? colon + 2 : (yyvsp[(1) - (1)].specifier).name;
@@ -19571,14 +19461,14 @@ yyreduce:
   case 870:
 
 /* Line 1464 of yacc.c  */
-#line 2789 "grammar.y"
+#line 2639 "grammar.y"
     { (yyval.declarator) = MkDeclaratorIdentifier(MkIdentifier("uint")); ;}
     break;
 
   case 871:
 
 /* Line 1464 of yacc.c  */
-#line 2792 "grammar.y"
+#line 2642 "grammar.y"
     {
          Declarator decl;
          char * colon = RSearchString((yyvsp[(1) - (4)].specifier).name, "::", strlen((yyvsp[(1) - (4)].specifier).name), true, false);
@@ -19592,7 +19482,7 @@ yyreduce:
   case 872:
 
 /* Line 1464 of yacc.c  */
-#line 2801 "grammar.y"
+#line 2651 "grammar.y"
     {
          Declarator decl;
          char * colon = RSearchString((yyvsp[(1) - (4)].specifier).name, "::", strlen((yyvsp[(1) - (4)].specifier).name), true, false);
@@ -19606,7 +19496,7 @@ yyreduce:
   case 873:
 
 /* Line 1464 of yacc.c  */
-#line 2810 "grammar.y"
+#line 2660 "grammar.y"
     {
          Declarator decl;
          char * colon = RSearchString((yyvsp[(1) - (4)].specifier).name, "::", strlen((yyvsp[(1) - (4)].specifier).name), true, false);
@@ -19620,7 +19510,7 @@ yyreduce:
   case 874:
 
 /* Line 1464 of yacc.c  */
-#line 2819 "grammar.y"
+#line 2669 "grammar.y"
     {
          Declarator decl;
          char * colon = RSearchString((yyvsp[(1) - (3)].specifier).name, "::", strlen((yyvsp[(1) - (3)].specifier).name), true, false);
@@ -19634,133 +19524,133 @@ yyreduce:
   case 875:
 
 /* Line 1464 of yacc.c  */
-#line 2827 "grammar.y"
+#line 2677 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 876:
 
 /* Line 1464 of yacc.c  */
-#line 2828 "grammar.y"
+#line 2678 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 877:
 
 /* Line 1464 of yacc.c  */
-#line 2829 "grammar.y"
+#line 2679 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 878:
 
 /* Line 1464 of yacc.c  */
-#line 2830 "grammar.y"
+#line 2680 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 879:
 
 /* Line 1464 of yacc.c  */
-#line 2834 "grammar.y"
+#line 2684 "grammar.y"
     { (yyval.declarator) = MkDeclaratorIdentifier((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 880:
 
 /* Line 1464 of yacc.c  */
-#line 2835 "grammar.y"
+#line 2685 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 881:
 
 /* Line 1464 of yacc.c  */
-#line 2836 "grammar.y"
+#line 2686 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets(MkDeclaratorExtended((yyvsp[(2) - (4)].extDecl), (yyvsp[(3) - (4)].declarator))); ;}
     break;
 
   case 882:
 
 /* Line 1464 of yacc.c  */
-#line 2837 "grammar.y"
+#line 2687 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 883:
 
 /* Line 1464 of yacc.c  */
-#line 2838 "grammar.y"
+#line 2688 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets(MkDeclaratorExtended((yyvsp[(2) - (4)].extDecl), (yyvsp[(3) - (4)].declarator))); ;}
     break;
 
   case 884:
 
 /* Line 1464 of yacc.c  */
-#line 2839 "grammar.y"
+#line 2689 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 885:
 
 /* Line 1464 of yacc.c  */
-#line 2840 "grammar.y"
+#line 2690 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 886:
 
 /* Line 1464 of yacc.c  */
-#line 2841 "grammar.y"
+#line 2691 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 887:
 
 /* Line 1464 of yacc.c  */
-#line 2842 "grammar.y"
+#line 2692 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 889:
 
 /* Line 1464 of yacc.c  */
-#line 2850 "grammar.y"
+#line 2700 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 890:
 
 /* Line 1464 of yacc.c  */
-#line 2851 "grammar.y"
+#line 2701 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 891:
 
 /* Line 1464 of yacc.c  */
-#line 2852 "grammar.y"
+#line 2702 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 892:
 
 /* Line 1464 of yacc.c  */
-#line 2853 "grammar.y"
+#line 2703 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 893:
 
 /* Line 1464 of yacc.c  */
-#line 2854 "grammar.y"
+#line 2704 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), null); ;}
     break;
 
   case 894:
 
 /* Line 1464 of yacc.c  */
-#line 2860 "grammar.y"
+#line 2710 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), (yyvsp[(2) - (2)].list));
          fileInput.Seek((yylsp[(1) - (2)]).end.pos, start);
@@ -19774,7 +19664,7 @@ yyreduce:
   case 895:
 
 /* Line 1464 of yacc.c  */
-#line 2869 "grammar.y"
+#line 2719 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), null);
          fileInput.Seek((yylsp[(1) - (2)]).end.pos, start);
@@ -19788,7 +19678,7 @@ yyreduce:
   case 896:
 
 /* Line 1464 of yacc.c  */
-#line 2878 "grammar.y"
+#line 2728 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list));
          fileInput.Seek((yylsp[(1) - (3)]).end.pos, start);
@@ -19802,7 +19692,7 @@ yyreduce:
   case 897:
 
 /* Line 1464 of yacc.c  */
-#line 2887 "grammar.y"
+#line 2737 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), null);
          fileInput.Seek((yylsp[(1) - (4)]).end.pos, start);
@@ -19818,42 +19708,42 @@ yyreduce:
   case 901:
 
 /* Line 1464 of yacc.c  */
-#line 2910 "grammar.y"
+#line 2760 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 902:
 
 /* Line 1464 of yacc.c  */
-#line 2911 "grammar.y"
+#line 2761 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 903:
 
 /* Line 1464 of yacc.c  */
-#line 2912 "grammar.y"
+#line 2762 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 904:
 
 /* Line 1464 of yacc.c  */
-#line 2913 "grammar.y"
+#line 2763 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 905:
 
 /* Line 1464 of yacc.c  */
-#line 2914 "grammar.y"
+#line 2764 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), null); ;}
     break;
 
   case 906:
 
 /* Line 1464 of yacc.c  */
-#line 2920 "grammar.y"
+#line 2770 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), (yyvsp[(2) - (2)].list));
          fileInput.Seek((yylsp[(1) - (2)]).end.pos, start);
@@ -19867,7 +19757,7 @@ yyreduce:
   case 907:
 
 /* Line 1464 of yacc.c  */
-#line 2929 "grammar.y"
+#line 2779 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), null);
          fileInput.Seek((yylsp[(1) - (2)]).end.pos, start);
@@ -19881,7 +19771,7 @@ yyreduce:
   case 908:
 
 /* Line 1464 of yacc.c  */
-#line 2938 "grammar.y"
+#line 2788 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list));
          fileInput.Seek((yylsp[(1) - (3)]).end.pos, start);
@@ -19895,7 +19785,7 @@ yyreduce:
   case 909:
 
 /* Line 1464 of yacc.c  */
-#line 2947 "grammar.y"
+#line 2797 "grammar.y"
     {
          (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), null);
          fileInput.Seek((yylsp[(1) - (4)]).end.pos, start);
@@ -19911,28 +19801,28 @@ yyreduce:
   case 912:
 
 /* Line 1464 of yacc.c  */
-#line 3010 "grammar.y"
+#line 2860 "grammar.y"
     { (yyval.extDecl) = MkExtDeclString(CopyString(yytext)); ;}
     break;
 
   case 913:
 
 /* Line 1464 of yacc.c  */
-#line 3011 "grammar.y"
+#line 2861 "grammar.y"
     { (yyval.extDecl) = MkExtDeclString(CopyString(yytext)); ;}
     break;
 
   case 914:
 
 /* Line 1464 of yacc.c  */
-#line 3012 "grammar.y"
+#line 2862 "grammar.y"
     { (yyval.extDecl) = MkExtDeclAttrib((yyvsp[(1) - (1)].attrib)); ;}
     break;
 
   case 915:
 
 /* Line 1464 of yacc.c  */
-#line 3014 "grammar.y"
+#line 2864 "grammar.y"
     {
          char temp[1024];
          strcpy(temp, "__asm__(");
@@ -19946,532 +19836,532 @@ yyreduce:
   case 916:
 
 /* Line 1464 of yacc.c  */
-#line 3025 "grammar.y"
+#line 2875 "grammar.y"
     { (yyval.i) = ATTRIB; ;}
     break;
 
   case 917:
 
 /* Line 1464 of yacc.c  */
-#line 3026 "grammar.y"
+#line 2876 "grammar.y"
     { (yyval.i) = ATTRIB_DEP; ;}
     break;
 
   case 918:
 
 /* Line 1464 of yacc.c  */
-#line 3027 "grammar.y"
+#line 2877 "grammar.y"
     { (yyval.i) = __ATTRIB; ;}
     break;
 
   case 919:
 
 /* Line 1464 of yacc.c  */
-#line 3032 "grammar.y"
+#line 2882 "grammar.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 920:
 
 /* Line 1464 of yacc.c  */
-#line 3033 "grammar.y"
+#line 2883 "grammar.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 921:
 
 /* Line 1464 of yacc.c  */
-#line 3034 "grammar.y"
+#line 2884 "grammar.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 922:
 
 /* Line 1464 of yacc.c  */
-#line 3035 "grammar.y"
+#line 2885 "grammar.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 923:
 
 /* Line 1464 of yacc.c  */
-#line 3036 "grammar.y"
+#line 2886 "grammar.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 924:
 
 /* Line 1464 of yacc.c  */
-#line 3040 "grammar.y"
+#line 2890 "grammar.y"
     { (yyval.attribute) = MkAttribute((yyvsp[(1) - (1)].string), null); (yyval.attribute).loc = (yyloc); ;}
     break;
 
   case 925:
 
 /* Line 1464 of yacc.c  */
-#line 3041 "grammar.y"
+#line 2891 "grammar.y"
     { (yyval.attribute) = MkAttribute((yyvsp[(1) - (4)].string), MkExpBrackets((yyvsp[(3) - (4)].list))); (yyval.attribute).loc = (yyloc); ;}
     break;
 
   case 926:
 
 /* Line 1464 of yacc.c  */
-#line 3045 "grammar.y"
+#line 2895 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[(1) - (1)].attribute)); ;}
     break;
 
   case 927:
 
 /* Line 1464 of yacc.c  */
-#line 3046 "grammar.y"
+#line 2896 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].attribute)); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 928:
 
 /* Line 1464 of yacc.c  */
-#line 3047 "grammar.y"
+#line 2897 "grammar.y"
     { ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].attribute)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 929:
 
 /* Line 1464 of yacc.c  */
-#line 3051 "grammar.y"
+#line 2901 "grammar.y"
     { (yyval.attrib) = MkAttrib((yyvsp[(1) - (6)].i), (yyvsp[(4) - (6)].list)); (yyval.attrib).loc = (yyloc); ;}
     break;
 
   case 930:
 
 /* Line 1464 of yacc.c  */
-#line 3052 "grammar.y"
+#line 2902 "grammar.y"
     { (yyval.attrib) = MkAttrib((yyvsp[(1) - (5)].i), null); (yyval.attrib).loc = (yyloc); ;}
     break;
 
   case 931:
 
 /* Line 1464 of yacc.c  */
-#line 3056 "grammar.y"
+#line 2906 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 932:
 
 /* Line 1464 of yacc.c  */
-#line 3057 "grammar.y"
+#line 2907 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets(MkDeclaratorExtended((yyvsp[(2) - (4)].extDecl), (yyvsp[(3) - (4)].declarator))); ;}
     break;
 
   case 933:
 
 /* Line 1464 of yacc.c  */
-#line 3058 "grammar.y"
+#line 2908 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, null); ;}
     break;
 
   case 934:
 
 /* Line 1464 of yacc.c  */
-#line 3059 "grammar.y"
+#line 2909 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, (yyvsp[(2) - (3)].exp)); ;}
     break;
 
   case 935:
 
 /* Line 1464 of yacc.c  */
-#line 3060 "grammar.y"
+#line 2910 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray(null, (yyvsp[(2) - (3)].exp)); ;}
     break;
 
   case 936:
 
 /* Line 1464 of yacc.c  */
-#line 3061 "grammar.y"
+#line 2911 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray(null, (yyvsp[(2) - (3)].specifier)); ;}
     break;
 
   case 937:
 
 /* Line 1464 of yacc.c  */
-#line 3062 "grammar.y"
+#line 2912 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 938:
 
 /* Line 1464 of yacc.c  */
-#line 3063 "grammar.y"
+#line 2913 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 939:
 
 /* Line 1464 of yacc.c  */
-#line 3064 "grammar.y"
+#line 2914 "grammar.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 940:
 
 /* Line 1464 of yacc.c  */
-#line 3065 "grammar.y"
+#line 2915 "grammar.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 941:
 
 /* Line 1464 of yacc.c  */
-#line 3066 "grammar.y"
+#line 2916 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 942:
 
 /* Line 1464 of yacc.c  */
-#line 3067 "grammar.y"
+#line 2917 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 943:
 
 /* Line 1464 of yacc.c  */
-#line 3068 "grammar.y"
+#line 2918 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 944:
 
 /* Line 1464 of yacc.c  */
-#line 3069 "grammar.y"
+#line 2919 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 945:
 
 /* Line 1464 of yacc.c  */
-#line 3070 "grammar.y"
+#line 2920 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 946:
 
 /* Line 1464 of yacc.c  */
-#line 3071 "grammar.y"
+#line 2921 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 947:
 
 /* Line 1464 of yacc.c  */
-#line 3075 "grammar.y"
+#line 2925 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 948:
 
 /* Line 1464 of yacc.c  */
-#line 3076 "grammar.y"
+#line 2926 "grammar.y"
     { (yyval.declarator) = MkDeclaratorBrackets(MkDeclaratorExtended((yyvsp[(2) - (4)].extDecl), (yyvsp[(3) - (4)].declarator))); ;}
     break;
 
   case 949:
 
 /* Line 1464 of yacc.c  */
-#line 3077 "grammar.y"
+#line 2927 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 950:
 
 /* Line 1464 of yacc.c  */
-#line 3078 "grammar.y"
+#line 2928 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 951:
 
 /* Line 1464 of yacc.c  */
-#line 3079 "grammar.y"
+#line 2929 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 952:
 
 /* Line 1464 of yacc.c  */
-#line 3080 "grammar.y"
+#line 2930 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 953:
 
 /* Line 1464 of yacc.c  */
-#line 3081 "grammar.y"
+#line 2931 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 954:
 
 /* Line 1464 of yacc.c  */
-#line 3082 "grammar.y"
+#line 2932 "grammar.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 955:
 
 /* Line 1464 of yacc.c  */
-#line 3086 "grammar.y"
+#line 2936 "grammar.y"
     { (yyval.pointer) = MkPointer(null, null); ;}
     break;
 
   case 956:
 
 /* Line 1464 of yacc.c  */
-#line 3087 "grammar.y"
+#line 2937 "grammar.y"
     { (yyval.pointer) = MkPointer((yyvsp[(2) - (2)].list), null); ;}
     break;
 
   case 957:
 
 /* Line 1464 of yacc.c  */
-#line 3088 "grammar.y"
+#line 2938 "grammar.y"
     { (yyval.pointer) = MkPointer(null, (yyvsp[(2) - (2)].pointer)); ;}
     break;
 
   case 958:
 
 /* Line 1464 of yacc.c  */
-#line 3089 "grammar.y"
+#line 2939 "grammar.y"
     { (yyval.pointer) = MkPointer((yyvsp[(2) - (3)].list), (yyvsp[(3) - (3)].pointer)); ;}
     break;
 
   case 959:
 
 /* Line 1464 of yacc.c  */
-#line 3093 "grammar.y"
+#line 2943 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (1)].pointer), null); ;}
     break;
 
   case 961:
 
 /* Line 1464 of yacc.c  */
-#line 3095 "grammar.y"
+#line 2945 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 962:
 
 /* Line 1464 of yacc.c  */
-#line 3096 "grammar.y"
+#line 2946 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (2)].pointer), null)); ;}
     break;
 
   case 963:
 
 /* Line 1464 of yacc.c  */
-#line 3097 "grammar.y"
+#line 2947 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 964:
 
 /* Line 1464 of yacc.c  */
-#line 3101 "grammar.y"
+#line 2951 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (1)].pointer), null); ;}
     break;
 
   case 966:
 
 /* Line 1464 of yacc.c  */
-#line 3103 "grammar.y"
+#line 2953 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 967:
 
 /* Line 1464 of yacc.c  */
-#line 3104 "grammar.y"
+#line 2954 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (2)].pointer), null)); ;}
     break;
 
   case 968:
 
 /* Line 1464 of yacc.c  */
-#line 3105 "grammar.y"
+#line 2955 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 970:
 
 /* Line 1464 of yacc.c  */
-#line 3111 "grammar.y"
+#line 2961 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 971:
 
 /* Line 1464 of yacc.c  */
-#line 3113 "grammar.y"
+#line 2963 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 972:
 
 /* Line 1464 of yacc.c  */
-#line 3115 "grammar.y"
+#line 2965 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtendedEnd((yyvsp[(2) - (2)].extDecl), (yyvsp[(1) - (2)].declarator)); ;}
     break;
 
   case 973:
 
 /* Line 1464 of yacc.c  */
-#line 3117 "grammar.y"
+#line 2967 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtendedEnd((yyvsp[(2) - (2)].extDecl), (yyvsp[(1) - (2)].declarator)); ;}
     break;
 
   case 975:
 
 /* Line 1464 of yacc.c  */
-#line 3123 "grammar.y"
+#line 2973 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 976:
 
 /* Line 1464 of yacc.c  */
-#line 3125 "grammar.y"
+#line 2975 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 977:
 
 /* Line 1464 of yacc.c  */
-#line 3127 "grammar.y"
+#line 2977 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtendedEnd((yyvsp[(2) - (2)].extDecl), (yyvsp[(1) - (2)].declarator)); ;}
     break;
 
   case 979:
 
 /* Line 1464 of yacc.c  */
-#line 3132 "grammar.y"
+#line 2982 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 980:
 
 /* Line 1464 of yacc.c  */
-#line 3133 "grammar.y"
+#line 2983 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 981:
 
 /* Line 1464 of yacc.c  */
-#line 3134 "grammar.y"
+#line 2984 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 983:
 
 /* Line 1464 of yacc.c  */
-#line 3139 "grammar.y"
+#line 2989 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 984:
 
 /* Line 1464 of yacc.c  */
-#line 3140 "grammar.y"
+#line 2990 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 985:
 
 /* Line 1464 of yacc.c  */
-#line 3141 "grammar.y"
+#line 2991 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 987:
 
 /* Line 1464 of yacc.c  */
-#line 3146 "grammar.y"
+#line 2996 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 988:
 
 /* Line 1464 of yacc.c  */
-#line 3147 "grammar.y"
+#line 2997 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 989:
 
 /* Line 1464 of yacc.c  */
-#line 3148 "grammar.y"
+#line 2998 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 991:
 
 /* Line 1464 of yacc.c  */
-#line 3153 "grammar.y"
+#line 3003 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 992:
 
 /* Line 1464 of yacc.c  */
-#line 3154 "grammar.y"
+#line 3004 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 993:
 
 /* Line 1464 of yacc.c  */
-#line 3155 "grammar.y"
+#line 3005 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 995:
 
 /* Line 1464 of yacc.c  */
-#line 3160 "grammar.y"
+#line 3010 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 996:
 
 /* Line 1464 of yacc.c  */
-#line 3161 "grammar.y"
+#line 3011 "grammar.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 997:
 
 /* Line 1464 of yacc.c  */
-#line 3162 "grammar.y"
+#line 3012 "grammar.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 998:
 
 /* Line 1464 of yacc.c  */
-#line 3166 "grammar.y"
+#line 3016 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 999:
 
 /* Line 1464 of yacc.c  */
-#line 3167 "grammar.y"
+#line 3017 "grammar.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[(2) - (3)].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1000:
 
 /* Line 1464 of yacc.c  */
-#line 3169 "grammar.y"
+#line 3019 "grammar.y"
     {
          Compiler_Warning($"extra comma\n");
          (yyval.initializer) = MkInitializerList((yyvsp[(2) - (4)].list));
@@ -20490,28 +20380,28 @@ yyreduce:
   case 1001:
 
 /* Line 1464 of yacc.c  */
-#line 3185 "grammar.y"
+#line 3035 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1002:
 
 /* Line 1464 of yacc.c  */
-#line 3186 "grammar.y"
+#line 3036 "grammar.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[(2) - (4)].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1003:
 
 /* Line 1464 of yacc.c  */
-#line 3187 "grammar.y"
+#line 3037 "grammar.y"
     { yyerror(); (yyval.initializer) = MkInitializerList((yyvsp[(2) - (2)].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1004:
 
 /* Line 1464 of yacc.c  */
-#line 3189 "grammar.y"
+#line 3039 "grammar.y"
     {
          (yyval.initializer) = MkInitializerList((yyvsp[(2) - (5)].list));
          (yyval.initializer).loc = (yyloc);
@@ -20529,7 +20419,7 @@ yyreduce:
   case 1005:
 
 /* Line 1464 of yacc.c  */
-#line 3202 "grammar.y"
+#line 3052 "grammar.y"
     {
          yyerror();
          (yyval.initializer) = MkInitializerList((yyvsp[(2) - (3)].list));
@@ -20548,140 +20438,140 @@ yyreduce:
   case 1006:
 
 /* Line 1464 of yacc.c  */
-#line 3218 "grammar.y"
+#line 3068 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1007:
 
 /* Line 1464 of yacc.c  */
-#line 3220 "grammar.y"
+#line 3070 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1008:
 
 /* Line 1464 of yacc.c  */
-#line 3224 "grammar.y"
+#line 3074 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1009:
 
 /* Line 1464 of yacc.c  */
-#line 3225 "grammar.y"
+#line 3075 "grammar.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 1010:
 
 /* Line 1464 of yacc.c  */
-#line 3229 "grammar.y"
+#line 3079 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initializer)); ;}
     break;
 
   case 1011:
 
 /* Line 1464 of yacc.c  */
-#line 3230 "grammar.y"
+#line 3080 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initializer)); ;}
     break;
 
   case 1012:
 
 /* Line 1464 of yacc.c  */
-#line 3231 "grammar.y"
+#line 3081 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initializer)); ;}
     break;
 
   case 1013:
 
 /* Line 1464 of yacc.c  */
-#line 3232 "grammar.y"
+#line 3082 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initializer)); ;}
     break;
 
   case 1014:
 
 /* Line 1464 of yacc.c  */
-#line 3235 "grammar.y"
+#line 3085 "grammar.y"
     { yyerror(); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].initializer)); ;}
     break;
 
   case 1015:
 
 /* Line 1464 of yacc.c  */
-#line 3236 "grammar.y"
+#line 3086 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].initializer)); ;}
     break;
 
   case 1016:
 
 /* Line 1464 of yacc.c  */
-#line 3240 "grammar.y"
+#line 3090 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (1)].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 1017:
 
 /* Line 1464 of yacc.c  */
-#line 3241 "grammar.y"
+#line 3091 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (1)].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 1018:
 
 /* Line 1464 of yacc.c  */
-#line 3242 "grammar.y"
+#line 3092 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].initializer)); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc.start = (yylsp[(2) - (3)]).end; ;}
     break;
 
   case 1019:
 
 /* Line 1464 of yacc.c  */
-#line 3246 "grammar.y"
+#line 3096 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (2)].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 1020:
 
 /* Line 1464 of yacc.c  */
-#line 3250 "grammar.y"
+#line 3100 "grammar.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].initializer)); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc.start = (yylsp[(2) - (3)]).end; ;}
     break;
 
   case 1021:
 
 /* Line 1464 of yacc.c  */
-#line 3254 "grammar.y"
+#line 3104 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initDeclarator)); ;}
     break;
 
   case 1022:
 
 /* Line 1464 of yacc.c  */
-#line 3255 "grammar.y"
+#line 3105 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1023:
 
 /* Line 1464 of yacc.c  */
-#line 3256 "grammar.y"
+#line 3106 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("uint")), null)); ListAdd((yyval.list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1024:
 
 /* Line 1464 of yacc.c  */
-#line 3257 "grammar.y"
+#line 3107 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("int64")), null)); ListAdd((yyval.list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1025:
 
 /* Line 1464 of yacc.c  */
-#line 3259 "grammar.y"
+#line 3109 "grammar.y"
     {
       char * colon = RSearchString((yyvsp[(1) - (3)].specifier).name, "::", strlen((yyvsp[(1) - (3)].specifier).name), true, false);
       String s = colon ? colon + 2 : (yyvsp[(1) - (3)].specifier).name;
@@ -20695,1484 +20585,1484 @@ yyreduce:
   case 1026:
 
 /* Line 1464 of yacc.c  */
-#line 3267 "grammar.y"
+#line 3117 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1027:
 
 /* Line 1464 of yacc.c  */
-#line 3276 "grammar.y"
+#line 3126 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initDeclarator)); ;}
     break;
 
   case 1028:
 
 /* Line 1464 of yacc.c  */
-#line 3277 "grammar.y"
+#line 3127 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (2)].initDeclarator)); ;}
     break;
 
   case 1029:
 
 /* Line 1464 of yacc.c  */
-#line 3278 "grammar.y"
+#line 3128 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1030:
 
 /* Line 1464 of yacc.c  */
-#line 3279 "grammar.y"
+#line 3129 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 1031:
 
 /* Line 1464 of yacc.c  */
-#line 3283 "grammar.y"
+#line 3133 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 1032:
 
 /* Line 1464 of yacc.c  */
-#line 3284 "grammar.y"
+#line 3134 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 1033:
 
 /* Line 1464 of yacc.c  */
-#line 3288 "grammar.y"
+#line 3138 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 1034:
 
 /* Line 1464 of yacc.c  */
-#line 3289 "grammar.y"
+#line 3139 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 1035:
 
 /* Line 1464 of yacc.c  */
-#line 3294 "grammar.y"
+#line 3144 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 1036:
 
 /* Line 1464 of yacc.c  */
-#line 3295 "grammar.y"
+#line 3145 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 1037:
 
 /* Line 1464 of yacc.c  */
-#line 3296 "grammar.y"
+#line 3146 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), MkDeclaratorPointer(MkPointer(null,null), null)); ;}
     break;
 
   case 1038:
 
 /* Line 1464 of yacc.c  */
-#line 3297 "grammar.y"
+#line 3147 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (3)].list), MkDeclaratorPointer(MkPointer(null,null), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 1039:
 
 /* Line 1464 of yacc.c  */
-#line 3298 "grammar.y"
+#line 3148 "grammar.y"
     { (yyval.typeName) = MkTypeNameGuessDecl((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 1040:
 
 /* Line 1464 of yacc.c  */
-#line 3300 "grammar.y"
+#line 3150 "grammar.y"
     { (yyval.typeName) = MkTypeName(MkListOne(MkSpecifier(CLASS)), null); ;}
     break;
 
   case 1041:
 
 /* Line 1464 of yacc.c  */
-#line 3318 "grammar.y"
+#line 3168 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 1042:
 
 /* Line 1464 of yacc.c  */
-#line 3319 "grammar.y"
+#line 3169 "grammar.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 1043:
 
 /* Line 1464 of yacc.c  */
-#line 3323 "grammar.y"
+#line 3173 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].typeName)); ;}
     break;
 
   case 1044:
 
 /* Line 1464 of yacc.c  */
-#line 3324 "grammar.y"
+#line 3174 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1045:
 
 /* Line 1464 of yacc.c  */
-#line 3325 "grammar.y"
+#line 3175 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1046:
 
 /* Line 1464 of yacc.c  */
-#line 3326 "grammar.y"
+#line 3176 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1047:
 
 /* Line 1464 of yacc.c  */
-#line 3327 "grammar.y"
+#line 3177 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1048:
 
 /* Line 1464 of yacc.c  */
-#line 3328 "grammar.y"
+#line 3178 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(MkList(), null)); ListAdd((yyval.list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1049:
 
 /* Line 1464 of yacc.c  */
-#line 3330 "grammar.y"
+#line 3180 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1050:
 
 /* Line 1464 of yacc.c  */
-#line 3331 "grammar.y"
+#line 3181 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1051:
 
 /* Line 1464 of yacc.c  */
-#line 3332 "grammar.y"
+#line 3182 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1052:
 
 /* Line 1464 of yacc.c  */
-#line 3333 "grammar.y"
+#line 3183 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1053:
 
 /* Line 1464 of yacc.c  */
-#line 3337 "grammar.y"
+#line 3187 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].typeName)); ;}
     break;
 
   case 1054:
 
 /* Line 1464 of yacc.c  */
-#line 3338 "grammar.y"
+#line 3188 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1055:
 
 /* Line 1464 of yacc.c  */
-#line 3339 "grammar.y"
+#line 3189 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1056:
 
 /* Line 1464 of yacc.c  */
-#line 3340 "grammar.y"
+#line 3190 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1057:
 
 /* Line 1464 of yacc.c  */
-#line 3341 "grammar.y"
+#line 3191 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(MkList(), null)); ListAdd((yyval.list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1058:
 
 /* Line 1464 of yacc.c  */
-#line 3343 "grammar.y"
+#line 3193 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1059:
 
 /* Line 1464 of yacc.c  */
-#line 3344 "grammar.y"
+#line 3194 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 1060:
 
 /* Line 1464 of yacc.c  */
-#line 3345 "grammar.y"
+#line 3195 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (4)].list); ListAdd((yyvsp[(1) - (4)].list), (yyvsp[(4) - (4)].typeName)); ;}
     break;
 
   case 1062:
 
 /* Line 1464 of yacc.c  */
-#line 3350 "grammar.y"
+#line 3200 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, null)); ;}
     break;
 
   case 1063:
 
 /* Line 1464 of yacc.c  */
-#line 3351 "grammar.y"
+#line 3201 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, null)); ;}
     break;
 
   case 1064:
 
 /* Line 1464 of yacc.c  */
-#line 3352 "grammar.y"
+#line 3202 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, null)); ;}
     break;
 
   case 1065:
 
 /* Line 1464 of yacc.c  */
-#line 3353 "grammar.y"
+#line 3203 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, null)); ;}
     break;
 
   case 1066:
 
 /* Line 1464 of yacc.c  */
-#line 3354 "grammar.y"
+#line 3204 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(null, null)); ;}
     break;
 
   case 1068:
 
 /* Line 1464 of yacc.c  */
-#line 3359 "grammar.y"
+#line 3209 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), null); ;}
     break;
 
   case 1071:
 
 /* Line 1464 of yacc.c  */
-#line 3366 "grammar.y"
+#line 3216 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); FreeAttrib((yyvsp[(1) - (1)].attrib)); ;}
     break;
 
   case 1073:
 
 /* Line 1464 of yacc.c  */
-#line 3368 "grammar.y"
+#line 3218 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); ;}
     break;
 
   case 1074:
 
 /* Line 1464 of yacc.c  */
-#line 3369 "grammar.y"
+#line 3219 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); ;}
     break;
 
   case 1075:
 
 /* Line 1464 of yacc.c  */
-#line 3370 "grammar.y"
+#line 3220 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[(1) - (2)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1083:
 
 /* Line 1464 of yacc.c  */
-#line 3381 "grammar.y"
+#line 3231 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1084:
 
 /* Line 1464 of yacc.c  */
-#line 3382 "grammar.y"
+#line 3232 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1085:
 
 /* Line 1464 of yacc.c  */
-#line 3383 "grammar.y"
+#line 3233 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1086:
 
 /* Line 1464 of yacc.c  */
-#line 3384 "grammar.y"
+#line 3234 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1087:
 
 /* Line 1464 of yacc.c  */
-#line 3385 "grammar.y"
+#line 3235 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (1)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1088:
 
 /* Line 1464 of yacc.c  */
-#line 3386 "grammar.y"
+#line 3236 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (2)].stmt); Compiler_Error($"syntax error\n"); ;}
     break;
 
   case 1089:
 
 /* Line 1464 of yacc.c  */
-#line 3387 "grammar.y"
+#line 3237 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[(1) - (1)].list)); Compiler_Error($"syntax error\n"); (yyval.stmt).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 1090:
 
 /* Line 1464 of yacc.c  */
-#line 3391 "grammar.y"
+#line 3241 "grammar.y"
     { (yyval.asmField) = MkAsmField((yyvsp[(1) - (1)].string), null, null); (yyval.asmField).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 1091:
 
 /* Line 1464 of yacc.c  */
-#line 3392 "grammar.y"
+#line 3242 "grammar.y"
     { (yyval.asmField) = MkAsmField((yyvsp[(1) - (4)].string), (yyvsp[(3) - (4)].exp), null); (yyval.asmField).loc = (yyloc); ;}
     break;
 
   case 1092:
 
 /* Line 1464 of yacc.c  */
-#line 3393 "grammar.y"
+#line 3243 "grammar.y"
     { (yyval.asmField) = MkAsmField((yyvsp[(4) - (7)].string), (yyvsp[(6) - (7)].exp), (yyvsp[(2) - (7)].id)); (yyval.asmField).loc = (yyloc); ;}
     break;
 
   case 1093:
 
 /* Line 1464 of yacc.c  */
-#line 3397 "grammar.y"
+#line 3247 "grammar.y"
     { (yyval.list) = MkListOne((yyvsp[(1) - (1)].asmField)); ;}
     break;
 
   case 1094:
 
 /* Line 1464 of yacc.c  */
-#line 3398 "grammar.y"
+#line 3248 "grammar.y"
     { ListAdd((yyval.list), (yyvsp[(3) - (3)].asmField)); ;}
     break;
 
   case 1095:
 
 /* Line 1464 of yacc.c  */
-#line 3399 "grammar.y"
+#line 3249 "grammar.y"
     { (yyval.list) = null; ;}
     break;
 
   case 1096:
 
 /* Line 1464 of yacc.c  */
-#line 3403 "grammar.y"
+#line 3253 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (6)].specifier), (yyvsp[(4) - (6)].string), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1097:
 
 /* Line 1464 of yacc.c  */
-#line 3404 "grammar.y"
+#line 3254 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (8)].specifier), (yyvsp[(4) - (8)].string), (yyvsp[(6) - (8)].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1098:
 
 /* Line 1464 of yacc.c  */
-#line 3405 "grammar.y"
+#line 3255 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (10)].specifier), (yyvsp[(4) - (10)].string), (yyvsp[(6) - (10)].list), (yyvsp[(8) - (10)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1099:
 
 /* Line 1464 of yacc.c  */
-#line 3406 "grammar.y"
+#line 3256 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (12)].specifier), (yyvsp[(4) - (12)].string), (yyvsp[(6) - (12)].list), (yyvsp[(8) - (12)].list), (yyvsp[(10) - (12)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1100:
 
 /* Line 1464 of yacc.c  */
-#line 3408 "grammar.y"
+#line 3258 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (8)].specifier), (yyvsp[(4) - (8)].string), null, (yyvsp[(6) - (8)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1101:
 
 /* Line 1464 of yacc.c  */
-#line 3409 "grammar.y"
+#line 3259 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (10)].specifier), (yyvsp[(4) - (10)].string), null, (yyvsp[(6) - (10)].list), (yyvsp[(8) - (10)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1102:
 
 /* Line 1464 of yacc.c  */
-#line 3410 "grammar.y"
+#line 3260 "grammar.y"
     { (yyval.stmt) = MkAsmStmt((yyvsp[(2) - (10)].specifier), (yyvsp[(4) - (10)].string), (yyvsp[(6) - (10)].list), null, (yyvsp[(8) - (10)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1103:
 
 /* Line 1464 of yacc.c  */
-#line 3412 "grammar.y"
+#line 3262 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (5)].string), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1104:
 
 /* Line 1464 of yacc.c  */
-#line 3413 "grammar.y"
+#line 3263 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (7)].string), (yyvsp[(5) - (7)].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1105:
 
 /* Line 1464 of yacc.c  */
-#line 3414 "grammar.y"
+#line 3264 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (9)].string), (yyvsp[(5) - (9)].list), (yyvsp[(7) - (9)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1106:
 
 /* Line 1464 of yacc.c  */
-#line 3415 "grammar.y"
+#line 3265 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (11)].string), (yyvsp[(5) - (11)].list), (yyvsp[(7) - (11)].list), (yyvsp[(9) - (11)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1107:
 
 /* Line 1464 of yacc.c  */
-#line 3417 "grammar.y"
+#line 3267 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (7)].string), null, (yyvsp[(5) - (7)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1108:
 
 /* Line 1464 of yacc.c  */
-#line 3418 "grammar.y"
+#line 3268 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (9)].string), null, (yyvsp[(5) - (9)].list), (yyvsp[(7) - (9)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1109:
 
 /* Line 1464 of yacc.c  */
-#line 3419 "grammar.y"
+#line 3269 "grammar.y"
     { (yyval.stmt) = MkAsmStmt(null, (yyvsp[(3) - (9)].string), (yyvsp[(5) - (9)].list), null, (yyvsp[(7) - (9)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1110:
 
 /* Line 1464 of yacc.c  */
-#line 3423 "grammar.y"
+#line 3273 "grammar.y"
     { (yyval.stmt) = MkLabeledStmt((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1111:
 
 /* Line 1464 of yacc.c  */
-#line 3424 "grammar.y"
+#line 3274 "grammar.y"
     { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1112:
 
 /* Line 1464 of yacc.c  */
-#line 3425 "grammar.y"
+#line 3275 "grammar.y"
     { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1113:
 
 /* Line 1464 of yacc.c  */
-#line 3426 "grammar.y"
+#line 3276 "grammar.y"
     { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt(MkExpDummy(), (yyvsp[(3) - (3)].stmt)); (yyval.stmt).caseStmt.exp.loc = (yylsp[(2) - (3)]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[(1) - (3)]).end; ;}
     break;
 
   case 1114:
 
 /* Line 1464 of yacc.c  */
-#line 3427 "grammar.y"
+#line 3277 "grammar.y"
     { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt(null, (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1115:
 
 /* Line 1464 of yacc.c  */
-#line 3429 "grammar.y"
+#line 3279 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkLabeledStmt((yyvsp[(1) - (3)].id), stmt); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1116:
 
 /* Line 1464 of yacc.c  */
-#line 3430 "grammar.y"
+#line 3280 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(4) - (4)].declaration)); stmt.loc = (yylsp[(4) - (4)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), stmt); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1117:
 
 /* Line 1464 of yacc.c  */
-#line 3431 "grammar.y"
+#line 3281 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(4) - (4)].declaration)); stmt.loc = (yylsp[(4) - (4)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), stmt); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1118:
 
 /* Line 1464 of yacc.c  */
-#line 3432 "grammar.y"
+#line 3282 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt(MkExpDummy(), stmt); (yyval.stmt).caseStmt.exp.loc = (yylsp[(2) - (3)]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[(1) - (3)]).end; ;}
     break;
 
   case 1119:
 
 /* Line 1464 of yacc.c  */
-#line 3433 "grammar.y"
+#line 3283 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt(null, stmt); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1120:
 
 /* Line 1464 of yacc.c  */
-#line 3437 "grammar.y"
+#line 3287 "grammar.y"
     { (yyval.stmt) = MkLabeledStmt((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1121:
 
 /* Line 1464 of yacc.c  */
-#line 3438 "grammar.y"
+#line 3288 "grammar.y"
     { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1122:
 
 /* Line 1464 of yacc.c  */
-#line 3439 "grammar.y"
+#line 3289 "grammar.y"
     { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1123:
 
 /* Line 1464 of yacc.c  */
-#line 3440 "grammar.y"
+#line 3290 "grammar.y"
     { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt(MkExpDummy(), (yyvsp[(3) - (3)].stmt)); (yyval.stmt).caseStmt.exp.loc = (yylsp[(2) - (3)]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[(1) - (3)]).end; ;}
     break;
 
   case 1124:
 
 /* Line 1464 of yacc.c  */
-#line 3441 "grammar.y"
+#line 3291 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(MkExpDummy(), null); (yyval.stmt).caseStmt.exp.loc = (yylsp[(2) - (2)]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[(1) - (2)]).end; ;}
     break;
 
   case 1125:
 
 /* Line 1464 of yacc.c  */
-#line 3442 "grammar.y"
+#line 3292 "grammar.y"
     { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ (yyval.stmt) = MkCaseStmt(null, (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1126:
 
 /* Line 1464 of yacc.c  */
-#line 3443 "grammar.y"
+#line 3293 "grammar.y"
     { (yyval.stmt) = MkCaseStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1127:
 
 /* Line 1464 of yacc.c  */
-#line 3445 "grammar.y"
+#line 3295 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkLabeledStmt((yyvsp[(1) - (3)].id), stmt); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1128:
 
 /* Line 1464 of yacc.c  */
-#line 3446 "grammar.y"
+#line 3296 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(4) - (4)].declaration)); stmt.loc = (yylsp[(4) - (4)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), stmt); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1129:
 
 /* Line 1464 of yacc.c  */
-#line 3447 "grammar.y"
+#line 3297 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(4) - (4)].declaration)); stmt.loc = (yylsp[(4) - (4)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), stmt); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 1130:
 
 /* Line 1464 of yacc.c  */
-#line 3448 "grammar.y"
+#line 3298 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt(MkExpDummy(), stmt); (yyval.stmt).caseStmt.exp.loc = (yylsp[(2) - (3)]); (yyval.stmt).loc = (yyloc); (yyval.stmt).caseStmt.exp.loc.start = (yylsp[(1) - (3)]).end; ;}
     break;
 
   case 1131:
 
 /* Line 1464 of yacc.c  */
-#line 3449 "grammar.y"
+#line 3299 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(3) - (3)].declaration)); stmt.loc = (yylsp[(3) - (3)]); Compiler_Warning(C89_DECL_WARNING); (yyval.stmt) = MkCaseStmt(null, stmt); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1132:
 
 /* Line 1464 of yacc.c  */
-#line 3453 "grammar.y"
+#line 3303 "grammar.y"
     { (yyval.declMode) = structDeclMode = declMode = publicAccess; ;}
     break;
 
   case 1133:
 
 /* Line 1464 of yacc.c  */
-#line 3454 "grammar.y"
+#line 3304 "grammar.y"
     { (yyval.declMode) = structDeclMode = declMode = privateAccess; ;}
     break;
 
   case 1134:
 
 /* Line 1464 of yacc.c  */
-#line 3455 "grammar.y"
+#line 3305 "grammar.y"
     { (yyval.declMode) = structDeclMode = declMode = defaultAccess; ;}
     break;
 
   case 1135:
 
 /* Line 1464 of yacc.c  */
-#line 3459 "grammar.y"
+#line 3309 "grammar.y"
     { (yyval.declMode) = publicAccess; ;}
     break;
 
   case 1136:
 
 /* Line 1464 of yacc.c  */
-#line 3460 "grammar.y"
+#line 3310 "grammar.y"
     { (yyval.declMode) = privateAccess; ;}
     break;
 
   case 1137:
 
 /* Line 1464 of yacc.c  */
-#line 3464 "grammar.y"
+#line 3314 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1138:
 
 /* Line 1464 of yacc.c  */
-#line 3465 "grammar.y"
+#line 3315 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1139:
 
 /* Line 1464 of yacc.c  */
-#line 3466 "grammar.y"
+#line 3316 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1140:
 
 /* Line 1464 of yacc.c  */
-#line 3467 "grammar.y"
+#line 3317 "grammar.y"
     { (yyval.declaration) = (yyvsp[(1) - (2)].declaration); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1141:
 
 /* Line 1464 of yacc.c  */
-#line 3471 "grammar.y"
+#line 3321 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1142:
 
 /* Line 1464 of yacc.c  */
-#line 3472 "grammar.y"
+#line 3322 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1143:
 
 /* Line 1464 of yacc.c  */
-#line 3473 "grammar.y"
+#line 3323 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1144:
 
 /* Line 1464 of yacc.c  */
-#line 3475 "grammar.y"
+#line 3325 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1145:
 
 /* Line 1464 of yacc.c  */
-#line 3476 "grammar.y"
+#line 3326 "grammar.y"
     { (yyval.declaration) = MkDeclarationDefine((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1146:
 
 /* Line 1464 of yacc.c  */
-#line 3477 "grammar.y"
+#line 3327 "grammar.y"
     { structDeclMode = declMode = staticAccess; (yyval.declaration) = MkDeclarationDefine((yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1147:
 
 /* Line 1464 of yacc.c  */
-#line 3481 "grammar.y"
+#line 3331 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); yyerrok; ;}
     break;
 
   case 1148:
 
 /* Line 1464 of yacc.c  */
-#line 3485 "grammar.y"
+#line 3335 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1149:
 
 /* Line 1464 of yacc.c  */
-#line 3486 "grammar.y"
+#line 3336 "grammar.y"
     { structDeclMode = defaultDeclMode;  ;}
     break;
 
   case 1150:
 
 /* Line 1464 of yacc.c  */
-#line 3488 "grammar.y"
+#line 3338 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1151:
 
 /* Line 1464 of yacc.c  */
-#line 3489 "grammar.y"
+#line 3339 "grammar.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1152:
 
 /* Line 1464 of yacc.c  */
-#line 3490 "grammar.y"
+#line 3340 "grammar.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1153:
 
 /* Line 1464 of yacc.c  */
-#line 3494 "grammar.y"
+#line 3344 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].declaration)); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1154:
 
 /* Line 1464 of yacc.c  */
-#line 3495 "grammar.y"
+#line 3345 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declaration)); /*declMode = defaultDeclMode; */;}
     break;
 
   case 1155:
 
 /* Line 1464 of yacc.c  */
-#line 3496 "grammar.y"
+#line 3346 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declaration)); /*declMode = defaultDeclMode; */;}
     break;
 
   case 1156:
 
 /* Line 1464 of yacc.c  */
-#line 3497 "grammar.y"
+#line 3347 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 1157:
 
 /* Line 1464 of yacc.c  */
-#line 3501 "grammar.y"
+#line 3351 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].declaration)); ;}
     break;
 
   case 1158:
 
 /* Line 1464 of yacc.c  */
-#line 3502 "grammar.y"
+#line 3352 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declaration)); ;}
     break;
 
   case 1159:
 
 /* Line 1464 of yacc.c  */
-#line 3506 "grammar.y"
+#line 3356 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].stmt)); ;}
     break;
 
   case 1160:
 
 /* Line 1464 of yacc.c  */
-#line 3507 "grammar.y"
+#line 3357 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 1161:
 
 /* Line 1464 of yacc.c  */
-#line 3508 "grammar.y"
+#line 3358 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 1162:
 
 /* Line 1464 of yacc.c  */
-#line 3512 "grammar.y"
+#line 3362 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].stmt)); ;}
     break;
 
   case 1163:
 
 /* Line 1464 of yacc.c  */
-#line 3513 "grammar.y"
+#line 3363 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 1164:
 
 /* Line 1464 of yacc.c  */
-#line 3514 "grammar.y"
+#line 3364 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 1165:
 
 /* Line 1464 of yacc.c  */
-#line 3515 "grammar.y"
+#line 3365 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(2) - (2)].declaration)); stmt.loc = (yylsp[(2) - (2)]); Compiler_Warning(C89_DECL_WARNING); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1166:
 
 /* Line 1464 of yacc.c  */
-#line 3516 "grammar.y"
+#line 3366 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(2) - (2)].declaration)); stmt.loc = (yylsp[(2) - (2)]); Compiler_Warning(C89_DECL_WARNING); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1167:
 
 /* Line 1464 of yacc.c  */
-#line 3517 "grammar.y"
+#line 3367 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(2) - (2)].declaration)); stmt.loc = (yylsp[(2) - (2)]); Compiler_Warning(C89_DECL_WARNING); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1168:
 
 /* Line 1464 of yacc.c  */
-#line 3518 "grammar.y"
+#line 3368 "grammar.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(2) - (2)].declaration)); stmt.loc = (yylsp[(2) - (2)]); Compiler_Warning(C89_DECL_WARNING); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), stmt); /*declMode = defaultDeclMode;*/ ;}
     break;
 
   case 1169:
 
 /* Line 1464 of yacc.c  */
-#line 3522 "grammar.y"
+#line 3372 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, (yyvsp[(1) - (1)].list)); ;}
     break;
 
   case 1170:
 
 /* Line 1464 of yacc.c  */
-#line 3523 "grammar.y"
+#line 3373 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 1171:
 
 /* Line 1464 of yacc.c  */
-#line 3524 "grammar.y"
+#line 3374 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 1172:
 
 /* Line 1464 of yacc.c  */
-#line 3525 "grammar.y"
+#line 3375 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 1173:
 
 /* Line 1464 of yacc.c  */
-#line 3529 "grammar.y"
+#line 3379 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, (yyvsp[(1) - (1)].list)); ;}
     break;
 
   case 1174:
 
 /* Line 1464 of yacc.c  */
-#line 3530 "grammar.y"
+#line 3380 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 1175:
 
 /* Line 1464 of yacc.c  */
-#line 3531 "grammar.y"
+#line 3381 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 1176:
 
 /* Line 1464 of yacc.c  */
-#line 3532 "grammar.y"
+#line 3382 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 1177:
 
 /* Line 1464 of yacc.c  */
-#line 3536 "grammar.y"
+#line 3386 "grammar.y"
     { (yyval.context) = PushContext(); ;}
     break;
 
   case 1178:
 
 /* Line 1464 of yacc.c  */
-#line 3540 "grammar.y"
+#line 3390 "grammar.y"
     { (yyval.stmt) = (yyvsp[(1) - (2)].stmt); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1179:
 
 /* Line 1464 of yacc.c  */
-#line 3545 "grammar.y"
+#line 3395 "grammar.y"
     { (yyval.stmt) = (yyvsp[(2) - (2)].stmt); (yyval.stmt).compound.context = (yyvsp[(1) - (2)].context); PopContext((yyvsp[(1) - (2)].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1180:
 
 /* Line 1464 of yacc.c  */
-#line 3547 "grammar.y"
+#line 3397 "grammar.y"
     { (yyval.stmt) = MkCompoundStmt(null, null); (yyval.stmt).compound.context = (yyvsp[(1) - (1)].context); PopContext((yyvsp[(1) - (1)].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1181:
 
 /* Line 1464 of yacc.c  */
-#line 3550 "grammar.y"
+#line 3400 "grammar.y"
     { (yyval.stmt) = (yyvsp[(2) - (2)].stmt); (yyval.stmt).compound.context = (yyvsp[(1) - (2)].context); PopContext((yyvsp[(1) - (2)].context)); (yyval.stmt).loc = (yyloc); (yyval.stmt).loc.end.charPos++; (yyval.stmt).loc.end.pos++; ;}
     break;
 
   case 1182:
 
 /* Line 1464 of yacc.c  */
-#line 3555 "grammar.y"
+#line 3405 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt(null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1183:
 
 /* Line 1464 of yacc.c  */
-#line 3556 "grammar.y"
+#line 3406 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[(1) - (2)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1184:
 
 /* Line 1464 of yacc.c  */
-#line 3557 "grammar.y"
+#line 3407 "grammar.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[(1) - (2)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1185:
 
 /* Line 1464 of yacc.c  */
-#line 3561 "grammar.y"
+#line 3411 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1186:
 
 /* Line 1464 of yacc.c  */
-#line 3562 "grammar.y"
+#line 3412 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1187:
 
 /* Line 1464 of yacc.c  */
-#line 3563 "grammar.y"
+#line 3413 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].stmt), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1188:
 
 /* Line 1464 of yacc.c  */
-#line 3564 "grammar.y"
+#line 3414 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].stmt), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1189:
 
 /* Line 1464 of yacc.c  */
-#line 3565 "grammar.y"
+#line 3415 "grammar.y"
     { (yyval.stmt) = MkSwitchStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1190:
 
 /* Line 1464 of yacc.c  */
-#line 3566 "grammar.y"
+#line 3416 "grammar.y"
     { (yyval.stmt) = MkSwitchStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1191:
 
 /* Line 1464 of yacc.c  */
-#line 3570 "grammar.y"
+#line 3420 "grammar.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (3)].list), null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1193:
 
 /* Line 1464 of yacc.c  */
-#line 3575 "grammar.y"
+#line 3425 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1194:
 
 /* Line 1464 of yacc.c  */
-#line 3576 "grammar.y"
+#line 3426 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (4)].list), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1195:
 
 /* Line 1464 of yacc.c  */
-#line 3577 "grammar.y"
+#line 3427 "grammar.y"
     { yyerror(); (yyval.stmt) = MkWhileStmt(null, (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1196:
 
 /* Line 1464 of yacc.c  */
-#line 3579 "grammar.y"
+#line 3429 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (7)].stmt), (yyvsp[(5) - (7)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1197:
 
 /* Line 1464 of yacc.c  */
-#line 3580 "grammar.y"
+#line 3430 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (6)].stmt), (yyvsp[(5) - (6)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1198:
 
 /* Line 1464 of yacc.c  */
-#line 3582 "grammar.y"
+#line 3432 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (6)].stmt), (yyvsp[(4) - (6)].stmt), null, (yyvsp[(6) - (6)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1199:
 
 /* Line 1464 of yacc.c  */
-#line 3583 "grammar.y"
+#line 3433 "grammar.y"
     { yyerror(); (yyval.stmt) = MkForStmt((yyvsp[(3) - (5)].stmt), null, null, (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1200:
 
 /* Line 1464 of yacc.c  */
-#line 3584 "grammar.y"
+#line 3434 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (7)].stmt), (yyvsp[(4) - (7)].stmt), (yyvsp[(5) - (7)].list), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1201:
 
 /* Line 1464 of yacc.c  */
-#line 3585 "grammar.y"
+#line 3435 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (6)].stmt), (yyvsp[(4) - (6)].stmt), (yyvsp[(5) - (6)].list), (yyvsp[(6) - (6)].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1202:
 
 /* Line 1464 of yacc.c  */
-#line 3586 "grammar.y"
+#line 3436 "grammar.y"
     { yyerror(); (yyval.stmt) = MkForStmt(null, null, null, (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1203:
 
 /* Line 1464 of yacc.c  */
-#line 3588 "grammar.y"
+#line 3438 "grammar.y"
     { (yyval.stmt) = MkForEachStmt((yyvsp[(3) - (7)].id), (yyvsp[(5) - (7)].list), null, (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1204:
 
 /* Line 1464 of yacc.c  */
-#line 3589 "grammar.y"
+#line 3439 "grammar.y"
     { (yyval.stmt) = MkForEachStmt((yyvsp[(3) - (9)].id), (yyvsp[(5) - (9)].list), (yyvsp[(7) - (9)].list), (yyvsp[(9) - (9)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1205:
 
 /* Line 1464 of yacc.c  */
-#line 3593 "grammar.y"
+#line 3443 "grammar.y"
     { (yyval.stmt) = MkForStmt(null, null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1206:
 
 /* Line 1464 of yacc.c  */
-#line 3594 "grammar.y"
+#line 3444 "grammar.y"
     { (yyval.stmt) = MkForStmt(MkExpressionStmt((yyvsp[(3) - (4)].list)), null, null, null); (yyval.stmt).forStmt.init.loc = (yylsp[(3) - (4)]); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1207:
 
 /* Line 1464 of yacc.c  */
-#line 3595 "grammar.y"
+#line 3445 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (4)].stmt), null, null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1208:
 
 /* Line 1464 of yacc.c  */
-#line 3596 "grammar.y"
+#line 3446 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (5)].stmt), MkExpressionStmt((yyvsp[(4) - (5)].list)), null, null); (yyval.stmt).loc = (yyloc); (yyval.stmt).forStmt.check.loc = (yylsp[(4) - (5)]); ;}
     break;
 
   case 1209:
 
 /* Line 1464 of yacc.c  */
-#line 3600 "grammar.y"
+#line 3450 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (5)].stmt), (yyvsp[(4) - (5)].stmt), (yyvsp[(5) - (5)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1210:
 
 /* Line 1464 of yacc.c  */
-#line 3601 "grammar.y"
+#line 3451 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (6)].stmt), (yyvsp[(4) - (6)].stmt), null, (yyvsp[(6) - (6)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1211:
 
 /* Line 1464 of yacc.c  */
-#line 3602 "grammar.y"
+#line 3452 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (7)].stmt), (yyvsp[(4) - (7)].stmt), (yyvsp[(5) - (7)].list), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1212:
 
 /* Line 1464 of yacc.c  */
-#line 3603 "grammar.y"
+#line 3453 "grammar.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (6)].stmt), (yyvsp[(4) - (6)].stmt), (yyvsp[(5) - (6)].list), (yyvsp[(6) - (6)].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1213:
 
 /* Line 1464 of yacc.c  */
-#line 3605 "grammar.y"
+#line 3455 "grammar.y"
     { yyerror(); (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (6)].stmt), (yyvsp[(5) - (6)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1214:
 
 /* Line 1464 of yacc.c  */
-#line 3606 "grammar.y"
+#line 3456 "grammar.y"
     { yyerror(); (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (5)].stmt), (yyvsp[(5) - (5)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1215:
 
 /* Line 1464 of yacc.c  */
-#line 3607 "grammar.y"
+#line 3457 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (5)].stmt), (yyvsp[(5) - (5)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1216:
 
 /* Line 1464 of yacc.c  */
-#line 3608 "grammar.y"
+#line 3458 "grammar.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (4)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1217:
 
 /* Line 1464 of yacc.c  */
-#line 3609 "grammar.y"
+#line 3459 "grammar.y"
     { yyerror(); (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (3)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1218:
 
 /* Line 1464 of yacc.c  */
-#line 3610 "grammar.y"
+#line 3460 "grammar.y"
     { yyerror(); (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (2)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1219:
 
 /* Line 1464 of yacc.c  */
-#line 3611 "grammar.y"
+#line 3461 "grammar.y"
     { yyerror(); (yyval.stmt) = MkDoWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1220:
 
 /* Line 1464 of yacc.c  */
-#line 3614 "grammar.y"
+#line 3464 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1221:
 
 /* Line 1464 of yacc.c  */
-#line 3618 "grammar.y"
+#line 3468 "grammar.y"
     { (yyval.stmt) = MkWhileStmt(null, null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1222:
 
 /* Line 1464 of yacc.c  */
-#line 3619 "grammar.y"
+#line 3469 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (3)].list), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1223:
 
 /* Line 1464 of yacc.c  */
-#line 3623 "grammar.y"
+#line 3473 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1224:
 
 /* Line 1464 of yacc.c  */
-#line 3624 "grammar.y"
+#line 3474 "grammar.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (4)].list), (yyvsp[(4) - (4)].stmt) ); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1225:
 
 /* Line 1464 of yacc.c  */
-#line 3628 "grammar.y"
+#line 3478 "grammar.y"
     { (yyval.stmt) = MkGotoStmt((yyvsp[(2) - (3)].id)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1226:
 
 /* Line 1464 of yacc.c  */
-#line 3629 "grammar.y"
+#line 3479 "grammar.y"
     { (yyval.stmt) = MkContinueStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1227:
 
 /* Line 1464 of yacc.c  */
-#line 3630 "grammar.y"
+#line 3480 "grammar.y"
     { (yyval.stmt) = MkBreakStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1228:
 
 /* Line 1464 of yacc.c  */
-#line 3631 "grammar.y"
+#line 3481 "grammar.y"
     { Expression exp = MkExpDummy(); (yyval.stmt) = MkReturnStmt(MkListOne(exp)); (yyval.stmt).loc = (yyloc); exp.loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 1229:
 
 /* Line 1464 of yacc.c  */
-#line 3632 "grammar.y"
+#line 3482 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[(2) - (3)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1230:
 
 /* Line 1464 of yacc.c  */
-#line 3633 "grammar.y"
+#line 3483 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[(2) - (3)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1231:
 
 /* Line 1464 of yacc.c  */
-#line 3634 "grammar.y"
+#line 3484 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[(2) - (3)].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1232:
 
 /* Line 1464 of yacc.c  */
-#line 3635 "grammar.y"
+#line 3485 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[(2) - (3)].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1233:
 
 /* Line 1464 of yacc.c  */
-#line 3639 "grammar.y"
+#line 3489 "grammar.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[(2) - (2)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1234:
 
 /* Line 1464 of yacc.c  */
-#line 3640 "grammar.y"
+#line 3490 "grammar.y"
     { (yyval.stmt) = MkReturnStmt(MkListOne((yyvsp[(2) - (2)].exp))); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1235:
 
 /* Line 1464 of yacc.c  */
-#line 3641 "grammar.y"
+#line 3491 "grammar.y"
     { Expression exp = MkExpDummy(); (yyval.stmt) = MkReturnStmt(MkListOne(exp)); (yyval.stmt).loc = (yyloc); exp.loc.start = exp.loc.end = (yylsp[(1) - (1)]).end; ;}
     break;
 
   case 1236:
 
 /* Line 1464 of yacc.c  */
-#line 3642 "grammar.y"
+#line 3492 "grammar.y"
     { (yyval.stmt) = MkGotoStmt(null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 1237:
 
 /* Line 1464 of yacc.c  */
-#line 3648 "grammar.y"
+#line 3498 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].declarator), (yyvsp[(3) - (4)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(4) - (4)].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1238:
 
 /* Line 1464 of yacc.c  */
-#line 3650 "grammar.y"
+#line 3500 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1239:
 
 /* Line 1464 of yacc.c  */
-#line 3651 "grammar.y"
+#line 3501 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].declarator), (yyvsp[(3) - (4)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(4) - (4)].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1240:
 
 /* Line 1464 of yacc.c  */
-#line 3653 "grammar.y"
+#line 3503 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1241:
 
 /* Line 1464 of yacc.c  */
-#line 3655 "grammar.y"
+#line 3505 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); ;}
     break;
 
   case 1242:
 
 /* Line 1464 of yacc.c  */
-#line 3656 "grammar.y"
+#line 3506 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[(1) - (2)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(2) - (2)].stmt)); (yyval.function).loc = (yyloc);;}
     break;
 
   case 1243:
 
 /* Line 1464 of yacc.c  */
-#line 3659 "grammar.y"
+#line 3509 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].declarator), (yyvsp[(3) - (4)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(4) - (4)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(4) - (4)].stmt).loc.end; ;}
     break;
 
   case 1244:
 
 /* Line 1464 of yacc.c  */
-#line 3660 "grammar.y"
+#line 3510 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(3) - (3)].stmt).loc.end; ;}
     break;
 
   case 1245:
 
 /* Line 1464 of yacc.c  */
-#line 3661 "grammar.y"
+#line 3511 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].declarator), (yyvsp[(3) - (4)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(4) - (4)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(4) - (4)].stmt).loc.end; ;}
     break;
 
   case 1246:
 
 /* Line 1464 of yacc.c  */
-#line 3662 "grammar.y"
+#line 3512 "grammar.y"
     { (yyval.function) = MkFunction((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(3) - (3)].stmt).loc.end; ;}
     break;
 
   case 1247:
 
 /* Line 1464 of yacc.c  */
-#line 3663 "grammar.y"
+#line 3513 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ProcessFunctionBody((yyval.function), (yyvsp[(3) - (3)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(3) - (3)].stmt).loc.end; ;}
     break;
 
   case 1248:
 
 /* Line 1464 of yacc.c  */
-#line 3664 "grammar.y"
+#line 3514 "grammar.y"
     { (yyval.function) = MkFunction(null, (yyvsp[(1) - (2)].declarator), null); ProcessFunctionBody((yyval.function), (yyvsp[(2) - (2)].stmt)); (yyval.function).loc = (yyloc); (yyval.function).loc.end = (yyvsp[(2) - (2)].stmt).loc.end; ;}
     break;
 
   case 1249:
 
 /* Line 1464 of yacc.c  */
-#line 3668 "grammar.y"
+#line 3518 "grammar.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 1250:
 
 /* Line 1464 of yacc.c  */
-#line 3670 "grammar.y"
+#line 3520 "grammar.y"
     {
       int len1 = strlen((yyvsp[(1) - (2)].string));
       int len2 = strlen(yytext);
@@ -22186,49 +22076,49 @@ yyreduce:
   case 1251:
 
 /* Line 1464 of yacc.c  */
-#line 3681 "grammar.y"
+#line 3531 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].function).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1252:
 
 /* Line 1464 of yacc.c  */
-#line 3683 "grammar.y"
+#line 3533 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1253:
 
 /* Line 1464 of yacc.c  */
-#line 3686 "grammar.y"
+#line 3536 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; FreeList((yyvsp[(1) - (2)].list), FreeSpecifier); ;}
     break;
 
   case 1254:
 
 /* Line 1464 of yacc.c  */
-#line 3689 "grammar.y"
+#line 3539 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1255:
 
 /* Line 1464 of yacc.c  */
-#line 3690 "grammar.y"
+#line 3540 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[(2) - (2)].string), normalImport, (declMode != defaultAccess) ? declMode : privateAccess);  (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1256:
 
 /* Line 1464 of yacc.c  */
-#line 3691 "grammar.y"
+#line 3541 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[(3) - (3)].string), staticImport, (declMode != defaultAccess) ? declMode : privateAccess);  (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1257:
 
 /* Line 1464 of yacc.c  */
-#line 3693 "grammar.y"
+#line 3543 "grammar.y"
     {
       bool isRemote = !strcmp((yyvsp[(2) - (3)].id).string, "remote");
       (yyval.external) = MkExternalImport((yyvsp[(3) - (3)].string), isRemote ? remoteImport : normalImport, (declMode != defaultAccess) ? declMode : privateAccess);
@@ -22242,49 +22132,49 @@ yyreduce:
   case 1258:
 
 /* Line 1464 of yacc.c  */
-#line 3702 "grammar.y"
+#line 3552 "grammar.y"
     { (yyval.external) = null; ;}
     break;
 
   case 1259:
 
 /* Line 1464 of yacc.c  */
-#line 3704 "grammar.y"
+#line 3554 "grammar.y"
     { (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1260:
 
 /* Line 1464 of yacc.c  */
-#line 3706 "grammar.y"
+#line 3556 "grammar.y"
     { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1261:
 
 /* Line 1464 of yacc.c  */
-#line 3707 "grammar.y"
+#line 3557 "grammar.y"
     { (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1262:
 
 /* Line 1464 of yacc.c  */
-#line 3708 "grammar.y"
+#line 3558 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[(3) - (3)].string), normalImport, ((yyvsp[(1) - (3)].declMode) != defaultAccess) ? (yyvsp[(1) - (3)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1263:
 
 /* Line 1464 of yacc.c  */
-#line 3709 "grammar.y"
+#line 3559 "grammar.y"
     { (yyval.external) = MkExternalImport((yyvsp[(4) - (4)].string), staticImport, ((yyvsp[(1) - (4)].declMode) != defaultAccess) ? (yyvsp[(1) - (4)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1264:
 
 /* Line 1464 of yacc.c  */
-#line 3711 "grammar.y"
+#line 3561 "grammar.y"
     {
       bool isRemote = !strcmp((yyvsp[(3) - (4)].id).string, "remote");
       (yyval.external) = MkExternalImport((yyvsp[(4) - (4)].string), isRemote ? remoteImport : normalImport, ((yyvsp[(1) - (4)].declMode) != defaultAccess) ? (yyvsp[(1) - (4)].declMode) : privateAccess);
@@ -22299,56 +22189,56 @@ yyreduce:
   case 1265:
 
 /* Line 1464 of yacc.c  */
-#line 3720 "grammar.y"
+#line 3570 "grammar.y"
     { defaultDeclMode = (yyvsp[(1) - (2)].declMode); (yyval.external) = null; ;}
     break;
 
   case 1266:
 
 /* Line 1464 of yacc.c  */
-#line 3721 "grammar.y"
+#line 3571 "grammar.y"
     { defaultDeclMode = staticAccess; (yyval.external) = null; ;}
     break;
 
   case 1267:
 
 /* Line 1464 of yacc.c  */
-#line 3722 "grammar.y"
+#line 3572 "grammar.y"
     { (yyval.external) = MkExternalNameSpace((yyvsp[(2) - (2)].id)); (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1268:
 
 /* Line 1464 of yacc.c  */
-#line 3723 "grammar.y"
+#line 3573 "grammar.y"
     { (yyval.external) = MkExternalNameSpace(MkIdentifier((yyvsp[(2) - (2)].specifier).name)); FreeSpecifier((yyvsp[(2) - (2)].specifier)); (yyval.external).loc = (yyloc); ;}
     break;
 
   case 1269:
 
 /* Line 1464 of yacc.c  */
-#line 3724 "grammar.y"
+#line 3574 "grammar.y"
     { (yyval.external) = MkExternalDBTable((yyvsp[(1) - (1)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(1) - (1)].dbtableDef).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1270:
 
 /* Line 1464 of yacc.c  */
-#line 3725 "grammar.y"
+#line 3575 "grammar.y"
     { (yyval.external) = MkExternalDBTable((yyvsp[(2) - (2)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(2) - (2)].dbtableDef).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1271:
 
 /* Line 1464 of yacc.c  */
-#line 3729 "grammar.y"
+#line 3579 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyvsp[(1) - (1)]._class).loc; (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1272:
 
 /* Line 1464 of yacc.c  */
-#line 3731 "grammar.y"
+#line 3581 "grammar.y"
     {
       yyerror();
       FreeList((yyvsp[(1) - (2)].list), FreeSpecifier);
@@ -22362,231 +22252,231 @@ yyreduce:
   case 1273:
 
 /* Line 1464 of yacc.c  */
-#line 3739 "grammar.y"
+#line 3589 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyvsp[(1) - (1)].function).loc;  (yyvsp[(1) - (1)].function).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1274:
 
 /* Line 1464 of yacc.c  */
-#line 3741 "grammar.y"
+#line 3591 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyvsp[(2) - (2)]._class).loc; (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1275:
 
 /* Line 1464 of yacc.c  */
-#line 3742 "grammar.y"
+#line 3592 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyvsp[(2) - (2)].function).loc; (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1276:
 
 /* Line 1464 of yacc.c  */
-#line 3745 "grammar.y"
+#line 3595 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1277:
 
 /* Line 1464 of yacc.c  */
-#line 3746 "grammar.y"
+#line 3596 "grammar.y"
     { yyerror(); (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1278:
 
 /* Line 1464 of yacc.c  */
-#line 3750 "grammar.y"
+#line 3600 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].external)); ast = (yyval.list); ;}
     break;
 
   case 1279:
 
 /* Line 1464 of yacc.c  */
-#line 3751 "grammar.y"
+#line 3601 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].external)); ;}
     break;
 
   case 1280:
 
 /* Line 1464 of yacc.c  */
-#line 3752 "grammar.y"
+#line 3602 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].external)); ;}
     break;
 
   case 1283:
 
 /* Line 1464 of yacc.c  */
-#line 3758 "grammar.y"
+#line 3608 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].external)); ast = (yyval.list); ;}
     break;
 
   case 1284:
 
 /* Line 1464 of yacc.c  */
-#line 3759 "grammar.y"
+#line 3609 "grammar.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].external)); ;}
     break;
 
   case 1285:
 
 /* Line 1464 of yacc.c  */
-#line 3761 "grammar.y"
+#line 3611 "grammar.y"
     { External _class = MkExternalClass((yyvsp[(2) - (2)]._class)); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), _class); _class.loc = (yylsp[(2) - (2)]);  (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1286:
 
 /* Line 1464 of yacc.c  */
-#line 3763 "grammar.y"
+#line 3613 "grammar.y"
     { External _class = MkExternalClass((yyvsp[(3) - (3)]._class)); (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), _class); _class.loc = (yylsp[(3) - (3)]);  (yyvsp[(3) - (3)]._class).declMode = ((yyvsp[(2) - (3)].declMode) != defaultAccess) ? (yyvsp[(2) - (3)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1289:
 
 /* Line 1464 of yacc.c  */
-#line 3769 "grammar.y"
+#line 3619 "grammar.y"
     { ast = MkList(); ;}
     break;
 
   case 1290:
 
 /* Line 1464 of yacc.c  */
-#line 3773 "grammar.y"
-    { Symbol symbol = DeclClassAddNameSpace((yyvsp[(3) - (6)].id).string); FreeIdentifier((yyvsp[(3) - (6)].id)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[(2) - (6)].string), symbol, (yyvsp[(5) - (6)].list)); ;}
+#line 3623 "grammar.y"
+    { Symbol symbol = DeclClassAddNameSpace((yyvsp[(3) - (6)].id)._class, (yyvsp[(3) - (6)].id).string); FreeIdentifier((yyvsp[(3) - (6)].id)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[(2) - (6)].string), symbol, (yyvsp[(5) - (6)].list)); ;}
     break;
 
   case 1291:
 
 /* Line 1464 of yacc.c  */
-#line 3774 "grammar.y"
-    { Symbol symbol = DeclClass((yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[(2) - (6)].string), symbol, (yyvsp[(5) - (6)].list)); ;}
+#line 3624 "grammar.y"
+    { Symbol symbol = DeclClass((yyvsp[(3) - (6)].specifier).nsSpec, (yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); (yyval.dbtableDef) = MkDBTableDef((yyvsp[(2) - (6)].string), symbol, (yyvsp[(5) - (6)].list)); ;}
     break;
 
   case 1292:
 
 /* Line 1464 of yacc.c  */
-#line 3775 "grammar.y"
+#line 3625 "grammar.y"
     { (yyval.dbtableDef) = MkDBTableDef((yyvsp[(2) - (5)].string), null, (yyvsp[(4) - (5)].list)); ;}
     break;
 
   case 1293:
 
 /* Line 1464 of yacc.c  */
-#line 3779 "grammar.y"
+#line 3629 "grammar.y"
     { (yyval.dbtableEntry) = MkDBFieldEntry(MkTypeName((yyvsp[(1) - (4)].list), null), (yyvsp[(2) - (4)].id), (yyvsp[(3) - (4)].string)); ;}
     break;
 
   case 1294:
 
 /* Line 1464 of yacc.c  */
-#line 3783 "grammar.y"
+#line 3633 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[(1) - (1)].id), ascending); ;}
     break;
 
   case 1295:
 
 /* Line 1464 of yacc.c  */
-#line 3784 "grammar.y"
+#line 3634 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[(2) - (2)].id), descending); ;}
     break;
 
   case 1296:
 
 /* Line 1464 of yacc.c  */
-#line 3785 "grammar.y"
+#line 3635 "grammar.y"
     { (yyval.dbindexItem) = MkDBIndexItem((yyvsp[(2) - (2)].id), ascending); ;}
     break;
 
   case 1297:
 
 /* Line 1464 of yacc.c  */
-#line 3789 "grammar.y"
+#line 3639 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].dbindexItem)); ;}
     break;
 
   case 1298:
 
 /* Line 1464 of yacc.c  */
-#line 3790 "grammar.y"
+#line 3640 "grammar.y"
     { ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].dbindexItem)); ;}
     break;
 
   case 1299:
 
 /* Line 1464 of yacc.c  */
-#line 3794 "grammar.y"
+#line 3644 "grammar.y"
     { (yyval.dbtableEntry) = MkDBIndexEntry((yyvsp[(2) - (3)].list), null); ;}
     break;
 
   case 1300:
 
 /* Line 1464 of yacc.c  */
-#line 3795 "grammar.y"
+#line 3645 "grammar.y"
     { (yyval.dbtableEntry) = MkDBIndexEntry((yyvsp[(2) - (4)].list), (yyvsp[(3) - (4)].id)); ;}
     break;
 
   case 1301:
 
 /* Line 1464 of yacc.c  */
-#line 3799 "grammar.y"
+#line 3649 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].dbtableEntry)); ;}
     break;
 
   case 1302:
 
 /* Line 1464 of yacc.c  */
-#line 3800 "grammar.y"
+#line 3650 "grammar.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].dbtableEntry)); ;}
     break;
 
   case 1303:
 
 /* Line 1464 of yacc.c  */
-#line 3801 "grammar.y"
+#line 3651 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].dbtableEntry)); ;}
     break;
 
   case 1304:
 
 /* Line 1464 of yacc.c  */
-#line 3802 "grammar.y"
+#line 3652 "grammar.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].dbtableEntry)); ;}
     break;
 
   case 1305:
 
 /* Line 1464 of yacc.c  */
-#line 3806 "grammar.y"
+#line 3656 "grammar.y"
     { (yyval.exp) = MkExpDBOpen((yyvsp[(3) - (6)].exp), (yyvsp[(5) - (6)].exp)); ;}
     break;
 
   case 1306:
 
 /* Line 1464 of yacc.c  */
-#line 3810 "grammar.y"
+#line 3660 "grammar.y"
     { (yyval.exp) = MkExpDBField((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].id)); ;}
     break;
 
   case 1307:
 
 /* Line 1464 of yacc.c  */
-#line 3814 "grammar.y"
+#line 3664 "grammar.y"
     { (yyval.exp) = MkExpDBIndex((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].id)); ;}
     break;
 
   case 1308:
 
 /* Line 1464 of yacc.c  */
-#line 3818 "grammar.y"
+#line 3668 "grammar.y"
     { (yyval.exp) = MkExpDBTable((yyvsp[(3) - (4)].string)); ;}
     break;
 
 
 
 /* Line 1464 of yacc.c  */
-#line 22590 "grammar.ec"
+#line 22480 "grammar.ec"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -22805,6 +22695,6 @@ yyreturn:
 
 
 /* Line 1684 of yacc.c  */
-#line 3821 "grammar.y"
+#line 3671 "grammar.y"
 
 
index 43477e6..a1003a2 100644 (file)
@@ -282,17 +282,7 @@ guess_type:
    identifier '*'
    {
       $$ = null;
-      // if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
 
       FreeIdentifier($1);
 
@@ -312,17 +302,7 @@ guess_type:
    {
       $$ = null;
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
 
       FreeIdentifier($1);
 
@@ -341,17 +321,7 @@ guess_type:
    }
 /*   | identifier '*' '<' template_arguments_list '>'
    {
-      //if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       resetScannerPos(&@1.start);
       yyclearin;
@@ -379,17 +349,7 @@ type:
       }
       else
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          FreeIdentifier($1);
          FreeIdentifier($2);
@@ -416,17 +376,7 @@ type:
    | identifier '<'
    {
    #ifdef PRECOMPILER
-      //if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       resetScannerPos(&@1.start);
       yyclearin;
@@ -444,17 +394,7 @@ type:
    | identifier identifier '<' template_arguments_list '>'
    {
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
       FreeIdentifier($1);
       FreeIdentifier($2);
 
@@ -502,17 +442,7 @@ strict_type:
 /*    | identifier '<' template_arguments_list '>' */
       /*| identifier '<' error
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          yyerrok;
 
@@ -1338,30 +1268,30 @@ class_entry:
    };
 
 class_decl:
-     class_entry identifier { (void)$1; $$ = DeclClassAddNameSpace($2.string); FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+     class_entry identifier { (void)$1; $$ = DeclClassAddNameSpace($2._class, $2.string); FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
    | class_entry base_strict_type
    {
-      (void)$1; $$ = DeclClass($2.name);
+      (void)$1; $$ = DeclClass($2.nsSpec, $2.name);
       $$.nameLoc = @2;
       FreeSpecifier($2);
       ++defaultMemberAccess;
       memberAccessStack[defaultMemberAccess] = privateAccess;
    }
-   | identifier class_entry identifier { (void)$2; $$ = DeclClassAddNameSpace($3.string); FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
-   | identifier class_entry base_strict_type { (void)$2; $$ = DeclClass($3.name); FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
+   | identifier class_entry identifier { (void)$2; $$ = DeclClassAddNameSpace($3._class, $3.string); FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+   | identifier class_entry base_strict_type { (void)$2; $$ = DeclClass($3.nsSpec, $3.name); FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
 
-   | class_entry identifier '<' template_parameters_list '>' { (void)$1; $$ = DeclClassAddNameSpace($2.string); $$.templateParams = $4; FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+   | class_entry identifier '<' template_parameters_list '>' { (void)$1; $$ = DeclClassAddNameSpace($2._class, $2.string); $$.templateParams = $4; FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
    | class_entry base_strict_type '<' template_parameters_list '>'
    {
-      (void)$1; $$ = DeclClass($2.name);
+      (void)$1; $$ = DeclClass($2.nsSpec, $2.name);
       $$.templateParams = $4;
       $$.nameLoc = @2;
       FreeSpecifier($2);
       ++defaultMemberAccess;
       memberAccessStack[defaultMemberAccess] = privateAccess;
    }
-   | identifier class_entry identifier '<' template_parameters_list '>' { (void)$2; $$ = DeclClassAddNameSpace($3.string); $$.templateParams = $5; FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
-   | identifier class_entry base_strict_type '<' template_parameters_list '>' { (void)$2; $$ = DeclClass($3.name); $$.templateParams = $5; FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
+   | identifier class_entry identifier '<' template_parameters_list '>' { (void)$2; $$ = DeclClassAddNameSpace($3._class, $3.string); $$.templateParams = $5; FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+   | identifier class_entry base_strict_type '<' template_parameters_list '>' { (void)$2; $$ = DeclClass($3.nsSpec, $3.name); $$.templateParams = $5; FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
    ;
 
 class:
@@ -1394,13 +1324,13 @@ class:
 
        | class_entry identifier ';'
       {
-         (void)$1; $$ = MkClass(DeclClassAddNameSpace($2.string), null, null); FreeIdentifier($2);
+         (void)$1; $$ = MkClass(DeclClassAddNameSpace($2._class, $2.string), null, null); FreeIdentifier($2);
          POP_DEFAULT_ACCESS
          PopContext(curContext);
       }
        | class_entry type ';'
       {
-         (void)$1; $$ = MkClass(DeclClass($2.name), null, null); FreeSpecifier($2);
+         (void)$1; $$ = MkClass(DeclClass($2.nsSpec, $2.name), null, null); FreeSpecifier($2);
          POP_DEFAULT_ACCESS
          PopContext(curContext);
       }
@@ -1930,15 +1860,7 @@ relational_expression_error:
    {
       if($1.type == identifierExp)
       {
-         if($1.identifier._class && !$1.identifier._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $1.identifier.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.identifier.string);
+         _DeclClass($1.identifier._class, $1.identifier.string);
 
          // printf("Declaring Class %s\n", $1.identifier.string);
          skipErrors = false;
@@ -2207,8 +2129,8 @@ enum_specifier_compound_error:
        ;
 
 enum_decl:
-     enum_specifier identifier  { $$ = $2; if(declMode) DeclClassAddNameSpace($2.string); }
-   | enum_specifier strict_type { $$ = MkIdentifier($2.name); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+     enum_specifier identifier  { $$ = $2; if(declMode) DeclClassAddNameSpace($2._class, $2.string); }
+   | enum_specifier strict_type { $$ = MkIdentifier($2.name); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
    ;
 
 enum_class:
@@ -2288,7 +2210,7 @@ type_specifier:
        | type
    | TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
    | SUBCLASS '(' type ')'                { $$ = MkSpecifierSubClass($3); }
-   | SUBCLASS '(' identifier ')'          { _DeclClass($3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+   | SUBCLASS '(' identifier ')'          { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
    | THISCLASS       { $$ = MkSpecifier(THISCLASS); }
    | TYPED_OBJECT    { $$ = MkSpecifier(TYPED_OBJECT); }
    | ANY_OBJECT      { $$ = MkSpecifier(ANY_OBJECT); }
@@ -2321,7 +2243,7 @@ strict_type_specifier:
    | _IMAGINARY      { $$ = MkSpecifier(_IMAGINARY); }
    | TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
    | SUBCLASS '(' type ')'                { $$ = MkSpecifierSubClass($3); }
-   | SUBCLASS '(' identifier ')'          { _DeclClass($3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+   | SUBCLASS '(' identifier ')'          { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
    | THISCLASS       { $$ = MkSpecifier(THISCLASS); }
        ;
 
@@ -2415,12 +2337,12 @@ struct_decl:
         $$ = $1;
         if(declMode)
         {
-           ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id.string);
+           ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id._class, $1.id.string);
         }
      }
    | struct_entry '<' template_parameters_list '>'
    {
-      Symbol symbol = ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id.string);
+      Symbol symbol = ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id._class, $1.id.string);
       $$ = $1;
       symbol.templateParams = $3;
    }
@@ -2584,22 +2506,12 @@ _inheritance_specifiers:
    | strict_type_specifier                                   { $$ = MkList(); ListAdd($$, $1); }
    | _inheritance_specifiers strict_type_specifier            { $$ = $1; ListAdd($1, $2); }
    | identifier
-      { _DeclClass($1.string); $$ = MkListOne(MkSpecifierName($1.string)); FreeIdentifier($1); }
-       | _inheritance_specifiers identifier                { $$ = $1; _DeclClass($2.string); ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2); }
+      { _DeclClass($1._class, $1.string); $$ = MkListOne(MkSpecifierName($1.string)); FreeIdentifier($1); }
+       | _inheritance_specifiers identifier                { $$ = $1; _DeclClass($2._class, $2.string); ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2); }
 
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -2608,15 +2520,7 @@ _inheritance_specifiers:
    | _inheritance_specifiers identifier '<' template_arguments_list '>'
       {
          $$ = $1;
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -2638,17 +2542,7 @@ property_specifiers:
    | property_specifiers identifier          { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -2656,15 +2550,7 @@ property_specifiers:
       }
    | property_specifiers identifier '<' template_arguments_list '>'
       {
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -2685,17 +2571,7 @@ renew_specifiers:
    | renew_specifiers identifier          { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -2703,15 +2579,7 @@ renew_specifiers:
       }
    | renew_specifiers identifier '<' template_arguments_list '>'
       {
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -2732,17 +2600,7 @@ new_specifiers:
    | new_specifiers identifier          { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -2750,15 +2608,7 @@ new_specifiers:
       }
    | new_specifiers identifier '<' template_arguments_list '>'
       {
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -3770,8 +3620,8 @@ thefile:
    ;
 
 dbtable_definition:
-     DBTABLE string_literal identifier   '{' dbfield_definition_list '}' { Symbol symbol = DeclClassAddNameSpace($3.string); FreeIdentifier($3); $$ = MkDBTableDef($2, symbol, $5); }
-   | DBTABLE string_literal strict_type  '{' dbfield_definition_list '}' { Symbol symbol = DeclClass($3.name); FreeSpecifier($3); $$ = MkDBTableDef($2, symbol, $5); }
+     DBTABLE string_literal identifier   '{' dbfield_definition_list '}' { Symbol symbol = DeclClassAddNameSpace($3._class, $3.string); FreeIdentifier($3); $$ = MkDBTableDef($2, symbol, $5); }
+   | DBTABLE string_literal strict_type  '{' dbfield_definition_list '}' { Symbol symbol = DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); $$ = MkDBTableDef($2, symbol, $5); }
    | DBTABLE string_literal '{' dbfield_definition_list '}' { $$ = MkDBTableDef($2, null, $4); }
    ;
 
index 1506ce7..cf68afd 100644 (file)
@@ -285,7 +285,7 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 
 #define YY_NUM_RULES 177
 #define YY_END_OF_BUFFER 178
-static yyconst short int yy_accept[723] =
+static yyconst short int yy_accept[721] =
     {   0,
       112,  112,  178,  176,  174,  173,  172,  175,  159,  176,
         1,  171,  165,  158,  176,  153,  154,  163,  162,  150,
@@ -315,58 +315,57 @@ static yyconst short int yy_accept[723] =
       112,   44,  112,  112,  112,  112,  112,  112,  112,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
       112,    0,  121,    0,  121,    0,  122,  120,  115,  116,
-      113,    0,  112,  112,   61,  112,  112,  112,  112,  112,
+      113,    0,   61,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,    4,  112,    6,    7,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,  112,  112,  112,    4,  112,    6,
-        7,  112,  112,  112,  112,  112,  112,  112,  112,  112,
 
-      112,  112,  112,  112,   13,   14,  112,  112,  112,   18,
-      112,  112,  112,  112,  112,   22,  112,   52,  112,  112,
+      112,  112,   13,   14,  112,  112,  112,   18,  112,  112,
+      112,  112,  112,   22,  112,   52,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,  112,  112,   21,  112,  112,  112,   38,  112,
+      112,  112,    0,  121,  115,  115,    0,  115,  115,  116,
+        0,    0,  114,   62,  112,  112,  112,   93,  112,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,  112,  112,   21,  112,  112,  112,
-       38,  112,  112,  112,    0,  121,  115,  115,    0,  115,
-      115,  116,    0,    0,  114,   62,  112,  112,  112,   93,
+      112,  112,  112,  112,  112,  112,    5,   47,    8,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,  112,  112,  112,  112,    5,   47,
-        8,  112,  112,  112,  112,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,   16,  112,  112,  112,   58,   46,
-
-      112,  112,  112,  112,  112,   53,  112,  112,   25,  112,
-      112,  112,  112,  112,  112,  112,  112,  112,  112,   36,
-      112,  112,  112,   95,   42,    0,  115,  115,  115,    0,
-        0,  116,  114,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,   16,  112,  112,  112,   58,   46,  112,  112,
+
+      112,  112,  112,   53,  112,  112,   25,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,   36,  112,  112,
+      112,   95,   42,    0,  115,  115,  115,    0,    0,  116,
+      114,  112,  112,  112,  112,  112,  112,  112,  112,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
-      112,  112,   56,   50,  112,  112,   12,   15,  112,   55,
-       88,   72,  112,  112,  112,   84,  112,   54,  112,   24,
-       26,   29,   31,  112,  112,   33,  112,   34,  112,  112,
-      112,  112,  112,  112,  112,    0,  115,  112,  112,  112,
-
-       91,  112,  112,   76,   82,  112,  112,  112,   57,  112,
-      112,  112,  112,  112,  112,  112,   70,  112,  112,  112,
-      112,  112,  112,  112,  112,  109,  110,  108,   10,  112,
-      112,  112,  112,   85,  112,  112,  112,   80,  112,  112,
-      112,  112,   35,  112,   49,  112,  112,   63,  112,  112,
-      112,  112,  112,  112,   71,  112,   27,  112,   32,   94,
-      112,  112,   79,  112,  112,  112,  112,  112,  112,    9,
-      112,  112,  112,  112,  112,   43,   23,   65,  112,  106,
-      112,  112,   37,   39,  112,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,   77,  112,  112,  112,  112,  112,
-
-      112,  112,  112,  112,  112,   74,   75,  112,  107,  112,
-      112,   48,  112,   98,   64,  112,  112,  112,  112,  112,
-       69,   81,   28,  112,   41,  112,   87,  104,  112,  112,
-      112,  112,  112,  112,  112,  112,  112,  112,   30,   68,
-      112,    0,  112,  112,   78,  112,   90,  112,  112,  101,
-      112,  112,  112,  112,  112,  112,  112,  112,  112,   73,
-        0,  112,   83,   40,  112,  112,  112,  112,  112,   97,
-      112,   96,   86,   67,  112,  112,   89,  112,  112,  112,
-      112,  111,  112,  112,  112,  112,  112,   99,  112,  105,
-      112,  112,  112,  112,  112,  112,  112,  112,   60,  112,
-
-      112,  112,  112,  112,   59,  112,  112,  103,  112,  112,
-      100,  112,  112,  112,  112,  112,  112,  112,  102,  112,
-       66,    0
+       56,   50,  112,  112,   12,   15,  112,   55,   88,   72,
+      112,  112,  112,   84,  112,   54,  112,   24,   26,   29,
+       31,  112,  112,   33,  112,   34,  112,  112,  112,  112,
+      112,  112,  112,    0,  115,  112,  112,  112,   91,  112,
+
+      112,   76,   82,  112,  112,  112,   57,  112,  112,  112,
+      112,  112,  112,  112,   70,  112,  112,  112,  112,  112,
+      112,  112,  112,  109,  110,  108,   10,  112,  112,  112,
+      112,   85,  112,  112,  112,   80,  112,  112,  112,  112,
+       35,  112,   49,  112,  112,   63,  112,  112,  112,  112,
+      112,  112,   71,  112,   27,  112,   32,   94,  112,  112,
+       79,  112,  112,  112,  112,  112,  112,    9,  112,  112,
+      112,  112,  112,   43,   23,   65,  112,  106,  112,  112,
+       37,   39,  112,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,   77,  112,  112,  112,  112,  112,  112,  112,
+
+      112,  112,  112,   74,   75,  112,  107,  112,  112,   48,
+      112,   98,   64,  112,  112,  112,  112,  112,   69,   81,
+       28,  112,   41,  112,   87,  104,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,   30,   68,  112,    0,
+      112,  112,   78,  112,   90,  112,  112,  101,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,   73,    0,  112,
+       83,   40,  112,  112,  112,  112,  112,   97,  112,   96,
+       86,   67,  112,  112,   89,  112,  112,  112,  112,  111,
+      112,  112,  112,  112,  112,   99,  112,  105,  112,  112,
+      112,  112,  112,  112,  112,  112,   60,  112,  112,  112,
+
+      112,  112,   59,  112,  112,  103,  112,  112,  100,  112,
+      112,  112,  112,  112,  112,  112,  102,  112,   66,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -413,177 +412,175 @@ static yyconst int yy_meta[77] =
         8,    8,    1,    1,    1,    1
     } ;
 
-static yyconst short int yy_base[733] =
+static yyconst short int yy_base[729] =
     {   0,
-        0,    0,  254, 2565, 2565, 2565, 2565, 2565,  219,   70,
-     2565, 2565,   50,   69,  201, 2565, 2565,  199,   65, 2565,
-       66,   64,   76,   96,   79,   80, 2565,   97,  194,   61,
-     2565,   81,   88,  116, 2565, 2565,  183,  132,  115,   87,
+        0,    0,  254, 2575, 2575, 2575, 2575, 2575,  219,   70,
+     2575, 2575,   50,   69,  201, 2575, 2575,  199,   65, 2575,
+       66,   64,   76,   96,   79,   80, 2575,   97,  194,   61,
+     2575,   81,   88,  116, 2575, 2575,  183,  132,  115,   87,
       143,  147,  131,  148,  156,  160,  121,  164,  136,  203,
-      204,  206,  208,  212,  224, 2565,   88, 2565, 2565, 2565,
-      101, 2565,  184, 2565, 2565, 2565, 2565,  182,  174, 2565,
-     2565, 2565, 2565, 2565, 2565,  159,  259, 2565, 2565, 2565,
-      298,  339,  218,  247,  151,    0,    0, 2565, 2565, 2565,
-      116, 2565, 2565, 2565,  111,  111,  149,  106,  213,  186,
+      204,  206,  208,  212,  224, 2575,   88, 2575, 2575, 2575,
+      101, 2575,  184, 2575, 2575, 2575, 2575,  182,  174, 2575,
+     2575, 2575, 2575, 2575, 2575,  159,  259, 2575, 2575, 2575,
+      298,  339,  218,  247,  151,    0,    0, 2575, 2575, 2575,
+      116, 2575, 2575, 2575,  111,  111,  149,  106,  213,  186,
 
-       85, 2565,  233,  237,  232,  396,  221,  240,  241,  242,
+       85, 2575,  233,  237,  232,  396,  221,  240,  241,  242,
       265,  298,  313,  306,  318,  319,  323,  315,  316,  334,
       331,  363,  364,  372,  328,  374,  375,  390,  391,  392,
       393,  400,  409,  401,  394,  411,  398,  416,  424,  431,
       399,  458,  459,  463,  466,  465,  468,  469,  475,  470,
-      476,  478,  487,  491, 2565, 2565, 2565, 2565,  527,  517,
-      556,  541,  546,  530,  483,  595,    0,  601,    0, 2565,
-     2565,    0,  533,  243, 2565,  108,  498,  550,  403,  596,
-      589,  612,  618,  611,  624,  620,  642,  517,  648,  600,
-      654,  658,  664,  497,  665,  666,  667,  669,  671,  675,
-
-      676,  571,  677,  682,  695,  692,  693,  701,  704,  710,
-      712,  714,  717,  508,  721,  723,  736,  742,  743,  747,
-      744,  748,  749,  765,  752,  764,  767,  768,  769,  770,
-      772,  780,  789,  793,  792,  797,  798,  804,  805,  800,
-      808,  817,  821,  820,  826,  824,  827,  830,  836,  845,
-      832,  854,  875,  884,  875,  894,  899,  900,  905,  948,
-      936,  992,    0,  854,  858,  860,  878,  876,  935,  965,
-      900,  938,  995,  998,  879, 1001, 1006, 1008, 1007, 1011,
-      925, 1013, 1010, 1016, 1018, 1028, 1017, 1019, 1023, 1026,
-     1029, 1035, 1038, 1039, 1041, 1045, 1060, 1064, 1066, 1069,
-
-     1071, 1073, 1076, 1081, 1077, 1082, 1092, 1094, 1098, 1097,
-     1101, 1099, 1107, 1104, 1103, 1109, 1110, 1114, 1130, 1120,
-     1127, 1133, 1135, 1136, 1137, 1142, 1155, 1148, 1146, 1163,
-     1159, 1165, 1166, 1168, 1170, 1171, 1174, 1178, 1181, 1194,
-     1198, 1201, 1202, 1206, 1219, 1225,    0, 1215, 1257, 1247,
-        0, 1255, 1297, 1241, 1301, 1205, 1258, 1245, 1277, 1213,
-     1280, 1284, 1226, 1305, 1316, 1317, 1321, 1323, 1324, 1326,
-     1334, 1339, 1341, 1351, 1342, 1354, 1357, 1360, 1361, 1363,
-     1367, 1369, 1370, 1372, 1387, 1389, 1391, 1395, 1397, 1396,
-     1400, 1402, 1408, 1412, 1413, 1415, 1417, 1421, 1418, 1430,
-
-     1433, 1440, 1441, 1442, 1446, 1451, 1453, 1450, 1457, 1463,
-     1466, 1468, 1469, 1472, 1473, 1474, 1475, 1476, 1479, 1478,
-     1491, 1496, 1499, 1502, 1504, 1275, 1535,    0, 1508, 1559,
-     1563, 1574, 1564, 1526, 1529, 1568, 1589, 1551, 1523, 1593,
-     1594, 1597, 1613, 1614, 1617, 1621, 1624, 1623, 1630, 1626,
-     1632, 1634, 1639, 1633, 1636, 1643, 1642, 1645, 1652, 1654,
-     1655, 1661, 1538, 1658, 1670, 1676, 1686, 1689, 1691, 1694,
-     1697, 1701, 1704, 1706, 1709, 1710, 1712, 1714, 1717, 1719,
-     1722, 1725, 1729, 1730, 1734, 1735, 1737, 1738, 1740, 1745,
-     1755, 1757, 1758, 1760, 1761, 1755, 1799, 1762, 1770, 1773,
-
-     1779, 1780, 1786, 1781, 1788, 1790, 1801, 1805, 1803, 1814,
-     1816, 1820, 1822, 1829, 1835, 1837, 1838, 1839, 1840, 1858,
-     1860, 1850, 1861, 1863, 1865, 1869, 1870, 1876, 1878, 1886,
-     1888, 1889, 1893, 1894, 1896, 1897, 1898, 1909, 1913, 1915,
-     1916, 1917, 1919, 1920, 1921, 1922, 1924, 1926, 1937, 1943,
-     1944, 1945, 1947, 1948, 1965, 1964, 1966, 1967, 1954, 1973,
-     1975, 1977, 1982, 1983, 1984, 1992, 1994, 1999, 2004, 2005,
-     2007, 2010, 2011, 2012, 2016, 2027, 2017, 2033, 2036, 2037,
-     2038, 2040, 2044, 2045, 2048, 2060, 2061, 2064, 2067, 2068,
-     2070, 2069, 2071, 2073, 2076, 2077, 2079, 2088, 2094, 2096,
-
-     2099, 2100, 2101, 2111, 2116, 2122, 2123, 2124, 2132, 2134,
-     2135, 2139, 2140, 2145, 2147, 2150, 2152, 2155, 2156, 2157,
-     2160, 2162, 2168, 2175, 2177, 2178, 2183, 2185, 2187, 2188,
-     2190, 2194, 2195, 2196, 2203, 2205, 2215, 2206, 2218, 2221,
-     2223,   96, 2225, 2226, 2224, 2227, 2233, 2244, 2250, 2252,
-     2254, 2255, 2270, 2259, 2267, 2271, 2272, 2276, 2274, 2565,
-       68, 2279, 2275, 2277, 2280, 2282, 2283, 2287, 2295, 2303,
-     2305, 2304, 2307, 2324, 2325, 2326, 2329, 2333, 2330, 2334,
-     2336, 2337, 2354, 2341, 2353, 2356, 2357, 2358, 2359, 2361,
-     2364, 2365, 2362, 2377, 2380, 2381, 2385, 2386, 2388, 2389,
-
-     2390, 2398, 2407, 2408, 2410, 2411, 2414, 2416, 2420, 2429,
-     2423, 2432, 2436, 2439, 2440, 2442, 2445, 2448, 2451, 2452,
-     2455, 2565, 2516, 2524, 2531, 2535, 2536, 2544, 2547, 2549,
-     2551, 2556
+      476,  478,  487,  491, 2575, 2575, 2575, 2575,  527,  517,
+      556,  541,  546,  530,  483,  595,    0,  601,  403, 2575,
+     2575,    0,  533,  243, 2575,  108,  498,  550,  589,  596,
+      600,  618,  571,  611,  624,  620,  645,  517,  648,  652,
+      654,  663,  665,  497,  664,  667,  671,  672,  673,  675,
+
+      680,  683,  682,  684,  705,  692,  695,  708,  710,  720,
+      723,  731,  738,  508,  735,  739,  741,  743,  744,  747,
+      754,  748,  756,  763,  765,  766,  767,  771,  784,  774,
+      786,  787,  793,  794,  799,  803,  806,  805,  809,  810,
+      812,  814,  821,  827,  833,  834,  836,  837,  838,  839,
+      855,  860,  875,  889,  880,  899,  907,  905,  910,  953,
+      941,  997,  860,  866,  883,  881,  876,  970,  945,  927,
+     1003,  946, 1006, 1011, 1012, 1014,  940, 1013, 1016, 1018,
+     1015, 1021,  943, 1022, 1023, 1024, 1033, 1034, 1040, 1041,
+     1042, 1043, 1051, 1050, 1058, 1071, 1059, 1076, 1078, 1079,
+
+     1082, 1086, 1087, 1094, 1099, 1102, 1103, 1104, 1106, 1105,
+     1107, 1110, 1111, 1114, 1123, 1127, 1130, 1129, 1135, 1136,
+     1139, 1140, 1142, 1147, 1148, 1155, 1151, 1164, 1168, 1171,
+     1172, 1173, 1174, 1184, 1191, 1194, 1200, 1203, 1204, 1207,
+     1209, 1211, 1217, 1222,    0, 1212, 1259, 1249,    0, 1257,
+     1299, 1236, 1303, 1237, 1241, 1242, 1265, 1282, 1286, 1274,
+     1293, 1319, 1320, 1321, 1324, 1323, 1326, 1328, 1341, 1343,
+     1344, 1346, 1347, 1350, 1352, 1353, 1356, 1363, 1365, 1372,
+     1374, 1376, 1382, 1387, 1392, 1393, 1395, 1394, 1398, 1402,
+     1403, 1404, 1405, 1413, 1414, 1425, 1415, 1430, 1431, 1433,
+
+     1437, 1438, 1448, 1449, 1455, 1457, 1458, 1461, 1460, 1465,
+     1464, 1473, 1467, 1480, 1470, 1482, 1485, 1491, 1492, 1495,
+     1511, 1513, 1515, 1523, 1547,    0, 1519, 1571, 1527, 1586,
+     1576, 1549, 1541, 1566, 1572, 1601, 1554, 1605, 1606, 1611,
+     1623, 1626, 1627, 1629, 1630, 1548, 1633, 1635, 1636, 1638,
+     1642, 1645, 1648, 1655, 1654, 1658, 1660, 1663, 1667, 1664,
+     1666, 1675, 1684, 1685, 1687, 1688, 1690, 1703, 1706, 1709,
+     1711, 1713, 1714, 1715, 1716, 1718, 1724, 1726, 1733, 1737,
+     1739, 1741, 1742, 1744, 1746, 1750, 1759, 1752, 1762, 1761,
+     1765, 1767, 1768, 1773, 1806, 1777, 1774, 1778, 1780, 1787,
+
+     1793, 1795, 1798, 1808, 1810, 1814, 1821, 1823, 1826, 1827,
+     1831, 1839, 1842, 1843, 1844, 1847, 1849, 1859, 1862, 1865,
+     1869, 1870, 1872, 1877, 1878, 1880, 1885, 1889, 1898, 1901,
+     1904, 1905, 1906, 1909, 1910, 1914, 1917, 1921, 1925, 1930,
+     1927, 1932, 1933, 1936, 1934, 1938, 1945, 1949, 1953, 1955,
+     1960, 1957, 1964, 1973, 1970, 1976, 1980, 1981, 1983, 1985,
+     1989, 1993, 1996, 2004, 2008, 2011, 2013, 2014, 2016, 2015,
+     2019, 2021, 2020, 2023, 2026, 2039, 2041, 2042, 2043, 2048,
+     2049, 2054, 2066, 2069, 2072, 2073, 2075, 2076, 2079, 2077,
+     2078, 2081, 2082, 2084, 2088, 2100, 2105, 2106, 2109, 2110,
+
+     2112, 2121, 2127, 2122, 2131, 2134, 2132, 2144, 2147, 2149,
+     2150, 2152, 2156, 2157, 2160, 2162, 2165, 2168, 2172, 2180,
+     2181, 2184, 2185, 2188, 2189, 2190, 2196, 2197, 2208, 2200,
+     2209, 2212, 2213, 2217, 2215, 2228, 2225, 2232, 2233,   96,
+     2235, 2237, 2230, 2241, 2243, 2258, 2260, 2261, 2262, 2269,
+     2278, 2279, 2280, 2281, 2282, 2285, 2284, 2575,   68, 2287,
+     2286, 2288, 2289, 2290, 2291, 2297, 2312, 2313, 2315, 2316,
+     2318, 2334, 2336, 2339, 2340, 2343, 2341, 2345, 2346, 2347,
+     2349, 2351, 2358, 2364, 2366, 2367, 2368, 2369, 2370, 2371,
+     2374, 2375, 2386, 2390, 2391, 2393, 2396, 2398, 2399, 2401,
+
+     2402, 2419, 2414, 2423, 2426, 2427, 2431, 2432, 2442, 2443,
+     2447, 2449, 2451, 2455, 2460, 2466, 2464, 2467, 2470, 2575,
+     2531, 2539, 2546, 2550, 2551, 2559, 2562, 2566
     } ;
 
-static yyconst short int yy_def[733] =
+static yyconst short int yy_def[729] =
     {   0,
-      722,    1,  722,  722,  722,  722,  722,  722,  722,  723,
-      722,  722,  722,  722,  724,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,   24,  722,  722,  722,  722,  722,
-      722,  725,  725,  725,  722,  722,  722,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  722,  722,  722,  722,  722,
-      723,  722,  723,  722,  722,  722,  722,  724,  724,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  726,   25,  727,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  725,  722,  725,  728,
-
-      724,  722,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  729,  726,  730,  722,
-      722,  731,  725,  728,  722,  728,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  722,   77,  722,  722,  722,   81,  722,  729,  722,
-      722,  722,  730,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  722,  161,  259,  722,  722,  260,
-      350,  722,  722,  722,  722,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  722,  722,  350,  722,  722,
-      722,  722,  722,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  722,  722,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  732,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  722,
-      732,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,    0,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722
+      720,    1,  720,  720,  720,  720,  720,  720,  720,  721,
+      720,  720,  720,  720,  722,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,   24,  720,  720,  720,  720,  720,
+      720,  723,  723,  723,  720,  720,  720,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  720,  720,  720,  720,  720,
+      721,  720,  721,  720,  720,  720,  720,  722,  722,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  724,   25,  725,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  723,  720,  723,  726,
+
+      722,  720,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  727,  724,  723,  720,
+      720,  725,  723,  726,  720,  726,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  720,   77,  720,  720,  720,   81,  720,  727,  720,
+      720,  720,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  720,  161,  259,  720,  720,  260,  348,  720,
+      720,  720,  720,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  720,  720,  348,  720,  720,  720,  720,
+      720,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  720,  720,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  728,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  720,  728,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,    0,
+      720,  720,  720,  720,  720,  720,  720,  720
     } ;
 
-static yyconst short int yy_nxt[2642] =
+static yyconst short int yy_nxt[2652] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
@@ -593,18 +590,18 @@ static yyconst short int yy_nxt[2642] =
        42,   43,   44,   45,   32,   46,   32,   32,   47,   32,
        48,   32,   49,   50,   51,   52,   53,   54,   55,   32,
        32,   32,   56,   57,   58,   59,   62,   64,   65,   66,
-       71,  660,   76,   73,   77,   77,   77,   77,   94,   95,
+       71,  658,   76,   73,   77,   77,   77,   77,   94,   95,
        78,   96,   72,   74,   75,   79,   67,   96,   96,   86,
 
-       86,   86,   86,   80,   87,   98,   89,   62,   88,  660,
-      722,   98,   98,   63,   81,  155,   82,   82,   82,   82,
-      722,   90,  100,   91,   92,   96,   96,  101,   69,   83,
+       86,   86,   86,   80,   87,   98,   89,   62,   88,  658,
+      720,   98,   98,   63,   81,  155,   82,   82,   82,   82,
+      720,   90,  100,   91,   92,   96,   96,  101,   69,   83,
       172,   96,   84,   84,   84,   98,   84,   85,  171,   98,
-       98,   96,   96,  170,   63,   98,   96,   83,  722,   99,
+       98,   96,   96,  170,   63,   98,   96,   83,  720,   99,
       113,   84,   84,   96,   84,   98,   98,   96,   96,   96,
        98,  156,   84,  103,  104,   85,   96,   98,  105,  167,
-       96,   98,   98,   98,   96,  110,  722,  158,  106,  111,
-       98,  112,  135,  107,   98,   68,  722,  108,   98,  123,
+       96,   98,   98,   98,   96,  110,  720,  158,  106,  111,
+       98,  112,  135,  107,   98,   68,  720,  108,   98,  123,
       114,  124,  175,  157,  118,  119,  109,  115,  120,  138,
 
       125,  116,  139,  126,  117,  121,  127,  129,  122,  128,
@@ -612,273 +609,274 @@ static yyconst short int yy_nxt[2642] =
       133,   93,   96,   96,  134,   69,   70,   98,   98,  176,
        98,   96,   98,  165,   96,  165,   98,   98,  166,  166,
       166,  166,   96,   96,   69,   98,   60,   96,   98,  175,
-       96,   96,   96,  722,  140,  141,   98,   98,  142,  143,
-      147,   98,  722,  149,   98,   98,   98,  151,  150,  144,
-      145,  153,  146,  152,  173,   96,  148,  722,  154,   77,
-       77,   77,   77,   84,   84,   84,  176,   84,  722,   98,
-      190,  179,  159,  160,  177,  160,  160,  160,  178,  722,
+       96,   96,   96,  720,  140,  141,   98,   98,  142,  143,
+      147,   98,  720,  149,   98,   98,   98,  151,  150,  144,
+      145,  153,  146,  152,  173,   96,  148,  720,  154,   77,
+       77,   77,   77,   84,   84,   84,  176,   84,  720,   98,
+      190,  179,  159,  160,  177,  160,  160,  160,  178,  720,
 
-      191,  722,   84,   84,  722,   84,  192,  722,   96,  722,
+      191,  720,   84,   84,  720,   84,  192,  720,   96,  720,
       159,  160,  193,   84,  160,  160,   96,  160,  161,  161,
-      161,  161,   98,   96,  194,   96,   96,  722,   96,   96,
+      161,  161,   98,   96,  194,   96,   96,  720,   96,   96,
        98,  162,  163,   96,  163,  163,  163,   98,   96,   98,
-       98,   96,   98,   98,   96,  722,  722,   98,  722,  162,
-      163,  722,   98,  163,  163,   98,  163,   81,   98,   82,
-       82,   82,   82,  195,  196,  198,  199,  722,  202,  722,
-      197,  203,   83,   96,   96,  164,  164,  164,  722,  164,
+       98,   96,   98,   98,   96,  720,  720,   98,  720,  162,
+      163,  720,   98,  163,  163,   98,  163,   81,   98,   82,
+       82,   82,   82,  195,  196,  198,  199,  720,  202,  720,
+      197,  203,   83,   96,   96,  164,  164,  164,  720,  164,
       201,  204,   96,  200,   96,   96,  205,   98,   98,  207,
-       83,  722,  206,  211,  164,  164,   98,  164,   98,   98,
+       83,  720,  206,  211,  164,  164,   98,  164,   98,   98,
 
-       96,   96,   96,   96,   96,  164,   96,  722,   96,   96,
-       96,   96,  722,   96,   98,   98,   98,   98,   98,   96,
+       96,   96,   96,   96,   96,  164,   96,  720,   96,   96,
+       96,   96,  720,   96,   98,   98,   98,   98,   98,   96,
        98,   96,   98,   98,   98,   98,   96,   98,  209,  208,
-      722,  722,  722,   98,   96,   98,  213,  212,  210,  722,
-       98,   96,  722,  180,  181,  182,  183,  184,   98,  722,
-      268,  185,  722,  214,  222,   98,  215,  216,  218,  186,
+      720,  720,  720,   98,   96,   98,  213,  212,  210,  720,
+       98,   96,  720,  180,  181,  182,  183,  184,   98,  720,
+      720,  185,  720,  214,  222,   98,  215,  216,  218,  186,
       187,  188,  217,  189,  232,  221,  224,  219,   96,   96,
       223,  225,  227,   96,  220,   96,   96,  226,   96,   96,
-       96,  722,   98,   98,  228,   96,   96,   98,   96,   98,
-       98,  229,   98,   98,   98,  230,  231,   96,  722,   98,
-
-       98,   96,   98,  166,  166,  166,  166,   96,   96,  722,
-      236,   98,  234,  237,  240,   98,  722,  722,   96,  233,
-      241,   98,   98,  242,  238,  245,  239,   96,  722,  722,
-      235,  243,   98,  248,  246,  244,  249,  722,  722,  247,
-      722,   98,  252,   96,  252,  722,  251,  253,  253,  253,
-      253,  160,  250,  160,  160,  160,  256,   98,  256,  266,
-       96,  257,  257,  257,  257,  722,  164,  164,  164,  160,
-      164,  281,  160,  160,   98,  160,  161,  161,  161,  161,
-      163,   96,  163,  163,  163,  164,  164,  282,  164,  254,
-      255,  265,  255,  255,  255,   98,  164,  722,  163,   96,
-
-      722,  163,  163,  722,  163,  722,   96,  254,  255,  267,
+       96,  720,   98,   98,  228,   96,   96,   98,   96,   98,
+       98,  229,   98,   98,   98,  230,  231,   96,  720,   98,
+
+       98,   96,   98,  166,  166,  166,  166,   96,   96,  720,
+      236,   98,  234,  237,  240,   98,  720,  720,   96,  233,
+      241,   98,   98,  242,  238,  245,  239,   96,  720,  720,
+      235,  243,   98,  248,  246,  244,  249,  720,  720,  247,
+      720,   98,  252,   96,  252,  720,  251,  253,  253,  253,
+      253,  160,  250,  160,  160,  160,  256,   98,  256,  264,
+       96,  257,  257,  257,  257,  720,  164,  164,  164,  160,
+      164,  279,  160,  160,   98,  160,  161,  161,  161,  161,
+      163,   96,  163,  163,  163,  164,  164,  280,  164,  254,
+      255,  263,  255,  255,  255,   98,  164,  720,  163,   96,
+
+      720,  163,  163,  720,  163,  720,   96,  254,  255,  265,
        96,  255,  255,   98,  255,  166,  166,  166,  166,  260,
-       98,   96,   96,  722,   98,  722,  296,  722,   96,  258,
-       96,  258,  258,  258,   96,   98,   98,  261,  261,  261,
-      262,  261,   98,  722,   98,  722,  722,  258,   98,  722,
-      258,  258,   96,  258,  269,  272,  261,  261,   96,  261,
-      270,  271,  273,  262,   96,  284,   98,  261,   96,  275,
-      722,  278,   98,  274,   96,   96,   96,   96,   98,   96,
-      276,   96,   98,  722,  277,   96,   96,   96,   98,   98,
-       98,   98,   96,   98,  722,   98,  722,  279,  722,   98,
-
-       98,   98,   96,   96,  722,   96,   98,  280,  286,  283,
-      287,   96,  285,  289,   96,  722,   98,   98,  290,   98,
-       96,  722,   96,  295,   96,   98,  288,   96,   98,  298,
-      722,   96,  291,   96,   98,  292,   98,  297,   98,  293,
-      294,   98,  299,  301,  302,   98,   96,   98,  303,  304,
-      300,  722,   96,   96,   96,  305,  722,   96,   96,   96,
-       98,  722,   96,  307,  309,  308,   98,   98,   98,  306,
-      314,   98,   98,   98,   96,   96,   98,   96,   96,   96,
-       96,  722,   96,  722,  310,  318,  722,  722,   98,   98,
-       96,   98,   98,   98,   98,  315,   98,  311,  313,   96,
-
-      317,  316,   96,   96,   98,  312,  722,   96,   96,  722,
-       96,  722,  722,   98,   96,   96,   98,   98,   96,  319,
-      323,   98,   98,  322,   98,  321,  320,   96,   98,   98,
-       96,   96,   98,  722,   96,  324,   96,   96,  325,  722,
-       96,   98,   96,  328,   98,   98,   96,  330,   98,  333,
-       98,   98,  326,  327,   98,   96,   98,  722,  722,  722,
-       98,  722,  329,  722,   96,  722,  331,  722,   96,   98,
-       96,  332,  336,  334,  253,  253,  253,  253,   98,  339,
-      341,  335,   98,  342,   98,  337,   96,  338,   96,   96,
-      344,  722,  340,  722,  343,  253,  253,  253,  253,  345,
-
-       98,  345,   98,   98,  346,  346,  346,  346,  722,  255,
-       96,  255,  255,  255,  257,  257,  257,  257,  356,  257,
-      257,  257,  257,  722,   98,  722,  722,  255,  365,  358,
-      255,  255,  722,  255,  258,   96,  258,  258,  258,  347,
-      357,  348,  348,  348,  349,   96,  722,  722,   96,   98,
-      722,  722,  258,  722,  722,  258,  258,  347,  258,   98,
-      348,  348,   98,  348,  722,  361,  722,  349,  350,  350,
-      350,  350,  261,  261,  261,   96,  261,  722,  350,  350,
-      350,  350,  351,  722,  352,  352,  352,  353,  372,   98,
-      359,  261,  261,  362,  261,  350,  350,  350,  350,  350,
-
-      351,  722,  261,  352,  352,   96,  352,  354,   96,  354,
-      353,   96,  355,  355,  355,  355,   96,   96,   96,   98,
-       96,   96,   98,   96,  360,   98,   96,   96,   96,   96,
-       98,   98,   98,   96,   98,   98,   96,   98,   96,   96,
-       98,   98,   98,   98,  722,   96,  363,   98,   96,   96,
-       98,   96,   98,   98,  722,   96,  722,  722,  364,   98,
-      370,  371,   98,   98,  367,   98,  366,  375,  374,   98,
-       96,  368,  369,  376,   96,  373,   96,  377,  378,   96,
-      379,   96,  722,   96,   98,  722,   96,   96,   98,  383,
-       98,   96,   96,   98,  382,   98,  384,   98,  722,  380,
-
-       98,   98,   96,  381,   96,   98,   98,   96,   96,   96,
-      385,   96,  386,   96,   96,  722,   98,   96,   98,   96,
-       96,   98,   98,   98,   96,   98,  399,   98,   98,  388,
-       96,   98,  387,   98,   98,  391,  389,   96,   98,  392,
-       96,  722,  390,   96,   98,   96,   96,   96,  722,  722,
-      397,   98,   96,  722,   98,  393,   96,   98,   96,   98,
-       98,   98,  394,  395,  396,   96,   98,  398,  400,   96,
-       98,  403,   98,   96,  401,   96,   96,  402,   96,   98,
-       96,   96,  404,   98,   96,  722,  722,   98,   96,   98,
-       98,   96,   98,  722,   98,   98,  722,  405,   98,  407,
-
-      408,  412,   98,  406,   96,   98,  410,  409,   96,  411,
-      413,   96,   96,  722,  415,   96,   96,  417,   98,  418,
-      722,  419,   98,   96,  416,   98,   98,  414,  722,   98,
-       98,  722,  722,  722,  421,  722,   96,   98,  420,  346,
-      346,  346,  346,  722,  722,  346,  346,  346,  346,  348,
-       98,  348,  348,  348,  722,   96,  424,  425,  722,  437,
-      422,  355,  355,  355,  355,  722,  423,  348,   96,   98,
-      348,  348,  426,  348,  426,  440,  722,  427,  427,  427,
-      427,  428,   98,  429,  429,  429,  430,   96,  722,  352,
-       96,  352,  352,  352,   96,  427,  427,  427,  427,  428,
-
-      435,   98,  429,  429,   98,  429,  722,  352,   98,  430,
-      352,  352,  431,  352,  431,   96,  434,  432,  432,  432,
-      432,  355,  355,  355,  355,  722,   96,   96,  722,   98,
-      436,   96,  722,   96,   96,  433,   96,  433,  433,  433,
-       98,   98,  439,  438,   96,   98,  445,   98,   98,   96,
-       98,   96,   96,  433,  722,  722,  433,  433,   98,  433,
-      722,   96,  722,   98,   96,   98,   98,   96,  443,  441,
-       96,   96,  722,   96,  442,   98,  444,   96,   98,   96,
-       96,   98,   96,  448,   98,   98,  447,   98,  722,  446,
-      449,   98,  450,   98,   98,  722,   98,   96,  451,   96,
-
-      722,   96,  452,  722,  454,   96,   96,   96,  455,  456,
-       96,   98,   96,   98,  453,   98,  722,  458,   96,   98,
-       98,   98,   96,   96,   98,   96,   98,   96,   96,  457,
-      459,   96,   98,  722,  722,  722,   98,   98,  460,   98,
-       96,   98,   98,   96,  722,   98,  463,  461,  464,  462,
-       96,   96,   96,  467,   98,  722,   96,   98,  465,  469,
-       96,   96,  466,   96,   98,   98,   98,   96,  468,  471,
-       98,  478,  472,   96,   98,   98,   96,   98,   96,   96,
-      470,   98,   96,   96,   96,   96,   96,   98,   96,   96,
-       98,  476,   98,   98,  722,  473,   98,   98,   98,   98,
-
-       98,   96,   98,   98,  475,  474,   96,  722,  479,   96,
-      480,  477,   96,  481,   96,   98,  722,  483,  482,  485,
-       98,  487,  722,   98,  722,  490,   98,  484,   98,  488,
-      491,  722,  722,   96,  489,  722,   96,  722,  486,   96,
-      722,  722,  429,  493,  429,  429,  429,   98,   96,  495,
-       98,  492,  722,   98,  494,  427,  427,  427,  427,  722,
-      429,   96,   98,  429,  429,  722,  429,  722,  722,  348,
-      722,  348,  348,  348,  496,   98,  496,  498,   96,  497,
-      497,  497,  497,  432,  432,  432,  432,  348,  503,  499,
-      348,  348,   98,  348,  432,  432,  432,  432,  433,   96,
-
-      433,  433,  433,   96,   96,  722,  502,   96,  352,  722,
-      352,  352,  352,   98,  722,  722,  433,   98,   98,  433,
-      433,   98,  433,   96,   96,  722,  352,   96,  500,  352,
-      352,   96,  352,   96,   96,  501,   96,   98,   98,  509,
-       96,   98,   96,   96,   96,   98,   96,   98,   98,   96,
-       98,  504,   96,   96,   98,   96,   98,   98,   98,  505,
-       98,  506,   96,   98,   96,   96,   98,   98,   96,   98,
-      512,   96,  722,  507,  508,  511,   98,  513,   98,   98,
-       96,  722,   98,  722,  510,   98,   96,  514,  722,  722,
-      517,  518,  519,  520,   98,  521,   96,  515,  516,   96,
-
-       98,   96,  526,  522,   96,  523,  528,   96,  524,  525,
-       98,   96,  722,   98,   96,   98,   96,  722,   98,   96,
-       96,   98,   96,  527,   96,   98,  529,   96,   98,   96,
-       98,  530,   96,   98,   98,   96,   98,  531,   98,   96,
-       96,   98,  722,   98,   96,   96,   98,   96,   96,   98,
-       96,  533,  722,   98,   98,   96,  532,  534,   98,   98,
-      722,   98,   98,  536,   98,   96,  537,   96,   96,   98,
-       96,   96,   96,  722,  535,  497,  497,  497,  497,   98,
-       96,   98,   98,   96,   98,   98,   98,  541,  538,   96,
-       96,   96,  722,  722,   98,  722,   96,   98,   96,  539,
-
-       96,  540,  722,   98,   98,   98,  542,  543,  544,  547,
-       98,   96,   98,   96,   98,   96,  545,  549,  546,  497,
-      497,  497,  497,  722,   96,   98,   96,   98,  551,   98,
-       96,  548,   96,  429,  550,  429,  429,  429,   98,   96,
-       98,  552,  722,  722,   98,   96,   98,   96,   96,   96,
-       96,  429,  553,   98,  429,  429,  555,  429,  722,   98,
-       96,   98,   98,   98,   98,  554,  557,  722,   96,  556,
-       96,   96,  559,   96,   98,   96,  722,  722,  558,   96,
-       96,  560,   98,  722,   98,   98,   96,   98,   96,   98,
-      561,  564,  562,   98,   98,  722,   96,  563,   96,   96,
-
-       98,  722,   98,   96,   96,  565,   96,   96,   96,  566,
-       98,  568,   98,   98,  570,  567,  571,   98,   98,   96,
-       98,   98,   98,   96,  569,   96,   96,   96,  722,   96,
-       96,   96,   96,   98,   96,  722,   96,   98,  574,   98,
-       98,   98,  575,   98,   98,   98,   98,   96,   98,  572,
-       98,  573,  722,   96,   96,   96,  722,   96,   96,  722,
-      577,   98,  579,  578,   96,  582,  576,   98,   98,   98,
-      583,   98,   98,  584,   96,   96,   96,   96,   98,  580,
-      581,  722,  585,   96,  722,   96,  722,   96,   98,   98,
-       98,   98,   96,   96,   96,  587,  722,   98,  590,   98,
-
-      586,   98,   96,  591,   96,  589,   98,   98,   98,   96,
-      588,  592,  594,  593,   96,   96,   98,   96,   98,  722,
-       96,   96,   96,   98,  722,  595,   96,   96,   98,   98,
-      722,   98,  598,  596,   98,   98,   98,   96,  597,  722,
-       98,   98,  722,   96,  600,  603,   96,   96,   96,  599,
-       96,   98,  722,  605,   96,   96,  601,   98,   96,  722,
-       98,   98,   98,  602,   98,  604,  608,  609,   98,   98,
-       96,   96,   98,  610,   96,  606,  607,   96,   96,   96,
-       96,   96,  722,   96,   98,   98,   96,   96,   98,   96,
-      611,   98,   98,   98,   98,   98,  613,   98,   96,  614,
-
-       98,   98,  612,   98,   96,  722,   96,  616,  722,   96,
-       96,   96,   98,  618,  722,  621,  722,  619,   98,  623,
-       98,   96,  624,   98,   98,   98,   96,  722,  625,  617,
-      615,  620,   96,   96,   96,   98,  622,  722,  722,  626,
-       98,  628,   96,  629,   96,   96,   98,   98,   98,   96,
-       96,  631,  632,  627,  630,   96,   98,   96,   98,   98,
-       96,  722,   96,   98,   98,   96,   96,   96,  642,   98,
-       96,   98,   96,  633,   98,  635,   98,  634,   96,   98,
-       98,   98,  722,  636,   98,   96,   98,   96,   96,  722,
-      637,  638,   98,   96,  722,   96,  639,   96,   96,   98,
-
-       96,   98,   98,  640,   96,   96,   96,   98,  644,   98,
-      722,   98,   98,   96,   98,   96,   96,  643,   98,   98,
-       98,  645,  641,  646,  647,   96,  722,   98,   96,   98,
-       98,   96,  722,   96,   96,   96,   96,   96,  722,   98,
-      650,  649,   98,   96,  722,   98,  652,   98,   98,   98,
-       98,   98,  655,  648,   96,  657,  722,   98,  653,  722,
-       96,  722,   96,  651,   96,   96,  654,  658,   98,   96,
-      659,  662,  663,  664,   98,  656,   98,   96,   98,   98,
-       96,   96,   96,   98,   96,   96,   96,   96,  722,   96,
-       96,   98,   96,   96,   98,   98,   98,   96,   98,   98,
-
-       98,   98,  665,   98,   98,   96,   98,   98,  722,  722,
-      666,   98,  722,   96,   96,   96,  667,   96,  668,   98,
-      676,  669,  674,  670,  672,  677,  675,   98,   98,   98,
-      680,   98,  671,  679,   96,   96,   96,  673,  722,   96,
-       96,  722,  722,   96,   96,  678,   96,   96,   98,   98,
-       98,   96,  681,   98,   98,  682,  683,   98,   98,  722,
-       98,   98,  722,   96,   96,   98,   96,   96,   96,   96,
-      722,   96,   96,  685,   96,   96,  684,   98,   98,  687,
-       98,   98,   98,   98,  686,   98,   98,   96,   98,   98,
-       96,   96,  722,  688,  689,   96,   96,  722,   96,   96,
-
-       96,   98,  722,  692,   98,   98,  690,  691,   96,   98,
-       98,  694,   98,   98,   98,  699,  693,   96,   96,  695,
-       96,   96,   98,  696,   96,  697,   96,  722,  698,  722,
-       96,   98,   98,   96,   98,   98,  702,  704,   98,   96,
-       98,  700,   96,  701,   98,  722,   96,   98,  703,   96,
-       96,  706,   96,   98,  705,   96,   98,  709,   96,  707,
-       98,   96,   96,   98,   98,   96,   98,  712,  722,   98,
-      722,  722,   98,  710,  711,   98,   98,  708,  722,   98,
-      713,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      716,  722,  718,  722,  720,  722,  722,  714,  721,  715,
-
-      722,  722,  722,  722,  722,  717,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  719,   61,   61,   61,   61,
-       61,   61,   61,   61,   68,   68,  722,   68,   68,   68,
-       68,   68,   97,  722,  722,  722,   97,   97,   97,  168,
-      168,  168,  169,  169,  174,  174,  174,  174,  174,  174,
-      174,  174,  259,  259,  263,  263,  263,  264,  264,  661,
-      722,  661,  661,  661,    3,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722
+       98,   96,  273,  720,   98,  720,  720,  720,   96,  258,
+       96,  258,  258,  258,   96,   98,  266,  261,  261,  261,
+      262,  261,   98,  720,   98,  720,  720,  258,   98,  720,
+      258,  258,  720,  258,  267,   96,  261,  261,   96,  261,
+      268,  269,   96,  262,   96,  720,  270,  261,  271,   98,
+      720,  276,   98,   96,   96,   96,   98,   96,   98,  272,
+      274,   96,   96,   96,  275,   96,  720,   98,   98,   98,
+       96,   98,   96,   96,   96,   98,   98,   98,  720,   98,
+
+      277,  720,   96,  720,   98,   96,   98,   98,   98,  281,
+      278,  285,  283,  284,  287,   96,   98,  282,   96,   98,
+       96,  720,  288,  720,  720,  286,  720,  293,  720,   98,
+       96,  296,   98,   96,   98,  289,  720,  290,  294,  291,
+      292,   96,  295,  299,   98,   96,  300,   98,   96,   96,
+      301,   96,  297,   96,   96,   98,  302,   96,   96,   98,
+      298,  303,   98,   98,   96,   98,   96,   98,   98,  720,
+      312,   98,   98,   96,  305,   96,   96,   96,   98,  304,
+       98,   96,  306,  316,   96,  307,  720,   98,  720,   98,
+       98,   98,  720,  720,   96,   98,   96,   96,   98,  311,
+
+      308,  314,  309,   96,   96,  313,  310,  315,   98,   96,
+       98,   98,  720,   96,  720,   96,   96,   98,   98,   96,
+       96,  720,   96,   98,   96,  319,  320,   98,  318,   98,
+       98,   96,  317,   98,   98,  321,   98,   96,   98,  322,
+      720,  720,  720,   96,   96,   98,   96,   96,   96,   96,
+      326,   98,  323,  720,  325,  328,  324,   98,   98,  331,
+       98,   98,   98,   98,  720,   96,  720,  329,  327,  720,
+       96,  720,  334,  720,  720,  330,   96,  332,  333,   98,
+      253,  253,  253,  253,   98,  340,   96,  339,  341,  337,
+       98,   96,  335,   96,  336,  253,  253,  253,  253,  720,
+
+       98,  338,  720,  720,  343,   98,  343,   98,  720,  344,
+      344,  344,  344,  342,  255,  720,  255,  255,  255,  257,
+      257,  257,  257,  720,  354,  720,  720,  257,  257,  257,
+      257,  357,  255,  720,  356,  255,  255,   96,  255,  258,
+      720,  258,  258,  258,  345,  355,  346,  346,  346,  347,
+       96,   98,  720,   96,  720,   96,   96,  258,  720,  720,
+      258,  258,  345,  258,   98,  346,  346,   98,  346,   98,
+       98,  720,  347,  348,  348,  348,  348,  261,  261,  261,
+       96,  261,  360,  348,  348,  348,  348,  349,  720,  350,
+      350,  350,  351,  368,   98,  720,  261,  261,  374,  261,
+
+      348,  348,  348,  348,  348,  349,  362,  261,  350,  350,
+      359,  350,  352,   96,  352,  351,   96,  353,  353,  353,
+      353,   96,   96,   96,   96,   96,   96,   98,   96,  358,
+       98,   96,   96,   96,   96,   98,   98,   98,   98,   98,
+       98,  720,   98,   96,   96,   98,   98,   98,   98,  720,
+       96,   96,   96,   96,  361,  363,  720,   98,   98,  720,
+       96,   96,  720,  369,   98,   98,   98,   98,   96,   96,
+      365,  375,  373,  372,   98,   98,  364,  366,  367,  370,
+      371,   96,   98,   98,  376,  720,   96,  720,   96,   96,
+      377,  720,   96,  720,  720,   98,   96,   96,  380,  381,
+
+       98,  382,   98,   98,   96,  378,   98,  379,  383,   96,
+       98,   98,   96,   96,   96,   96,   96,   96,   98,  384,
+       96,   96,  720,   98,   96,  385,   98,   98,   98,   98,
+       98,   98,  397,   96,   98,   98,  386,   96,   98,   96,
+       96,  389,  720,  387,  390,   96,   96,   98,  388,   96,
+       96,   98,   96,   98,   98,  720,  395,   96,   96,   98,
+       98,   96,  391,   98,   98,   96,   98,  396,  393,  394,
+      392,   98,   98,  720,   96,   98,  398,  400,   96,   98,
+      401,   96,   96,   96,   96,  720,  720,  399,   98,  720,
+      402,  720,   98,  720,   96,   98,   98,   98,   98,  408,
+
+      403,   96,  720,  405,   96,  406,  410,  404,   98,  720,
+       96,  411,  407,   96,   96,   98,  409,   96,   98,   96,
+      413,   96,  415,  416,   98,  720,  720,   98,   98,  720,
+      414,   98,  720,   98,  417,   98,  412,  344,  344,  344,
+      344,  720,  344,  344,  344,  344,  346,   96,  346,  346,
+      346,   96,   96,  419,  418,  720,  353,  353,  353,  353,
+      720,   98,  423,  422,  346,   98,   98,  346,  346,  420,
+      346,  720,  421,  720,  424,   96,  424,  720,  720,  425,
+      425,  425,  425,  426,   96,  427,  427,  427,  428,   98,
+      720,  350,   96,  350,  350,  350,   96,  433,   98,  432,
+
+      720,  426,  720,   96,  427,  427,   98,  427,  720,  350,
+       98,  428,  350,  350,  429,  350,  429,   98,  434,  430,
+      430,  430,  430,  353,  353,  353,  353,  720,  435,   96,
+       96,   96,  437,   96,   96,  720,   96,  431,   96,  431,
+      431,  431,  438,   98,   98,   98,  443,   98,   98,  436,
+       98,   96,   98,   96,   96,  431,   96,   96,  431,  431,
+       96,  431,   96,   96,  720,   98,   96,   98,   98,  720,
+       98,   98,  441,   96,   98,   96,   98,   98,  440,  442,
+       98,  720,   96,  439,   96,  720,   96,   98,  445,   98,
+      446,  444,   96,  449,  447,  448,   98,   96,   98,  452,
+
+       98,  453,   96,   96,   96,   96,   98,  450,   96,  454,
+      451,   98,   96,   96,   96,   96,   98,   98,   98,   98,
+      720,  456,   98,   96,   96,   96,   98,   98,   98,   98,
+      720,  720,  455,  458,  457,   96,  720,   98,   98,   98,
+       96,   96,  720,   96,  461,  459,  462,   96,   96,   98,
+      460,  467,  720,  465,   98,   98,  463,   98,   96,   96,
+      464,   98,   98,  466,  720,   96,  469,   96,   96,  476,
+       96,   96,   98,   98,   96,   96,  470,   96,  468,   98,
+       96,   98,   98,   96,   98,   98,  720,  474,   98,   98,
+       96,   98,   96,  471,   98,   96,  720,   98,  472,  720,
+
+      473,   96,   96,  720,   98,   96,   98,  720,  720,   98,
+      477,  479,  480,  475,  481,   98,   98,  478,  720,   98,
+      483,   96,  482,   96,  486,   96,  720,  485,  720,  720,
+      720,  488,  484,  720,  720,   98,  489,   98,  720,   98,
+      487,  720,  491,  425,  425,  425,  425,  430,  430,  430,
+      430,   96,  490,  427,  720,  427,  427,  427,   96,   96,
+      493,  720,  720,  720,   96,   98,  492,  425,  425,  425,
+      425,  427,   98,   98,  427,  427,   96,  427,   98,  720,
+      720,  346,   96,  346,  346,  346,  494,  720,  494,  720,
+       98,  495,  495,  495,  495,  510,   98,  720,  720,  346,
+
+      496,  497,  346,  346,  720,  346,  430,  430,  430,  430,
+      431,   96,  431,  431,  431,   96,   96,  720,  499,  501,
+      350,   96,  350,  350,  350,   98,  498,  720,  431,   98,
+       98,  431,  431,   96,  431,   98,   96,   96,  350,   96,
+       96,  350,  350,   96,  350,   96,   96,   98,   96,  507,
+       98,   98,   96,   98,   98,   96,  500,   98,   96,   98,
+       98,  720,   98,  502,   96,   96,   98,  720,   96,   98,
+       96,  503,   98,   96,   96,  504,   96,   96,   98,   98,
+      511,  509,   98,  505,   98,   96,  506,   98,   98,  720,
+       98,   98,  508,  515,   96,   96,  512,   96,   96,   98,
+
+       96,  513,  514,  516,  517,  518,  720,  519,   98,   98,
+      524,   98,   98,   96,   98,  520,   96,  521,  526,   96,
+      522,   96,  523,   96,   96,   96,   96,   98,   96,  527,
+       98,  720,  525,   98,   96,   98,   96,   98,   98,   98,
+       98,  720,   98,   96,  720,  528,  529,   96,   98,   96,
+       98,   96,   96,  720,   96,  530,   96,   98,  531,  720,
+       96,   98,   96,   98,  532,   98,   98,  534,   98,   96,
+       98,   96,   96,  535,   98,   96,   98,   96,   96,  533,
+      720,  720,  720,   98,   96,   98,   98,   96,   96,   98,
+       96,   98,   98,  495,  495,  495,  495,   96,   98,  536,
+
+      720,   98,   98,   96,   98,   96,  539,  537,   96,  720,
+      538,   98,  542,  540,  541,  720,  545,   98,   96,   98,
+       96,  547,   98,  543,   96,  544,  495,  495,  495,  495,
+      720,   96,   98,   96,   98,  549,   96,   96,   98,  548,
+      427,   96,  427,  427,  427,   98,  546,   98,  550,   96,
+       98,   98,   96,   96,   96,   98,  720,   96,  427,   96,
+      720,  427,  427,   98,  427,  553,   98,   98,   98,   96,
+      551,   98,   96,   98,  552,   96,  555,  720,  554,   96,
+       96,  557,   96,   98,  720,  556,   98,   96,   96,   98,
+       96,  558,  720,   98,   98,   96,   98,  559,  560,   96,
+
+      562,   98,   98,  720,   98,  561,  563,  720,   96,   98,
+      564,   96,  720,   98,   96,   96,   96,  565,  720,   96,
+       96,  568,   98,  569,   96,   98,  566,   96,   98,   98,
+       98,   96,  567,   98,   98,   96,  720,   96,   98,  720,
+       96,   98,   96,   96,   96,   98,   96,  720,   96,   98,
+      572,   98,  570,  573,   98,   96,   98,   98,   98,   96,
+       98,  571,   98,   96,  720,   96,  577,   96,  720,   98,
+       96,  720,  575,   98,   96,  576,  574,   98,  580,   98,
+       96,   98,  581,   96,   98,  578,   96,  582,   98,  579,
+       96,   96,  583,   96,   98,   96,  720,   98,  720,   96,
+
+       98,  585,  720,   96,   98,   98,   96,   98,  584,   98,
+      590,  588,  589,   98,   96,  587,  592,   98,   96,  586,
+       98,   96,  591,   96,   96,   96,   96,  720,   98,   96,
+       96,   96,   98,   96,  593,   98,   96,   98,   98,   98,
+       98,  594,  596,   98,   98,   98,  595,   98,  720,   96,
+       98,   96,   96,   96,  720,  720,  598,  601,   96,   96,
+      720,  597,  603,   98,   96,   98,   98,   98,  599,  608,
+      720,  607,   98,   98,  602,  606,   96,  600,   98,   96,
+      604,  720,   96,   96,  605,   96,   96,   96,   96,   96,
+       98,   96,   96,   98,   96,  609,   98,   98,   96,   98,
+
+       98,   98,   98,   98,  611,   98,   98,  610,   98,  720,
+       96,  720,   98,  720,  720,   96,   96,  612,  614,   96,
+       96,  616,   96,  619,   98,  617,  720,  621,  622,   98,
+       98,   96,   96,   98,   98,  623,   98,   96,  615,  613,
+      618,   96,   96,  620,   96,   98,   98,  720,  624,  720,
+      720,   98,  626,  627,   96,   98,   98,   96,   98,   96,
+       96,  629,   96,  630,  628,  625,   96,   96,   98,  720,
+       96,   98,   96,   98,   98,   96,   98,  640,   96,  720,
+       98,   98,   96,  631,   98,  633,   98,  720,  632,   98,
+       96,   96,   98,  634,   96,   96,   98,  720,   96,   96,
+
+       96,  636,  635,  637,   98,   98,   96,   96,   98,   98,
+       96,  638,   98,   98,   98,  720,  720,  720,   96,   96,
+       98,   98,   96,   96,   98,   96,  642,   96,  641,  639,
+      643,  644,   98,   98,  645,   96,   98,   98,   96,   98,
+       96,   98,   96,   96,  720,   96,  720,   96,  720,   98,
+      647,   96,   98,   96,   98,  720,   98,   98,  648,   98,
+      650,   98,  646,  720,  653,   98,  720,   98,   96,  649,
+       96,   96,   96,  720,  651,  654,  652,  655,  656,   96,
+      657,  660,   98,  661,   98,   98,   98,  662,   96,   96,
+       96,   96,   96,   98,   96,   96,   96,   96,   96,   96,
+
+       96,   96,   98,   98,   98,   98,   98,   96,   98,   98,
+       98,   98,   98,   98,   98,   98,  663,  720,  720,  720,
+      664,   98,   96,   96,  665,   96,   96,  720,   96,  667,
+      674,  672,  666,  675,  670,  673,   98,   98,  678,   98,
+       98,  677,   98,  668,   96,  669,   96,  671,  720,   96,
+       96,   96,  720,   96,  676,   96,   96,   96,   98,   96,
+       98,   96,  679,   98,   98,   98,  681,   98,   96,   98,
+       98,   98,  680,   98,   96,   98,   96,   96,   96,   96,
+       96,   96,   98,  720,   96,   96,  683,  682,   98,  685,
+       98,   98,   98,   98,   98,   98,   96,  684,   98,   98,
+
+       96,   96,  689,   96,  686,  687,   96,  720,   96,   96,
+       98,   96,   96,  690,   98,   98,  688,   98,  720,  692,
+       98,  691,   98,   98,   96,   98,   98,  697,  693,   96,
+      720,  695,  694,   96,  696,  720,   96,   96,   98,  698,
+      720,   96,   96,   98,  702,  700,  720,   98,  720,  699,
+       98,   98,   96,   96,  701,   98,   98,   96,  720,   96,
+      704,   96,  705,  703,  720,   96,   98,   98,  707,  720,
+       96,   98,  706,   98,   96,   98,   96,   96,  710,   98,
+       96,  720,  720,  711,   98,  708,  709,  720,   98,  720,
+       98,   98,  720,  720,   98,  720,  720,  720,  720,  720,
+
+      714,  720,  720,  720,  720,  716,  720,  720,  712,  720,
+      713,  720,  718,  719,  720,  720,  715,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      717,   61,   61,   61,   61,   61,   61,   61,   61,   68,
+       68,  720,   68,   68,   68,   68,   68,   97,  720,  720,
+      720,   97,   97,   97,  168,  168,  168,  169,  169,  174,
+      174,  174,  174,  174,  174,  174,  174,  259,  259,  659,
+      720,  659,  659,  659,    3,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720
     } ;
 
-static yyconst short int yy_chk[2642] =
+static yyconst short int yy_chk[2652] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -888,10 +886,10 @@ static yyconst short int yy_chk[2642] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,   10,   13,   13,   14,
-       19,  661,   22,   21,   22,   22,   22,   22,   30,   30,
+       19,  659,   22,   21,   22,   22,   22,   22,   30,   30,
        23,   32,   19,   21,   21,   23,   14,   40,   33,   25,
 
-       25,   25,   25,   23,   26,   32,   28,   61,   26,  642,
+       25,   25,   25,   23,   26,   32,   28,   61,   26,  640,
       176,   40,   33,   10,   24,   57,   24,   24,   24,   24,
        25,   28,   34,   28,   28,   39,   34,   34,  101,   24,
        98,   47,   24,   24,   24,   96,   24,   24,   95,   39,
@@ -925,11 +923,11 @@ static yyconst short int yy_chk[2642] =
        82,    0,  120,  125,   82,   82,  124,   82,  126,  127,
 
       128,  129,  130,  131,  135,   82,  106,    0,  137,  141,
-      132,  134,    0,  179,  128,  129,  130,  131,  135,  133,
-      106,  136,  137,  141,  132,  134,  138,  179,  123,  122,
+      132,  134,    0,  169,  128,  129,  130,  131,  135,  133,
+      106,  136,  137,  141,  132,  134,  138,  169,  123,  122,
         0,    0,    0,  133,  139,  136,  127,  126,  124,    0,
       138,  140,    0,  106,  106,  106,  106,  106,  139,    0,
-      179,  106,    0,  128,  135,  140,  129,  130,  133,  106,
+        0,  106,    0,  128,  135,  140,  129,  130,  133,  106,
       106,  106,  132,  106,  141,  134,  137,  133,  142,  143,
       136,  138,  139,  144,  133,  146,  145,  138,  147,  148,
       150,    0,  142,  143,  140,  149,  151,  144,  152,  146,
@@ -943,234 +941,235 @@ static yyconst short int yy_chk[2642] =
       159,  160,  153,  160,  160,  160,  162,  173,  162,  177,
       178,  162,  162,  162,  162,    0,  164,  164,  164,  160,
       164,  188,  160,  160,  178,  160,  161,  161,  161,  161,
-      163,  202,  163,  163,  163,  164,  164,  188,  164,  161,
-      161,  173,  161,  161,  161,  202,  164,    0,  163,  181,
+      163,  183,  163,  163,  163,  164,  164,  188,  164,  161,
+      161,  173,  161,  161,  161,  183,  164,    0,  163,  179,
 
         0,  163,  163,    0,  163,    0,  180,  161,  161,  178,
-      190,  161,  161,  181,  161,  166,  166,  166,  166,  168,
-      180,  184,  182,    0,  190,    0,  202,    0,  183,  166,
-      186,  166,  166,  166,  185,  184,  182,  168,  168,  168,
-      168,  168,  183,    0,  186,    0,    0,  166,  185,    0,
-      166,  166,  187,  166,  180,  181,  168,  168,  189,  168,
-      180,  180,  182,  168,  191,  190,  187,  168,  192,  183,
-        0,  186,  189,  182,  193,  195,  196,  197,  191,  198,
-      184,  199,  192,    0,  185,  200,  201,  203,  193,  195,
-      196,  197,  204,  198,    0,  199,    0,  187,    0,  200,
-
-      201,  203,  206,  207,    0,  205,  204,  187,  192,  189,
-      193,  208,  191,  196,  209,    0,  206,  207,  197,  205,
-      210,    0,  211,  201,  212,  208,  195,  213,  209,  204,
-        0,  215,  198,  216,  210,  199,  211,  203,  212,  200,
-      200,  213,  205,  206,  207,  215,  217,  216,  207,  208,
-      205,    0,  218,  219,  221,  209,    0,  220,  222,  223,
-      217,    0,  225,  211,  213,  212,  218,  219,  221,  210,
-      220,  220,  222,  223,  226,  224,  225,  227,  228,  229,
-      230,    0,  231,    0,  216,  224,    0,    0,  226,  224,
-      232,  227,  228,  229,  230,  221,  231,  217,  219,  233,
-
-      223,  222,  235,  234,  232,  218,    0,  236,  237,    0,
-      240,    0,    0,  233,  238,  239,  235,  234,  241,  225,
-      229,  236,  237,  228,  240,  227,  226,  242,  238,  239,
-      244,  243,  241,    0,  246,  230,  245,  247,  231,    0,
-      248,  242,  251,  235,  244,  243,  249,  237,  246,  240,
-      245,  247,  233,  234,  248,  250,  251,    0,    0,    0,
-      249,    0,  236,    0,  264,    0,  238,    0,  265,  250,
-      266,  239,  243,  241,  252,  252,  252,  252,  264,  246,
-      248,  242,  265,  249,  266,  244,  268,  245,  267,  275,
-      251,    0,  247,    0,  250,  253,  253,  253,  253,  254,
-
-      268,  254,  267,  275,  254,  254,  254,  254,  253,  255,
-      271,  255,  255,  255,  256,  256,  256,  256,  266,  257,
-      257,  257,  257,    0,  271,    0,  253,  255,  275,  268,
-      255,  255,  257,  255,  258,  281,  258,  258,  258,  259,
-      267,  259,  259,  259,  259,  269,    0,    0,  272,  281,
-      257,    0,  258,    0,    0,  258,  258,  259,  258,  269,
-      259,  259,  272,  259,    0,  271,    0,  259,  260,  260,
-      260,  260,  261,  261,  261,  270,  261,    0,  260,  260,
-      260,  260,  260,    0,  260,  260,  260,  260,  281,  270,
-      269,  261,  261,  272,  261,  260,  260,  260,  260,  260,
-
-      260,    0,  261,  260,  260,  273,  260,  262,  274,  262,
-      260,  276,  262,  262,  262,  262,  277,  279,  278,  273,
-      283,  280,  274,  282,  270,  276,  284,  287,  285,  288,
-      277,  279,  278,  289,  283,  280,  290,  282,  286,  291,
-      284,  287,  285,  288,    0,  292,  273,  289,  293,  294,
-      290,  295,  286,  291,    0,  296,    0,    0,  274,  292,
-      279,  280,  293,  294,  277,  295,  276,  284,  283,  296,
-      297,  277,  278,  285,  298,  282,  299,  286,  287,  300,
-      289,  301,    0,  302,  297,    0,  303,  305,  298,  295,
-      299,  304,  306,  300,  294,  301,  296,  302,    0,  292,
-
-      303,  305,  307,  293,  308,  304,  306,  310,  309,  312,
-      297,  311,  298,  315,  314,    0,  307,  313,  308,  316,
-      317,  310,  309,  312,  318,  311,  314,  315,  314,  300,
-      320,  313,  299,  316,  317,  303,  301,  321,  318,  304,
-      319,    0,  302,  322,  320,  323,  324,  325,    0,    0,
-      312,  321,  326,    0,  319,  307,  329,  322,  328,  323,
-      324,  325,  308,  309,  311,  327,  326,  313,  315,  331,
-      329,  320,  328,  330,  317,  332,  333,  319,  334,  327,
-      335,  336,  321,  331,  337,    0,    0,  330,  338,  332,
-      333,  339,  334,    0,  335,  336,    0,  322,  337,  324,
-
-      325,  329,  338,  323,  340,  339,  327,  326,  341,  328,
-      330,  342,  343,    0,  332,  356,  344,  334,  340,  335,
-        0,  336,  341,  360,  333,  342,  343,  331,    0,  356,
-      344,    0,    0,    0,  339,    0,  363,  360,  338,  345,
-      345,  345,  345,    0,    0,  346,  346,  346,  346,  348,
-      363,  348,  348,  348,    0,  358,  343,  344,  346,  360,
-      340,  354,  354,  354,  354,    0,  342,  348,  357,  358,
-      348,  348,  349,  348,  349,  363,  346,  349,  349,  349,
-      349,  350,  357,  350,  350,  350,  350,  359,    0,  352,
-      361,  352,  352,  352,  362,  426,  426,  426,  426,  350,
-
-      358,  359,  350,  350,  361,  350,    0,  352,  362,  350,
-      352,  352,  353,  352,  353,  364,  357,  353,  353,  353,
-      353,  355,  355,  355,  355,    0,  365,  366,    0,  364,
-      359,  367,    0,  368,  369,  355,  370,  355,  355,  355,
-      365,  366,  362,  361,  371,  367,  368,  368,  369,  372,
-      370,  373,  375,  355,    0,    0,  355,  355,  371,  355,
-        0,  374,    0,  372,  376,  373,  375,  377,  366,  364,
-      378,  379,    0,  380,  365,  374,  367,  381,  376,  382,
-      383,  377,  384,  371,  378,  379,  370,  380,    0,  369,
-      372,  381,  373,  382,  383,    0,  384,  385,  374,  386,
-
-        0,  387,  375,    0,  377,  388,  390,  389,  378,  380,
-      391,  385,  392,  386,  376,  387,    0,  383,  393,  388,
-      390,  389,  394,  395,  391,  396,  392,  397,  399,  382,
-      384,  398,  393,    0,    0,    0,  394,  395,  385,  396,
-      400,  397,  399,  401,    0,  398,  388,  386,  389,  387,
-      402,  403,  404,  392,  400,    0,  405,  401,  390,  394,
-      408,  406,  391,  407,  402,  403,  404,  409,  393,  397,
-      405,  406,  398,  410,  408,  406,  411,  407,  412,  413,
-      396,  409,  414,  415,  416,  417,  418,  410,  420,  419,
-      411,  404,  412,  413,    0,  401,  414,  415,  416,  417,
-
-      418,  421,  420,  419,  403,  402,  422,    0,  407,  423,
-      408,  405,  424,  410,  425,  421,    0,  412,  411,  414,
-      422,  416,    0,  423,    0,  419,  424,  413,  425,  417,
-      419,    0,    0,  439,  418,    0,  434,    0,  415,  435,
-        0,    0,  429,  422,  429,  429,  429,  439,  463,  424,
-      434,  421,    0,  435,  423,  427,  427,  427,  427,    0,
-      429,  438,  463,  429,  429,    0,  429,    0,    0,  427,
-        0,  427,  427,  427,  430,  438,  430,  434,  436,  430,
-      430,  430,  430,  431,  431,  431,  431,  427,  439,  435,
-      427,  427,  436,  427,  432,  432,  432,  432,  433,  437,
-
-      433,  433,  433,  440,  441,    0,  438,  442,  432,    0,
-      432,  432,  432,  437,    0,    0,  433,  440,  441,  433,
-      433,  442,  433,  443,  444,    0,  432,  445,  436,  432,
-      432,  446,  432,  448,  447,  437,  450,  443,  444,  445,
-      449,  445,  451,  454,  452,  446,  455,  448,  447,  453,
-      450,  440,  457,  456,  449,  458,  451,  454,  452,  441,
-      455,  442,  459,  453,  460,  461,  457,  456,  464,  458,
-      448,  462,    0,  443,  444,  447,  459,  449,  460,  461,
-      465,    0,  464,    0,  446,  462,  466,  450,    0,    0,
-      453,  454,  455,  456,  465,  456,  467,  451,  452,  468,
-
-      466,  469,  459,  456,  470,  456,  461,  471,  457,  458,
-      467,  472,    0,  468,  473,  469,  474,    0,  470,  475,
-      476,  471,  477,  460,  478,  472,  462,  479,  473,  480,
-      474,  465,  481,  475,  476,  482,  477,  466,  478,  483,
-      484,  479,    0,  480,  485,  486,  481,  487,  488,  482,
-      489,  473,    0,  483,  484,  490,  469,  474,  485,  486,
-        0,  487,  488,  477,  489,  491,  479,  492,  493,  490,
-      494,  495,  498,    0,  475,  496,  496,  496,  496,  491,
-      499,  492,  493,  500,  494,  495,  498,  489,  484,  501,
-      502,  504,    0,    0,  499,    0,  503,  500,  505,  485,
-
-      506,  487,    0,  501,  502,  504,  490,  491,  492,  495,
-      503,  507,  505,  509,  506,  508,  493,  499,  494,  497,
-      497,  497,  497,    0,  510,  507,  511,  509,  502,  508,
-      512,  498,  513,  497,  500,  497,  497,  497,  510,  514,
-      511,  503,    0,    0,  512,  515,  513,  516,  517,  518,
-      519,  497,  506,  514,  497,  497,  508,  497,    0,  515,
-      522,  516,  517,  518,  519,  507,  511,    0,  520,  510,
-      521,  523,  513,  524,  522,  525,    0,    0,  512,  526,
-      527,  514,  520,    0,  521,  523,  528,  524,  529,  525,
-      515,  519,  516,  526,  527,    0,  530,  518,  531,  532,
-
-      528,    0,  529,  533,  534,  520,  535,  536,  537,  520,
-      530,  522,  531,  532,  524,  521,  525,  533,  534,  538,
-      535,  536,  537,  539,  523,  540,  541,  542,    0,  543,
-      544,  545,  546,  538,  547,    0,  548,  539,  532,  540,
-      541,  542,  533,  543,  544,  545,  546,  549,  547,  530,
-      548,  531,    0,  550,  551,  552,    0,  553,  554,    0,
-      536,  549,  539,  537,  559,  542,  535,  550,  551,  552,
-      544,  553,  554,  546,  556,  555,  557,  558,  559,  540,
-      541,    0,  547,  560,    0,  561,    0,  562,  556,  555,
-      557,  558,  563,  564,  565,  550,    0,  560,  553,  561,
-
-      549,  562,  566,  554,  567,  552,  563,  564,  565,  568,
-      551,  555,  557,  556,  569,  570,  566,  571,  567,    0,
-      572,  573,  574,  568,    0,  558,  575,  577,  569,  570,
-        0,  571,  564,  561,  572,  573,  574,  576,  562,    0,
-      575,  577,    0,  578,  566,  568,  579,  580,  581,  565,
-      582,  576,    0,  571,  583,  584,  566,  578,  585,    0,
-      579,  580,  581,  567,  582,  569,  574,  575,  583,  584,
-      586,  587,  585,  576,  588,  572,  573,  589,  590,  592,
-      591,  593,    0,  594,  586,  587,  595,  596,  588,  597,
-      579,  589,  590,  592,  591,  593,  582,  594,  598,  585,
-
-      595,  596,  581,  597,  599,    0,  600,  587,    0,  601,
-      602,  603,  598,  589,    0,  592,    0,  590,  599,  594,
-      600,  604,  595,  601,  602,  603,  605,    0,  596,  588,
-      586,  591,  606,  607,  608,  604,  593,    0,    0,  597,
-      605,  599,  609,  600,  610,  611,  606,  607,  608,  612,
-      613,  602,  603,  598,  601,  614,  609,  615,  610,  611,
-      616,    0,  617,  612,  613,  618,  619,  620,  619,  614,
-      621,  615,  622,  604,  616,  608,  617,  605,  623,  618,
-      619,  620,    0,  610,  621,  624,  622,  625,  626,    0,
-      611,  613,  623,  627,    0,  628,  616,  629,  630,  624,
-
-      631,  625,  626,  617,  632,  633,  634,  627,  622,  628,
-        0,  629,  630,  635,  631,  636,  638,  620,  632,  633,
-      634,  624,  618,  625,  626,  637,    0,  635,  639,  636,
-      638,  640,    0,  641,  645,  643,  644,  646,    0,  637,
-      631,  630,  639,  647,    0,  640,  633,  641,  645,  643,
-      644,  646,  636,  629,  648,  638,    0,  647,  634,    0,
-      649,    0,  650,  632,  651,  652,  635,  640,  648,  654,
-      641,  643,  644,  646,  649,  637,  650,  655,  651,  652,
-      653,  656,  657,  654,  659,  663,  658,  664,    0,  662,
-      665,  655,  666,  667,  653,  656,  657,  668,  659,  663,
-
-      658,  664,  648,  662,  665,  669,  666,  667,    0,    0,
-      649,  668,    0,  670,  672,  671,  651,  673,  652,  669,
-      659,  653,  658,  654,  656,  662,  658,  670,  672,  671,
-      667,  673,  655,  666,  674,  675,  676,  657,    0,  677,
-      679,    0,    0,  678,  680,  665,  681,  682,  674,  675,
-      676,  684,  668,  677,  679,  669,  671,  678,  680,    0,
-      681,  682,    0,  685,  683,  684,  686,  687,  688,  689,
-        0,  690,  693,  676,  691,  692,  675,  685,  683,  678,
-      686,  687,  688,  689,  676,  690,  693,  694,  691,  692,
-      695,  696,    0,  679,  680,  697,  698,    0,  699,  700,
-
-      701,  694,    0,  684,  695,  696,  681,  683,  702,  697,
-      698,  686,  699,  700,  701,  693,  685,  703,  704,  687,
-      705,  706,  702,  689,  707,  691,  708,    0,  692,    0,
-      709,  703,  704,  711,  705,  706,  696,  698,  707,  710,
-      708,  694,  712,  695,  709,    0,  713,  711,  697,  714,
-      715,  701,  716,  710,  700,  717,  712,  704,  718,  702,
-      713,  719,  720,  714,  715,  721,  716,  709,    0,  717,
-        0,    0,  718,  706,  707,  719,  720,  703,    0,  721,
-      710,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      714,    0,  716,    0,  718,    0,    0,  712,  720,  713,
-
-        0,    0,    0,    0,    0,  715,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  717,  723,  723,  723,  723,
-      723,  723,  723,  723,  724,  724,    0,  724,  724,  724,
-      724,  724,  725,    0,    0,    0,  725,  725,  725,  726,
-      726,  726,  727,  727,  728,  728,  728,  728,  728,  728,
-      728,  728,  729,  729,  730,  730,  730,  731,  731,  732,
-        0,  732,  732,  732,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722
+      181,  161,  161,  179,  161,  166,  166,  166,  166,  168,
+      180,  184,  183,    0,  181,    0,    0,    0,  182,  166,
+      186,  166,  166,  166,  185,  184,  179,  168,  168,  168,
+      168,  168,  182,    0,  186,    0,    0,  166,  185,    0,
+      166,  166,    0,  166,  180,  187,  168,  168,  189,  168,
+      180,  180,  190,  168,  191,    0,  181,  168,  182,  187,
+        0,  186,  189,  192,  195,  193,  190,  196,  191,  182,
+      184,  197,  198,  199,  185,  200,    0,  192,  195,  193,
+      201,  196,  203,  202,  204,  197,  198,  199,    0,  200,
+
+      187,    0,  206,    0,  201,  207,  203,  202,  204,  189,
+      187,  193,  191,  192,  196,  205,  206,  190,  208,  207,
+      209,    0,  197,    0,    0,  195,    0,  201,    0,  205,
+      210,  204,  208,  211,  209,  198,    0,  199,  202,  200,
+      200,  212,  203,  206,  210,  215,  207,  211,  213,  216,
+      207,  217,  205,  218,  219,  212,  208,  220,  222,  215,
+      205,  209,  213,  216,  221,  217,  223,  218,  219,    0,
+      220,  220,  222,  224,  211,  225,  226,  227,  221,  210,
+      223,  228,  212,  224,  230,  213,    0,  224,    0,  225,
+      226,  227,    0,    0,  229,  228,  231,  232,  230,  219,
+
+      216,  222,  217,  233,  234,  221,  218,  223,  229,  235,
+      231,  232,    0,  236,    0,  238,  237,  233,  234,  239,
+      240,    0,  241,  235,  242,  227,  228,  236,  226,  238,
+      237,  243,  225,  239,  240,  229,  241,  244,  242,  230,
+        0,    0,    0,  245,  246,  243,  247,  248,  249,  250,
+      235,  244,  231,    0,  234,  237,  233,  245,  246,  240,
+      247,  248,  249,  250,    0,  251,    0,  238,  236,    0,
+      263,    0,  243,    0,    0,  239,  264,  241,  242,  251,
+      252,  252,  252,  252,  263,  249,  267,  248,  250,  246,
+      264,  266,  244,  265,  245,  253,  253,  253,  253,    0,
+
+      267,  247,    0,    0,  254,  266,  254,  265,  253,  254,
+      254,  254,  254,  251,  255,    0,  255,  255,  255,  256,
+      256,  256,  256,    0,  264,    0,  253,  257,  257,  257,
+      257,  267,  255,    0,  266,  255,  255,  270,  255,  258,
+      257,  258,  258,  258,  259,  265,  259,  259,  259,  259,
+      277,  270,    0,  283,    0,  269,  272,  258,  257,    0,
+      258,  258,  259,  258,  277,  259,  259,  283,  259,  269,
+      272,    0,  259,  260,  260,  260,  260,  261,  261,  261,
+      268,  261,  270,  260,  260,  260,  260,  260,    0,  260,
+      260,  260,  260,  277,  268,    0,  261,  261,  283,  261,
+
+      260,  260,  260,  260,  260,  260,  272,  261,  260,  260,
+      269,  260,  262,  271,  262,  260,  273,  262,  262,  262,
+      262,  274,  275,  278,  276,  281,  279,  271,  280,  268,
+      273,  282,  284,  285,  286,  274,  275,  278,  276,  281,
+      279,    0,  280,  287,  288,  282,  284,  285,  286,    0,
+      289,  290,  291,  292,  271,  273,    0,  287,  288,    0,
+      294,  293,    0,  278,  289,  290,  291,  292,  295,  297,
+      275,  284,  282,  281,  294,  293,  274,  275,  276,  279,
+      280,  296,  295,  297,  285,    0,  298,    0,  299,  300,
+      287,    0,  301,    0,    0,  296,  302,  303,  292,  293,
+
+      298,  294,  299,  300,  304,  290,  301,  291,  295,  305,
+      302,  303,  306,  307,  308,  310,  309,  311,  304,  296,
+      312,  313,    0,  305,  314,  297,  306,  307,  308,  310,
+      309,  311,  312,  315,  312,  313,  298,  316,  314,  318,
+      317,  301,    0,  299,  302,  319,  320,  315,  300,  321,
+      322,  316,  323,  318,  317,    0,  310,  324,  325,  319,
+      320,  327,  305,  321,  322,  326,  323,  311,  307,  309,
+      306,  324,  325,    0,  328,  327,  313,  317,  329,  326,
+      318,  330,  331,  332,  333,    0,    0,  315,  328,    0,
+      319,    0,  329,    0,  334,  330,  331,  332,  333,  325,
+
+      320,  335,    0,  322,  336,  323,  327,  321,  334,    0,
+      337,  328,  324,  338,  339,  335,  326,  340,  336,  341,
+      330,  342,  332,  333,  337,    0,    0,  338,  339,    0,
+      331,  340,    0,  341,  334,  342,  329,  343,  343,  343,
+      343,    0,  344,  344,  344,  344,  346,  354,  346,  346,
+      346,  355,  356,  337,  336,  344,  352,  352,  352,  352,
+        0,  354,  342,  341,  346,  355,  356,  346,  346,  338,
+      346,    0,  340,  344,  347,  357,  347,    0,    0,  347,
+      347,  347,  347,  348,  360,  348,  348,  348,  348,  357,
+        0,  350,  358,  350,  350,  350,  359,  356,  360,  355,
+
+        0,  348,    0,  361,  348,  348,  358,  348,    0,  350,
+      359,  348,  350,  350,  351,  350,  351,  361,  357,  351,
+      351,  351,  351,  353,  353,  353,  353,    0,  358,  362,
+      363,  364,  360,  366,  365,    0,  367,  353,  368,  353,
+      353,  353,  361,  362,  363,  364,  366,  366,  365,  359,
+      367,  369,  368,  370,  371,  353,  372,  373,  353,  353,
+      374,  353,  375,  376,    0,  369,  377,  370,  371,    0,
+      372,  373,  364,  378,  374,  379,  375,  376,  363,  365,
+      377,    0,  380,  362,  381,    0,  382,  378,  368,  379,
+      369,  367,  383,  372,  370,  371,  380,  384,  381,  375,
+
+      382,  376,  385,  386,  388,  387,  383,  373,  389,  378,
+      374,  384,  390,  391,  392,  393,  385,  386,  388,  387,
+        0,  381,  389,  394,  395,  397,  390,  391,  392,  393,
+        0,    0,  380,  383,  382,  396,    0,  394,  395,  397,
+      398,  399,    0,  400,  386,  384,  387,  401,  402,  396,
+      385,  392,    0,  390,  398,  399,  388,  400,  403,  404,
+      389,  401,  402,  391,    0,  405,  395,  406,  407,  404,
+      409,  408,  403,  404,  411,  410,  396,  413,  394,  405,
+      415,  406,  407,  412,  409,  408,    0,  402,  411,  410,
+      414,  413,  416,  399,  415,  417,    0,  412,  400,    0,
+
+      401,  418,  419,    0,  414,  420,  416,    0,    0,  417,
+      405,  408,  409,  403,  410,  418,  419,  406,    0,  420,
+      412,  421,  411,  422,  415,  423,    0,  414,    0,    0,
+        0,  417,  413,    0,    0,  421,  417,  422,    0,  423,
+      416,    0,  420,  424,  424,  424,  424,  429,  429,  429,
+      429,  433,  419,  427,    0,  427,  427,  427,  446,  432,
+      422,    0,    0,    0,  437,  433,  421,  425,  425,  425,
+      425,  427,  446,  432,  427,  427,  434,  427,  437,    0,
+        0,  425,  435,  425,  425,  425,  428,    0,  428,    0,
+      434,  428,  428,  428,  428,  446,  435,    0,    0,  425,
+
+      432,  433,  425,  425,    0,  425,  430,  430,  430,  430,
+      431,  436,  431,  431,  431,  438,  439,    0,  435,  437,
+      430,  440,  430,  430,  430,  436,  434,    0,  431,  438,
+      439,  431,  431,  441,  431,  440,  442,  443,  430,  444,
+      445,  430,  430,  447,  430,  448,  449,  441,  450,  443,
+      442,  443,  451,  444,  445,  452,  436,  447,  453,  448,
+      449,    0,  450,  438,  455,  454,  451,    0,  456,  452,
+      457,  439,  453,  458,  460,  440,  461,  459,  455,  454,
+      447,  445,  456,  441,  457,  462,  442,  458,  460,    0,
+      461,  459,  444,  451,  463,  464,  448,  465,  466,  462,
+
+      467,  449,  450,  452,  453,  454,    0,  454,  463,  464,
+      457,  465,  466,  468,  467,  454,  469,  454,  459,  470,
+      455,  471,  456,  472,  473,  474,  475,  468,  476,  460,
+      469,    0,  458,  470,  477,  471,  478,  472,  473,  474,
+      475,    0,  476,  479,    0,  463,  464,  480,  477,  481,
+      478,  482,  483,    0,  484,  467,  485,  479,  471,    0,
+      486,  480,  488,  481,  472,  482,  483,  475,  484,  487,
+      485,  490,  489,  477,  486,  491,  488,  492,  493,  473,
+        0,    0,    0,  487,  497,  490,  489,  496,  498,  491,
+      499,  492,  493,  494,  494,  494,  494,  500,  497,  482,
+
+        0,  496,  498,  501,  499,  502,  487,  483,  503,    0,
+      485,  500,  490,  488,  489,    0,  493,  501,  504,  502,
+      505,  497,  503,  491,  506,  492,  495,  495,  495,  495,
+        0,  507,  504,  508,  505,  500,  509,  510,  506,  498,
+      495,  511,  495,  495,  495,  507,  496,  508,  501,  512,
+      509,  510,  513,  514,  515,  511,    0,  516,  495,  517,
+        0,  495,  495,  512,  495,  506,  513,  514,  515,  518,
+      504,  516,  519,  517,  505,  520,  509,    0,  508,  521,
+      522,  511,  523,  518,    0,  510,  519,  524,  525,  520,
+      526,  512,    0,  521,  522,  527,  523,  513,  514,  528,
+
+      517,  524,  525,    0,  526,  516,  518,    0,  529,  527,
+      518,  530,    0,  528,  531,  532,  533,  519,    0,  534,
+      535,  522,  529,  523,  536,  530,  520,  537,  531,  532,
+      533,  538,  521,  534,  535,  539,    0,  541,  536,    0,
+      540,  537,  542,  543,  545,  538,  544,    0,  546,  539,
+      530,  541,  528,  531,  540,  547,  542,  543,  545,  548,
+      544,  529,  546,  549,    0,  550,  537,  552,    0,  547,
+      551,    0,  534,  548,  553,  535,  533,  549,  540,  550,
+      555,  552,  542,  554,  551,  538,  556,  544,  553,  539,
+      557,  558,  545,  559,  555,  560,    0,  554,    0,  561,
+
+      556,  548,    0,  562,  557,  558,  563,  559,  547,  560,
+      553,  551,  552,  561,  564,  550,  555,  562,  565,  549,
+      563,  566,  554,  567,  568,  570,  569,    0,  564,  571,
+      573,  572,  565,  574,  556,  566,  575,  567,  568,  570,
+      569,  559,  562,  571,  573,  572,  560,  574,    0,  576,
+      575,  577,  578,  579,    0,    0,  564,  566,  580,  581,
+        0,  563,  569,  576,  582,  577,  578,  579,  564,  574,
+        0,  573,  580,  581,  567,  572,  583,  565,  582,  584,
+      570,    0,  585,  586,  571,  587,  588,  590,  591,  589,
+      583,  592,  593,  584,  594,  577,  585,  586,  595,  587,
+
+      588,  590,  591,  589,  580,  592,  593,  579,  594,    0,
+      596,    0,  595,    0,    0,  597,  598,  583,  585,  599,
+      600,  587,  601,  590,  596,  588,    0,  592,  593,  597,
+      598,  602,  604,  599,  600,  594,  601,  603,  586,  584,
+      589,  605,  607,  591,  606,  602,  604,    0,  595,    0,
+        0,  603,  597,  598,  608,  605,  607,  609,  606,  610,
+      611,  600,  612,  601,  599,  596,  613,  614,  608,    0,
+      615,  609,  616,  610,  611,  617,  612,  617,  618,    0,
+      613,  614,  619,  602,  615,  606,  616,    0,  603,  617,
+      620,  621,  618,  608,  622,  623,  619,    0,  624,  625,
+
+      626,  611,  609,  614,  620,  621,  627,  628,  622,  623,
+      630,  615,  624,  625,  626,    0,    0,    0,  629,  631,
+      627,  628,  632,  633,  630,  635,  620,  634,  618,  616,
+      622,  623,  629,  631,  624,  637,  632,  633,  636,  635,
+      643,  634,  638,  639,    0,  641,    0,  642,    0,  637,
+      628,  644,  636,  645,  643,    0,  638,  639,  629,  641,
+      631,  642,  627,    0,  634,  644,    0,  645,  646,  630,
+      647,  648,  649,    0,  632,  635,  633,  636,  638,  650,
+      639,  641,  646,  642,  647,  648,  649,  644,  651,  652,
+      653,  654,  655,  650,  657,  656,  661,  660,  662,  663,
+
+      664,  665,  651,  652,  653,  654,  655,  666,  657,  656,
+      661,  660,  662,  663,  664,  665,  646,    0,    0,    0,
+      647,  666,  667,  668,  649,  669,  670,    0,  671,  651,
+      657,  656,  650,  660,  654,  656,  667,  668,  665,  669,
+      670,  664,  671,  652,  672,  653,  673,  655,    0,  674,
+      675,  677,    0,  676,  663,  678,  679,  680,  672,  681,
+      673,  682,  666,  674,  675,  677,  669,  676,  683,  678,
+      679,  680,  667,  681,  684,  682,  685,  686,  687,  688,
+      689,  690,  683,    0,  691,  692,  674,  673,  684,  676,
+      685,  686,  687,  688,  689,  690,  693,  674,  691,  692,
+
+      694,  695,  681,  696,  677,  678,  697,    0,  698,  699,
+      693,  700,  701,  682,  694,  695,  679,  696,    0,  684,
+      697,  683,  698,  699,  703,  700,  701,  691,  685,  702,
+        0,  689,  687,  704,  690,    0,  705,  706,  703,  692,
+        0,  707,  708,  702,  696,  694,    0,  704,    0,  693,
+      705,  706,  709,  710,  695,  707,  708,  711,    0,  712,
+      699,  713,  700,  698,    0,  714,  709,  710,  702,    0,
+      715,  711,  701,  712,  717,  713,  716,  718,  707,  714,
+      719,    0,    0,  708,  715,  704,  705,    0,  717,    0,
+      716,  718,    0,    0,  719,    0,    0,    0,    0,    0,
+
+      712,    0,    0,    0,    0,  714,    0,    0,  710,    0,
+      711,    0,  716,  718,    0,    0,  713,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      715,  721,  721,  721,  721,  721,  721,  721,  721,  722,
+      722,    0,  722,  722,  722,  722,  722,  723,    0,    0,
+        0,  723,  723,  723,  724,  724,  724,  725,  725,  726,
+      726,  726,  726,  726,  726,  726,  726,  727,  727,  728,
+        0,  728,  728,  728,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1236,7 +1235,7 @@ int include_stack_ptr = 0;
 #define uint _uint
 default:
 
-#line 1240 "lexer.ec"
+#line 1239 "lexer.ec"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1396,7 +1395,7 @@ YY_DECL
    expression_yylloc.start = expression_yylloc.end;
 
 
-#line 1400 "lexer.ec"
+#line 1399 "lexer.ec"
 
        if ( yy_init )
                {
@@ -1447,13 +1446,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 723 )
+                               if ( yy_current_state >= 721 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 2565 );
+               while ( yy_base[yy_current_state] != 2575 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2430,7 +2429,7 @@ YY_RULE_SETUP
 #line 328 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2434 "lexer.ec"
+#line 2433 "lexer.ec"
 
        case YY_END_OF_BUFFER:
                {
@@ -2720,7 +2719,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 723 )
+                       if ( yy_current_state >= 721 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2755,11 +2754,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 723 )
+               if ( yy_current_state >= 721 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 722);
+       yy_is_jam = (yy_current_state == 720);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
index 5d919f4..12fadae 100644 (file)
@@ -212,7 +212,7 @@ default:
 "dbindex"                  { return(DBINDEX); }
 "database_open"            { return(DATABASE_OPEN); }
 
-("::"|(({IDENT}"&"?"::")*)){IDENT}?    { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
+("::"?(({IDENT}"&"?"::")*)){IDENT}?    { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
 
 0[xX]{H}+{IS}?          { return(CONSTANT); }
 
index b6b6b48..dbda622 100644 (file)
@@ -207,7 +207,7 @@ public bool LoadSymbols(const char * fileName, ImportType importType, bool loadD
                         TrimLSpaces(line, line);
 
                         if(importType == preDeclImport)
-                           DeclClass(name);
+                           DeclClass(null, name);
                         if(isStatic || loadDllOnly || importType == preDeclImport || importType == comCheckImport)
                           regClass = null;
                         else if(regClass = eSystem_FindClass(privateModule, name), !regClass || regClass.internalDecl || regClass.isRemote)
@@ -239,7 +239,7 @@ public bool LoadSymbols(const char * fileName, ImportType importType, bool loadD
                                     char className[1024] = "DCOMClient_";
                                     strcat(className, name);
                                     if(!existingClass)
-                                       existingClass = DeclClass(name);
+                                       existingClass = DeclClass(null, name);
                                     regClass = eSystem_RegisterClass(classType, className, baseName, 0, 0, null, null, privateModule, ecereCOMModule ? baseSystemAccess : publicAccess, inheritanceAccess);
                                  }
                                  if(regClass)
index 59b2c04..c72f75d 100644 (file)
@@ -67,6 +67,7 @@ External ProcessClassFunction(Class owningClass, ClassFunction func, OldList def
          ProcessFunctionBody(function, func.body);
          external = MkExternalFunction(function);
 
+         /*
          if(owningClass)
          {
             char className[1024];
@@ -74,6 +75,7 @@ External ProcessClassFunction(Class owningClass, ClassFunction func, OldList def
             FullClassNameCat(className, owningClass.fullName, true);
             DeclareClass(external, owningClass.symbol, className);
          }
+         */
 
          external.symbol = func.declarator.symbol;
          external.function._class = func._class;
@@ -1068,7 +1070,7 @@ static void ProcessClass(ClassType classType, OldList definitions, Symbol symbol
       }
 
       // Make the RegisterClass section
-      if(inCompiler && !symbol.notYetDeclared && regClass)
+      if(inCompiler && symbol.mustRegister && regClass)
       {
          Statement stmt;
          OldList * args = MkList();
index 1207dd5..5aa5885 100644 (file)
@@ -3578,7 +3578,7 @@ bool MatchTypeExpression(Expression sourceExp, Type dest, OldList conversions, b
       }
 
       if(dest.kind != classType && source.kind == classType && source._class && source._class.registered &&
-         !strcmp(source._class.registered.fullName, "ecere::com::unichar"))
+         !strcmp(source._class.registered.fullName, "unichar" /*"ecere::com::unichar"*/))
       {
          FreeType(source);
          source = Type { kind = intType, isSigned = false, refCount = 1 };
@@ -6745,8 +6745,6 @@ static Symbol FindWithNameSpace(BinaryTree tree, const char * name)
    return null;
 }
 
-static void ProcessDeclaration(Declaration decl);
-
 /*static */Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)
 {
 #ifdef _DEBUG
@@ -11404,7 +11402,7 @@ static void ProcessInitializer(Initializer init, Type type)
    }
 }
 
-static void ProcessSpecifier(Specifier spec, bool declareStruct)
+static void ProcessSpecifier(Specifier spec, bool declareStruct, bool warnClasses)
 {
    switch(spec.type)
    {
@@ -11417,7 +11415,7 @@ static void ProcessSpecifier(Specifier spec, bool declareStruct)
                spec.type = nameSpecifier;
                spec.name = ReplaceThisClass(thisClass);
                spec.symbol = FindClass(spec.name);
-               ProcessSpecifier(spec, declareStruct);
+               ProcessSpecifier(spec, declareStruct, false);
             }
          }
          break;
@@ -11430,6 +11428,8 @@ static void ProcessSpecifier(Specifier spec, bool declareStruct)
          else if(spec.symbol /*&& declareStruct*/)
          {
             Class c = spec.symbol.registered;
+            if(warnClasses && !c)
+               Compiler_Warning("Undeclared class %s\n", spec.name);
             DeclareStruct(curExternal, spec.name, c && c.type == noHeadClass, declareStruct && c && c.type == structClass);
          }
          break;
@@ -11583,14 +11583,14 @@ static void ProcessDeclarator(Declarator decl, bool isFunction)
                                  spec.type = nameSpecifier;
                                  spec.name = ReplaceThisClass(thisClass);
                                  spec.symbol = FindClass(spec.name);
-                                 ProcessSpecifier(spec, false);
+                                 ProcessSpecifier(spec, false, false);
                               }
                               break;
                            }
                         }
                         else if(spec.type == nameSpecifier)
                         {
-                           ProcessSpecifier(spec, isFunction);
+                           ProcessSpecifier(spec, isFunction, true);
                         }
                      }
                   }
@@ -11605,7 +11605,7 @@ static void ProcessDeclarator(Declarator decl, bool isFunction)
    }
 }
 
-static void ProcessDeclaration(Declaration decl)
+static void ProcessDeclaration(Declaration decl, bool warnClasses)
 {
    yylloc = decl.loc;
    switch(decl.type)
@@ -11681,7 +11681,7 @@ static void ProcessDeclaration(Declaration decl)
             Specifier s;
             for(s = decl.specifiers->first; s; s = s.next)
             {
-               ProcessSpecifier(s, declareStruct);
+               ProcessSpecifier(s, declareStruct, true);
             }
          }
          break;
@@ -11724,7 +11724,7 @@ static void ProcessDeclaration(Declaration decl)
          if(decl.specifiers)
          {
             for(spec = decl.specifiers->first; spec; spec = spec.next)
-               ProcessSpecifier(spec, declareStruct);
+               ProcessSpecifier(spec, declareStruct, warnClasses);
          }
          break;
       }
@@ -11828,7 +11828,7 @@ static void ProcessStatement(Statement stmt)
             if(stmt.compound.declarations)
             {
                for(decl = stmt.compound.declarations->first; decl; decl = decl.next)
-                  ProcessDeclaration(decl);
+                  ProcessDeclaration(decl, true);
             }
             if(stmt.compound.statements)
             {
@@ -12359,7 +12359,7 @@ static void ProcessStatement(Statement stmt)
                }
                ProcessExpressionType(expIt);
                if(stmt.compound.declarations->first)
-                  ProcessDeclaration(stmt.compound.declarations->first);
+                  ProcessDeclaration(stmt.compound.declarations->first, true);
 
                if(symbol)
                   symbol.isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
@@ -12408,7 +12408,7 @@ static void ProcessStatement(Statement stmt)
       }
       case badDeclarationStmt:
       {
-         ProcessDeclaration(stmt.decl);
+         ProcessDeclaration(stmt.decl, true);
          break;
       }
       case asmStmt:
@@ -13069,7 +13069,7 @@ static void ProcessClass(OldList definitions, Symbol symbol)
          {
             Class backThisClass = thisClass;
             if(regClass) thisClass = regClass;
-            ProcessDeclaration(def.decl);
+            ProcessDeclaration(def.decl, symbol ? true : false);
             thisClass = backThisClass;
          }
       }
@@ -13243,7 +13243,7 @@ void ComputeDataTypes()
 
          currentClass = null;
          if(external.declaration)
-            ProcessDeclaration(external.declaration);
+            ProcessDeclaration(external.declaration, true);
       }
       else if(external.type == classExternal)
       {
index ff48f8e..07f50f4 100644 (file)
@@ -706,19 +706,23 @@ public void DeclareClass(External neededFor, Symbol classSym, const char * class
    }*/
    if(classSym && classSym.notYetDeclared)
    {
-      if(!classSym._import)
+      if(!classSym.mustRegister)
       {
-         if(!classSym.module) classSym.module = mainModule;
-         if(!classSym.module) return;
-         classSym._import = ClassImport
+         if(!classSym._import)
          {
-            isRemote = classSym.registered ? classSym.registered.isRemote : 0;
-            name = CopyString(classSym.string);
-         };
-         classSym.module.classes.Add(classSym._import);
+            if(!classSym.module) classSym.module = mainModule;
+            if(!classSym.module) return;
+            classSym._import = ClassImport
+            {
+               isRemote = classSym.registered ? classSym.registered.isRemote : 0;
+               name = CopyString(classSym.string);
+            };
+            classSym.module.classes.Add(classSym._import);
+         }
+         classSym._import.itself = true;
       }
-      classSym._import.itself = true;
       classSym.notYetDeclared = false;
+
       if(!classSym.pointerExternal && inCompiler)
       {
          Declaration decl;
index e6ee59c..0611c85 100644 (file)
@@ -835,57 +835,57 @@ static const yytype_int16 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   229,   229,   247,   281,   331,   332,   359,   363,   364,
-     365,   382,   384,   389,   394,   399,   401,   406,   411,   412,
-     417,   419,   421,   423,   424,   426,   427,   428,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   443,   444,   445,
-     446,   447,   448,   461,   462,   463,   467,   496,   497,   498,
-     499,   503,   504,   505,   507,   508,   510,   511,   515,   516,
-     525,   526,   527,   528,   529,   530,   531,   535,   536,   540,
-     541,   542,   543,   547,   548,   549,   553,   554,   555,   559,
-     567,   568,   569,   570,   571,   575,   576,   577,   581,   582,
-     586,   587,   591,   592,   596,   597,   601,   602,   606,   607,
-     611,   612,   613,   617,   618,   619,   620,   621,   622,   623,
-     624,   625,   626,   627,   631,   632,   636,   640,   641,   642,
-     643,   647,   648,   649,   650,   651,   652,   653,   654,   658,
-     659,   660,   661,   662,   663,   664,   665,   666,   667,   671,
-     672,   673,   674,   675,   676,   677,   678,   679,   680,   684,
-     685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
-     695,   699,   700,   704,   705,   706,   707,   708,   709,   710,
-     711,   712,   730,   747,   748,   749,   750,   751,   752,   753,
-     754,   755,   756,   757,   758,   759,   777,   794,   795,   799,
-     800,   804,   805,   806,   807,   808,   809,   813,   814,   815,
-     819,   820,   821,   826,   827,   828,   829,   830,   834,   835,
-     839,   840,   841,   845,   846,   850,   854,   855,   856,   861,
-     862,   863,   864,   865,   866,   867,   868,   869,   870,   871,
-     872,   873,   874,   875,   876,   877,   878,   879,   880,   881,
-     882,   883,   884,   888,   889,   890,   891,   892,   893,   894,
-     895,   896,   897,   898,   899,   900,   901,   902,   903,   904,
-     905,   906,   907,   908,   909,   914,   915,   916,   917,   918,
-     921,   922,   923,   924,   925,   930,   931,   934,   936,   941,
-     942,   947,   948,   959,   963,   965,   966,   968,   969,   993,
-    1008,  1009,  1013,  1014,  1018,  1019,  1023,  1027,  1028,  1032,
-    1034,  1036,  1038,  1040,  1043,  1045,  1047,  1049,  1051,  1054,
-    1056,  1058,  1060,  1062,  1065,  1067,  1069,  1071,  1073,  1078,
-    1079,  1080,  1081,  1082,  1083,  1084,  1085,  1089,  1091,  1096,
-    1098,  1100,  1102,  1104,  1109,  1110,  1114,  1116,  1117,  1118,
-    1119,  1123,  1125,  1130,  1132,  1138,  1140,  1142,  1144,  1146,
-    1148,  1150,  1152,  1154,  1156,  1158,  1163,  1165,  1167,  1169,
-    1171,  1176,  1177,  1178,  1179,  1180,  1181,  1185,  1186,  1187,
-    1188,  1189,  1190,  1236,  1237,  1239,  1241,  1246,  1248,  1250,
-    1252,  1254,  1259,  1260,  1263,  1265,  1267,  1273,  1277,  1279,
-    1281,  1286,  1287,  1288,  1290,  1295,  1296,  1297,  1298,  1299,
-    1303,  1304,  1308,  1309,  1310,  1311,  1315,  1316,  1320,  1321,
-    1325,  1326,  1327,  1328,  1329,  1340,  1365,  1366,  1370,  1371,
-    1375,  1376,  1380,  1382,  1384,  1400,  1402,  1424,  1426,  1431,
-    1432,  1433,  1434,  1435,  1436,  1440,  1442,  1444,  1449,  1450,
-    1454,  1455,  1458,  1462,  1463,  1464,  1468,  1472,  1480,  1485,
-    1486,  1490,  1491,  1492,  1496,  1497,  1498,  1499,  1501,  1502,
-    1503,  1507,  1508,  1509,  1510,  1511,  1515,  1519,  1521,  1526,
-    1528,  1553,  1555,  1557,  1559,  1564,  1566,  1570,  1572,  1574,
-    1576,  1578,  1584,  1586,  1591,  1596,  1597,  1601,  1603,  1608,
-    1613,  1614,  1615,  1616,  1617,  1618,  1622,  1623,  1624,  1628,
-    1629
+       0,   229,   229,   247,   271,   311,   312,   339,   343,   344,
+     345,   362,   364,   369,   374,   379,   381,   386,   391,   392,
+     397,   399,   401,   403,   404,   406,   407,   408,   411,   412,
+     413,   414,   415,   416,   417,   418,   419,   423,   424,   425,
+     426,   427,   428,   441,   442,   443,   447,   476,   477,   478,
+     479,   483,   484,   485,   487,   488,   490,   491,   495,   496,
+     505,   506,   507,   508,   509,   510,   511,   515,   516,   520,
+     521,   522,   523,   527,   528,   529,   533,   534,   535,   539,
+     547,   548,   549,   550,   551,   555,   556,   557,   561,   562,
+     566,   567,   571,   572,   576,   577,   581,   582,   586,   587,
+     591,   592,   593,   597,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   607,   611,   612,   616,   620,   621,   622,
+     623,   627,   628,   629,   630,   631,   632,   633,   634,   638,
+     639,   640,   641,   642,   643,   644,   645,   646,   647,   651,
+     652,   653,   654,   655,   656,   657,   658,   659,   660,   664,
+     665,   666,   667,   668,   669,   670,   671,   672,   673,   674,
+     675,   679,   680,   684,   685,   686,   687,   688,   689,   690,
+     691,   692,   700,   709,   710,   711,   712,   713,   714,   715,
+     716,   717,   718,   719,   720,   721,   729,   738,   739,   743,
+     744,   748,   749,   750,   751,   752,   753,   757,   758,   759,
+     763,   764,   765,   770,   771,   772,   773,   774,   778,   779,
+     783,   784,   785,   789,   790,   794,   798,   799,   800,   805,
+     806,   807,   808,   809,   810,   811,   812,   813,   814,   815,
+     816,   817,   818,   819,   820,   821,   822,   823,   824,   825,
+     826,   827,   828,   832,   833,   834,   835,   836,   837,   838,
+     839,   840,   841,   842,   843,   844,   845,   846,   847,   848,
+     849,   850,   851,   852,   853,   858,   859,   860,   861,   862,
+     865,   866,   867,   868,   869,   874,   875,   878,   880,   885,
+     886,   891,   892,   903,   907,   909,   910,   912,   913,   937,
+     952,   953,   957,   958,   962,   963,   967,   971,   972,   976,
+     978,   980,   982,   984,   987,   989,   991,   993,   995,   998,
+    1000,  1002,  1004,  1006,  1009,  1011,  1013,  1015,  1017,  1022,
+    1023,  1024,  1025,  1026,  1027,  1028,  1029,  1033,  1035,  1040,
+    1042,  1044,  1046,  1048,  1053,  1054,  1058,  1060,  1061,  1062,
+    1063,  1067,  1069,  1074,  1076,  1082,  1084,  1086,  1088,  1090,
+    1092,  1094,  1096,  1098,  1100,  1102,  1107,  1109,  1111,  1113,
+    1115,  1120,  1121,  1122,  1123,  1124,  1125,  1129,  1130,  1131,
+    1132,  1133,  1134,  1180,  1181,  1183,  1185,  1190,  1192,  1194,
+    1196,  1198,  1203,  1204,  1207,  1209,  1211,  1217,  1221,  1223,
+    1225,  1230,  1231,  1232,  1234,  1239,  1240,  1241,  1242,  1243,
+    1247,  1248,  1252,  1253,  1254,  1255,  1259,  1260,  1264,  1265,
+    1269,  1270,  1271,  1272,  1273,  1284,  1309,  1310,  1314,  1315,
+    1319,  1320,  1324,  1326,  1328,  1344,  1346,  1368,  1370,  1375,
+    1376,  1377,  1378,  1379,  1380,  1384,  1386,  1388,  1393,  1394,
+    1398,  1399,  1402,  1406,  1407,  1408,  1412,  1416,  1424,  1429,
+    1430,  1434,  1435,  1436,  1440,  1441,  1442,  1443,  1445,  1446,
+    1447,  1451,  1452,  1453,  1454,  1455,  1459,  1463,  1465,  1470,
+    1472,  1497,  1499,  1501,  1503,  1508,  1510,  1514,  1516,  1518,
+    1520,  1522,  1528,  1530,  1535,  1540,  1541,  1545,  1547,  1552,
+    1557,  1558,  1559,  1560,  1561,  1562,  1566,  1567,  1568,  1572,
+    1573
 };
 #endif
 
@@ -5076,7 +5076,7 @@ yyreduce:
 #line 230 "type.y"
     {
       (yyval.specifier) = null;
-      DeclClass((yyvsp[(1) - (2)].id).string);
+      DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
       fileInput.Seek((yylsp[(1) - (2)]).start.pos, start);
       resetScannerPos(&(yylsp[(1) - (2)]).start);
       yyclearin;
@@ -5100,17 +5100,7 @@ yyreduce:
     {
       (yyval.specifier) = null;
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if((yyvsp[(1) - (2)].id)._class)
-      {
-         char name[1024];
-         strcpy(name,  (yyvsp[(1) - (2)].id)._class.name ? (yyvsp[(1) - (2)].id)._class.name : "");
-         strcat(name, "::");
-         strcat(name, (yyvsp[(1) - (2)].id).string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass((yyvsp[(1) - (2)].id).string);
+      _DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
 
       FreeIdentifier((yyvsp[(1) - (2)].id));
 
@@ -5132,9 +5122,9 @@ yyreduce:
   case 4:
 
 /* Line 1464 of yacc.c  */
-#line 282 "type.y"
+#line 272 "type.y"
     {
-      DeclClass((yyvsp[(1) - (2)].id).string);
+      DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
       fileInput.Seek((yylsp[(1) - (2)]).start.pos, start);
       parseTypeError = 0;
       resetScannerPos(&(yylsp[(1) - (2)]).start);
@@ -5154,17 +5144,17 @@ yyreduce:
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 331 "type.y"
+#line 311 "type.y"
     { (yyval.specifier) = (yyvsp[(1) - (1)].specifier); ;}
     break;
 
   case 6:
 
 /* Line 1464 of yacc.c  */
-#line 333 "type.y"
+#line 313 "type.y"
     {
    #ifdef PRECOMPILER
-      DeclClass((yyvsp[(1) - (2)].id).string);
+      DeclClass((yyvsp[(1) - (2)].id)._class, (yyvsp[(1) - (2)].id).string);
       fileInput.Seek((yylsp[(1) - (2)]).start.pos, start);
       resetScannerPos(&(yylsp[(1) - (2)]).start);
       yyclearin;
@@ -5190,21 +5180,21 @@ yyreduce:
   case 7:
 
 /* Line 1464 of yacc.c  */
-#line 359 "type.y"
+#line 339 "type.y"
     { (yyval.specifier) = MkSpecifierName(yytext); ;}
     break;
 
   case 9:
 
 /* Line 1464 of yacc.c  */
-#line 364 "type.y"
+#line 344 "type.y"
     { (yyval.specifier) = (yyvsp[(1) - (4)].specifier); SetClassTemplateArgs((yyval.specifier), (yyvsp[(3) - (4)].list)); (yyval.specifier).loc = (yyloc); ;}
     break;
 
   case 10:
 
 /* Line 1464 of yacc.c  */
-#line 366 "type.y"
+#line 346 "type.y"
     {
       (yyval.specifier) = (yyvsp[(1) - (4)].specifier);
       SetClassTemplateArgs((yyval.specifier), (yyvsp[(3) - (4)].list));
@@ -5220,210 +5210,210 @@ yyreduce:
   case 11:
 
 /* Line 1464 of yacc.c  */
-#line 383 "type.y"
+#line 363 "type.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 385 "type.y"
+#line 365 "type.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(1) - (1)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 390 "type.y"
+#line 370 "type.y"
     { (yyval.classFunction) = MkClassFunction(null, null, null, null); (yyval.classFunction).isConstructor = true; (yyval.classFunction).loc = (yyloc); FreeList /*FreeSpecifier*/((yyvsp[(1) - (3)].list), FreeSpecifier); ;}
     break;
 
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 395 "type.y"
+#line 375 "type.y"
     { (yyval.classFunction) = MkClassFunction(null, null, null, null); (yyval.classFunction).isDestructor = true; (yyval.classFunction).loc = (yyloc); FreeList /*FreeSpecifier*/((yyvsp[(2) - (4)].list), FreeSpecifier); ;}
     break;
 
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 400 "type.y"
+#line 380 "type.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(2) - (3)].list), null, (yyvsp[(3) - (3)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 402 "type.y"
+#line 382 "type.y"
     { (yyval.classFunction) = MkClassFunction(null, null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).isVirtual = true; (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 407 "type.y"
+#line 387 "type.y"
     { (yyval.id) = MkIdentifier(yytext); (yyval.id).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 413 "type.y"
+#line 393 "type.y"
     { (yyval.exp) = MkExpBrackets((yyvsp[(2) - (3)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 418 "type.y"
+#line 398 "type.y"
     { (yyval.exp) = MkExpIdentifier((yyvsp[(1) - (1)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 420 "type.y"
+#line 400 "type.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (1)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 422 "type.y"
+#line 402 "type.y"
     { (yyval.exp) = MkExpConstant(yytext); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 423 "type.y"
+#line 403 "type.y"
     { (yyval.exp) = MkExpWideString(yytext); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 425 "type.y"
+#line 405 "type.y"
     { (yyval.exp) = MkExpString((yyvsp[(1) - (1)].string)); delete (yyvsp[(1) - (1)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 25:
 
 /* Line 1464 of yacc.c  */
-#line 426 "type.y"
+#line 406 "type.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[(2) - (2)].string), null); delete (yyvsp[(2) - (2)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 26:
 
 /* Line 1464 of yacc.c  */
-#line 427 "type.y"
+#line 407 "type.y"
     { (yyval.exp) = MkExpIntlString((yyvsp[(4) - (4)].string), (yyvsp[(2) - (4)].string)); delete (yyvsp[(2) - (4)].string); delete (yyvsp[(4) - (4)].string); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 27:
 
 /* Line 1464 of yacc.c  */
-#line 429 "type.y"
+#line 409 "type.y"
     { Expression exp = MkExpDummy(); exp.loc.start = (yylsp[(1) - (2)]).end; exp.loc.end = (yylsp[(2) - (2)]).start; (yyval.exp) = MkExpBrackets(MkListOne(exp)); (yyval.exp).loc = (yyloc); yyerror(); ;}
     break;
 
   case 28:
 
 /* Line 1464 of yacc.c  */
-#line 431 "type.y"
+#line 411 "type.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 432 "type.y"
+#line 412 "type.y"
     { (yyval.exp) = MkExpNew(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 433 "type.y"
+#line 413 "type.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (6)].list),(yyvsp[(3) - (6)].declarator)), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 434 "type.y"
+#line 414 "type.y"
     { (yyval.exp) = MkExpNew0(MkTypeName((yyvsp[(2) - (5)].list),null), (yyvsp[(4) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 32:
 
 /* Line 1464 of yacc.c  */
-#line 435 "type.y"
+#line 415 "type.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 33:
 
 /* Line 1464 of yacc.c  */
-#line 436 "type.y"
+#line 416 "type.y"
     { (yyval.exp) = MkExpRenew((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 34:
 
 /* Line 1464 of yacc.c  */
-#line 437 "type.y"
+#line 417 "type.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (7)].exp), MkTypeName((yyvsp[(3) - (7)].list),(yyvsp[(4) - (7)].declarator)), (yyvsp[(6) - (7)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 35:
 
 /* Line 1464 of yacc.c  */
-#line 438 "type.y"
+#line 418 "type.y"
     { (yyval.exp) = MkExpRenew0((yyvsp[(2) - (6)].exp), MkTypeName((yyvsp[(3) - (6)].list),null), (yyvsp[(5) - (6)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 439 "type.y"
+#line 419 "type.y"
     { (yyval.exp) = MkExpDummy(); ;}
     break;
 
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 444 "type.y"
+#line 424 "type.y"
     { (yyval.exp) = MkExpIndex((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 445 "type.y"
+#line 425 "type.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (3)].exp), MkList()); (yyval.exp).call.argLoc.start = (yylsp[(2) - (3)]).start; (yyval.exp).call.argLoc.end = (yylsp[(3) - (3)]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 446 "type.y"
+#line 426 "type.y"
     { (yyval.exp) = MkExpCall((yyvsp[(1) - (4)].exp), (yyvsp[(3) - (4)].list)); (yyval.exp).call.argLoc.start = (yylsp[(2) - (4)]).start; (yyval.exp).call.argLoc.end = (yylsp[(4) - (4)]).end; (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 447 "type.y"
+#line 427 "type.y"
     { (yyval.exp) = MkExpMember((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 449 "type.y"
+#line 429 "type.y"
     {
       char * constant = (yyvsp[(1) - (2)].exp).type == constantExp ? (yyvsp[(1) - (2)].exp).constant : null;
       int len = constant ? strlen(constant) : 0;
@@ -5441,217 +5431,217 @@ yyreduce:
   case 43:
 
 /* Line 1464 of yacc.c  */
-#line 461 "type.y"
+#line 441 "type.y"
     { (yyval.exp) = MkExpPointer((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].id)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 462 "type.y"
+#line 442 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), INC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 463 "type.y"
+#line 443 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), DEC_OP, null); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 46:
 
 /* Line 1464 of yacc.c  */
-#line 467 "type.y"
+#line 447 "type.y"
     { (yyval.exp) = MkExpInstance((yyvsp[(1) - (1)].instance)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 47:
 
 /* Line 1464 of yacc.c  */
-#line 496 "type.y"
+#line 476 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 497 "type.y"
+#line 477 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 498 "type.y"
+#line 478 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 499 "type.y"
+#line 479 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp));  ;}
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 503 "type.y"
+#line 483 "type.y"
     { (yyval.exp) = MkExpOp(null, INC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 504 "type.y"
+#line 484 "type.y"
     { (yyval.exp) = MkExpOp(null, DEC_OP, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 53:
 
 /* Line 1464 of yacc.c  */
-#line 505 "type.y"
+#line 485 "type.y"
     { (yyval.exp) = MkExpOp(null, (yyvsp[(1) - (2)].i), (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 54:
 
 /* Line 1464 of yacc.c  */
-#line 507 "type.y"
+#line 487 "type.y"
     { (yyval.exp) = MkExpOp(null, SIZEOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 55:
 
 /* Line 1464 of yacc.c  */
-#line 508 "type.y"
+#line 488 "type.y"
     { (yyval.exp) = MkExpTypeSize((yyvsp[(3) - (4)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 56:
 
 /* Line 1464 of yacc.c  */
-#line 510 "type.y"
+#line 490 "type.y"
     { (yyval.exp) = MkExpOp(null, ALIGNOF, (yyvsp[(2) - (2)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 57:
 
 /* Line 1464 of yacc.c  */
-#line 511 "type.y"
+#line 491 "type.y"
     { (yyval.exp) = MkExpTypeAlign((yyvsp[(3) - (4)].typeName)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 60:
 
 /* Line 1464 of yacc.c  */
-#line 525 "type.y"
+#line 505 "type.y"
     { (yyval.i) = '&'; ;}
     break;
 
   case 61:
 
 /* Line 1464 of yacc.c  */
-#line 526 "type.y"
+#line 506 "type.y"
     { (yyval.i) = '*'; ;}
     break;
 
   case 62:
 
 /* Line 1464 of yacc.c  */
-#line 527 "type.y"
+#line 507 "type.y"
     { (yyval.i) = '+'; ;}
     break;
 
   case 63:
 
 /* Line 1464 of yacc.c  */
-#line 528 "type.y"
+#line 508 "type.y"
     { (yyval.i) = '-'; ;}
     break;
 
   case 64:
 
 /* Line 1464 of yacc.c  */
-#line 529 "type.y"
+#line 509 "type.y"
     { (yyval.i) = '~'; ;}
     break;
 
   case 65:
 
 /* Line 1464 of yacc.c  */
-#line 530 "type.y"
+#line 510 "type.y"
     { (yyval.i) = '!'; ;}
     break;
 
   case 66:
 
 /* Line 1464 of yacc.c  */
-#line 531 "type.y"
+#line 511 "type.y"
     { (yyval.i) = DELETE; ;}
     break;
 
   case 68:
 
 /* Line 1464 of yacc.c  */
-#line 536 "type.y"
+#line 516 "type.y"
     { (yyval.exp) = MkExpCast((yyvsp[(2) - (4)].typeName), (yyvsp[(4) - (4)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 70:
 
 /* Line 1464 of yacc.c  */
-#line 541 "type.y"
+#line 521 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '*', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 71:
 
 /* Line 1464 of yacc.c  */
-#line 542 "type.y"
+#line 522 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '/', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 72:
 
 /* Line 1464 of yacc.c  */
-#line 543 "type.y"
+#line 523 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '%', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 74:
 
 /* Line 1464 of yacc.c  */
-#line 548 "type.y"
+#line 528 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '+', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 75:
 
 /* Line 1464 of yacc.c  */
-#line 549 "type.y"
+#line 529 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '-', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 77:
 
 /* Line 1464 of yacc.c  */
-#line 554 "type.y"
+#line 534 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LEFT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 78:
 
 /* Line 1464 of yacc.c  */
-#line 555 "type.y"
+#line 535 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), RIGHT_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 79:
 
 /* Line 1464 of yacc.c  */
-#line 560 "type.y"
+#line 540 "type.y"
     {
       (yyval.exp) = (yyvsp[(1) - (2)].exp);
       skipErrors = true;
@@ -5661,586 +5651,576 @@ yyreduce:
   case 81:
 
 /* Line 1464 of yacc.c  */
-#line 568 "type.y"
+#line 548 "type.y"
     { skipErrors = false; (yyval.exp) = MkExpOp((yyvsp[(1) - (2)].exp), '<', (yyvsp[(2) - (2)].exp)/*$3*/); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 82:
 
 /* Line 1464 of yacc.c  */
-#line 569 "type.y"
+#line 549 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '>', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 83:
 
 /* Line 1464 of yacc.c  */
-#line 570 "type.y"
+#line 550 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), LE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 84:
 
 /* Line 1464 of yacc.c  */
-#line 571 "type.y"
+#line 551 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), GE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 86:
 
 /* Line 1464 of yacc.c  */
-#line 576 "type.y"
+#line 556 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), EQ_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 87:
 
 /* Line 1464 of yacc.c  */
-#line 577 "type.y"
+#line 557 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), NE_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 89:
 
 /* Line 1464 of yacc.c  */
-#line 582 "type.y"
+#line 562 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '&', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 91:
 
 /* Line 1464 of yacc.c  */
-#line 587 "type.y"
+#line 567 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '^', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 93:
 
 /* Line 1464 of yacc.c  */
-#line 592 "type.y"
+#line 572 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), '|', (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 95:
 
 /* Line 1464 of yacc.c  */
-#line 597 "type.y"
+#line 577 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), AND_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 97:
 
 /* Line 1464 of yacc.c  */
-#line 602 "type.y"
+#line 582 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), OR_OP, (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 99:
 
 /* Line 1464 of yacc.c  */
-#line 607 "type.y"
+#line 587 "type.y"
     { (yyval.exp) = MkExpCondition((yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 101:
 
 /* Line 1464 of yacc.c  */
-#line 612 "type.y"
+#line 592 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 102:
 
 /* Line 1464 of yacc.c  */
-#line 613 "type.y"
+#line 593 "type.y"
     { (yyval.exp) = MkExpOp((yyvsp[(1) - (3)].exp), (yyvsp[(2) - (3)].i), (yyvsp[(3) - (3)].exp)); (yyval.exp).loc = (yyloc); ;}
     break;
 
   case 103:
 
 /* Line 1464 of yacc.c  */
-#line 617 "type.y"
+#line 597 "type.y"
     { (yyval.i) = '='; ;}
     break;
 
   case 104:
 
 /* Line 1464 of yacc.c  */
-#line 618 "type.y"
+#line 598 "type.y"
     { (yyval.i) = MUL_ASSIGN; ;}
     break;
 
   case 105:
 
 /* Line 1464 of yacc.c  */
-#line 619 "type.y"
+#line 599 "type.y"
     { (yyval.i) = DIV_ASSIGN; ;}
     break;
 
   case 106:
 
 /* Line 1464 of yacc.c  */
-#line 620 "type.y"
+#line 600 "type.y"
     { (yyval.i) = MOD_ASSIGN; ;}
     break;
 
   case 107:
 
 /* Line 1464 of yacc.c  */
-#line 621 "type.y"
+#line 601 "type.y"
     { (yyval.i) = ADD_ASSIGN; ;}
     break;
 
   case 108:
 
 /* Line 1464 of yacc.c  */
-#line 622 "type.y"
+#line 602 "type.y"
     { (yyval.i) = SUB_ASSIGN; ;}
     break;
 
   case 109:
 
 /* Line 1464 of yacc.c  */
-#line 623 "type.y"
+#line 603 "type.y"
     { (yyval.i) = LEFT_ASSIGN; ;}
     break;
 
   case 110:
 
 /* Line 1464 of yacc.c  */
-#line 624 "type.y"
+#line 604 "type.y"
     { (yyval.i) = RIGHT_ASSIGN; ;}
     break;
 
   case 111:
 
 /* Line 1464 of yacc.c  */
-#line 625 "type.y"
+#line 605 "type.y"
     { (yyval.i) = AND_ASSIGN; ;}
     break;
 
   case 112:
 
 /* Line 1464 of yacc.c  */
-#line 626 "type.y"
+#line 606 "type.y"
     { (yyval.i) = XOR_ASSIGN; ;}
     break;
 
   case 113:
 
 /* Line 1464 of yacc.c  */
-#line 627 "type.y"
+#line 607 "type.y"
     { (yyval.i) = OR_ASSIGN; ;}
     break;
 
   case 114:
 
 /* Line 1464 of yacc.c  */
-#line 631 "type.y"
+#line 611 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 115:
 
 /* Line 1464 of yacc.c  */
-#line 632 "type.y"
+#line 612 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 117:
 
 /* Line 1464 of yacc.c  */
-#line 640 "type.y"
+#line 620 "type.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 118:
 
 /* Line 1464 of yacc.c  */
-#line 641 "type.y"
+#line 621 "type.y"
     { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 119:
 
 /* Line 1464 of yacc.c  */
-#line 642 "type.y"
+#line 622 "type.y"
     { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 120:
 
 /* Line 1464 of yacc.c  */
-#line 643 "type.y"
+#line 623 "type.y"
     { (yyval.declaration) = MkDeclarationDefine((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 121:
 
 /* Line 1464 of yacc.c  */
-#line 647 "type.y"
+#line 627 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 122:
 
 /* Line 1464 of yacc.c  */
-#line 648 "type.y"
+#line 628 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 123:
 
 /* Line 1464 of yacc.c  */
-#line 649 "type.y"
+#line 629 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 124:
 
 /* Line 1464 of yacc.c  */
-#line 650 "type.y"
+#line 630 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 125:
 
 /* Line 1464 of yacc.c  */
-#line 651 "type.y"
+#line 631 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 126:
 
 /* Line 1464 of yacc.c  */
-#line 652 "type.y"
+#line 632 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 127:
 
 /* Line 1464 of yacc.c  */
-#line 653 "type.y"
+#line 633 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 128:
 
 /* Line 1464 of yacc.c  */
-#line 654 "type.y"
+#line 634 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 129:
 
 /* Line 1464 of yacc.c  */
-#line 658 "type.y"
+#line 638 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 130:
 
 /* Line 1464 of yacc.c  */
-#line 659 "type.y"
+#line 639 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 131:
 
 /* Line 1464 of yacc.c  */
-#line 660 "type.y"
+#line 640 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 132:
 
 /* Line 1464 of yacc.c  */
-#line 661 "type.y"
+#line 641 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 133:
 
 /* Line 1464 of yacc.c  */
-#line 662 "type.y"
+#line 642 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 134:
 
 /* Line 1464 of yacc.c  */
-#line 663 "type.y"
+#line 643 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 135:
 
 /* Line 1464 of yacc.c  */
-#line 664 "type.y"
+#line 644 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 136:
 
 /* Line 1464 of yacc.c  */
-#line 665 "type.y"
+#line 645 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 137:
 
 /* Line 1464 of yacc.c  */
-#line 666 "type.y"
+#line 646 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 138:
 
 /* Line 1464 of yacc.c  */
-#line 667 "type.y"
+#line 647 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 139:
 
 /* Line 1464 of yacc.c  */
-#line 671 "type.y"
+#line 651 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 140:
 
 /* Line 1464 of yacc.c  */
-#line 672 "type.y"
+#line 652 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 141:
 
 /* Line 1464 of yacc.c  */
-#line 673 "type.y"
+#line 653 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 142:
 
 /* Line 1464 of yacc.c  */
-#line 674 "type.y"
+#line 654 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 143:
 
 /* Line 1464 of yacc.c  */
-#line 675 "type.y"
+#line 655 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 144:
 
 /* Line 1464 of yacc.c  */
-#line 676 "type.y"
+#line 656 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 145:
 
 /* Line 1464 of yacc.c  */
-#line 677 "type.y"
+#line 657 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 146:
 
 /* Line 1464 of yacc.c  */
-#line 678 "type.y"
+#line 658 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 147:
 
 /* Line 1464 of yacc.c  */
-#line 679 "type.y"
+#line 659 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 148:
 
 /* Line 1464 of yacc.c  */
-#line 680 "type.y"
+#line 660 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 149:
 
 /* Line 1464 of yacc.c  */
-#line 684 "type.y"
+#line 664 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 150:
 
 /* Line 1464 of yacc.c  */
-#line 685 "type.y"
+#line 665 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 151:
 
 /* Line 1464 of yacc.c  */
-#line 686 "type.y"
+#line 666 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 152:
 
 /* Line 1464 of yacc.c  */
-#line 687 "type.y"
+#line 667 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 153:
 
 /* Line 1464 of yacc.c  */
-#line 688 "type.y"
+#line 668 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 154:
 
 /* Line 1464 of yacc.c  */
-#line 689 "type.y"
+#line 669 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 155:
 
 /* Line 1464 of yacc.c  */
-#line 690 "type.y"
+#line 670 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 156:
 
 /* Line 1464 of yacc.c  */
-#line 691 "type.y"
+#line 671 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 157:
 
 /* Line 1464 of yacc.c  */
-#line 692 "type.y"
+#line 672 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 158:
 
 /* Line 1464 of yacc.c  */
-#line 693 "type.y"
+#line 673 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 159:
 
 /* Line 1464 of yacc.c  */
-#line 694 "type.y"
+#line 674 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 160:
 
 /* Line 1464 of yacc.c  */
-#line 695 "type.y"
+#line 675 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 161:
 
 /* Line 1464 of yacc.c  */
-#line 699 "type.y"
+#line 679 "type.y"
     { (yyval.list) = (yyvsp[(1) - (1)].list); ;}
     break;
 
   case 162:
 
 /* Line 1464 of yacc.c  */
-#line 700 "type.y"
+#line 680 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 163:
 
 /* Line 1464 of yacc.c  */
-#line 704 "type.y"
+#line 684 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 164:
 
 /* Line 1464 of yacc.c  */
-#line 705 "type.y"
+#line 685 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 165:
 
 /* Line 1464 of yacc.c  */
-#line 706 "type.y"
+#line 686 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 166:
 
 /* Line 1464 of yacc.c  */
-#line 707 "type.y"
+#line 687 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 167:
 
 /* Line 1464 of yacc.c  */
-#line 708 "type.y"
+#line 688 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 168:
 
 /* Line 1464 of yacc.c  */
-#line 709 "type.y"
+#line 689 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 169:
 
 /* Line 1464 of yacc.c  */
-#line 710 "type.y"
+#line 690 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 170:
 
 /* Line 1464 of yacc.c  */
-#line 711 "type.y"
+#line 691 "type.y"
     { ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id)); ;}
     break;
 
   case 171:
 
 /* Line 1464 of yacc.c  */
-#line 713 "type.y"
+#line 693 "type.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -6251,17 +6231,9 @@ yyreduce:
   case 172:
 
 /* Line 1464 of yacc.c  */
-#line 731 "type.y"
+#line 701 "type.y"
     {
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -6270,103 +6242,93 @@ yyreduce:
   case 173:
 
 /* Line 1464 of yacc.c  */
-#line 747 "type.y"
+#line 709 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 174:
 
 /* Line 1464 of yacc.c  */
-#line 748 "type.y"
+#line 710 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 175:
 
 /* Line 1464 of yacc.c  */
-#line 749 "type.y"
+#line 711 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 176:
 
 /* Line 1464 of yacc.c  */
-#line 750 "type.y"
+#line 712 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 177:
 
 /* Line 1464 of yacc.c  */
-#line 751 "type.y"
+#line 713 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 178:
 
 /* Line 1464 of yacc.c  */
-#line 752 "type.y"
+#line 714 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 179:
 
 /* Line 1464 of yacc.c  */
-#line 753 "type.y"
+#line 715 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 180:
 
 /* Line 1464 of yacc.c  */
-#line 754 "type.y"
+#line 716 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 181:
 
 /* Line 1464 of yacc.c  */
-#line 755 "type.y"
+#line 717 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 182:
 
 /* Line 1464 of yacc.c  */
-#line 756 "type.y"
+#line 718 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 183:
 
 /* Line 1464 of yacc.c  */
-#line 757 "type.y"
+#line 719 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkSpecifierName((yyvsp[(1) - (1)].id).string)); FreeIdentifier((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 184:
 
 /* Line 1464 of yacc.c  */
-#line 758 "type.y"
+#line 720 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), MkSpecifierName((yyvsp[(2) - (2)].id).string)); FreeIdentifier((yyvsp[(2) - (2)].id));}
     break;
 
   case 185:
 
 /* Line 1464 of yacc.c  */
-#line 760 "type.y"
+#line 722 "type.y"
     {
-         // if($1._class && !$1._class.name)
-         if((yyvsp[(1) - (4)].id)._class)
-         {
-            char name[1024];
-            strcpy(name,  (yyvsp[(1) - (4)].id)._class.name ? (yyvsp[(1) - (4)].id)._class.name : "");
-            strcat(name, "::");
-            strcat(name, (yyvsp[(1) - (4)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(1) - (4)].id).string);
+         _DeclClass((yyvsp[(1) - (4)].id)._class, (yyvsp[(1) - (4)].id).string);
 
          (yyval.list) = MkList();
          ListAdd((yyval.list), MkSpecifierNameArgs((yyvsp[(1) - (4)].id).string, (yyvsp[(3) - (4)].list)));
@@ -6377,17 +6339,9 @@ yyreduce:
   case 186:
 
 /* Line 1464 of yacc.c  */
-#line 778 "type.y"
+#line 730 "type.y"
     {
-         if((yyvsp[(2) - (5)].id)._class && !(yyvsp[(2) - (5)].id)._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, (yyvsp[(2) - (5)].id).string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass((yyvsp[(2) - (5)].id).string);
+         _DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string);
          ListAdd((yyvsp[(1) - (5)].list), MkSpecifierNameArgs((yyvsp[(2) - (5)].id).string, (yyvsp[(4) - (5)].list)));
          FreeIdentifier((yyvsp[(2) - (5)].id));
       ;}
@@ -6396,658 +6350,658 @@ yyreduce:
   case 187:
 
 /* Line 1464 of yacc.c  */
-#line 794 "type.y"
+#line 738 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initDeclarator)); ;}
     break;
 
   case 188:
 
 /* Line 1464 of yacc.c  */
-#line 795 "type.y"
+#line 739 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initDeclarator)); ;}
     break;
 
   case 189:
 
 /* Line 1464 of yacc.c  */
-#line 799 "type.y"
+#line 743 "type.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (1)].declarator), null); (yyval.initDeclarator).loc = (yyloc); ;}
     break;
 
   case 190:
 
 /* Line 1464 of yacc.c  */
-#line 800 "type.y"
+#line 744 "type.y"
     { (yyval.initDeclarator) = MkInitDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].initializer)); (yyval.initDeclarator).loc = (yyloc); (yyval.initDeclarator).initializer.loc.start = (yylsp[(2) - (3)]).end; ;}
     break;
 
   case 191:
 
 /* Line 1464 of yacc.c  */
-#line 804 "type.y"
+#line 748 "type.y"
     { (yyval.specifier) = MkSpecifier(TYPEDEF); ;}
     break;
 
   case 192:
 
 /* Line 1464 of yacc.c  */
-#line 805 "type.y"
+#line 749 "type.y"
     { (yyval.specifier) = MkSpecifier(EXTERN); ;}
     break;
 
   case 193:
 
 /* Line 1464 of yacc.c  */
-#line 806 "type.y"
+#line 750 "type.y"
     { (yyval.specifier) = MkSpecifier(STATIC); ;}
     break;
 
   case 194:
 
 /* Line 1464 of yacc.c  */
-#line 807 "type.y"
+#line 751 "type.y"
     { (yyval.specifier) = MkSpecifier(AUTO); ;}
     break;
 
   case 195:
 
 /* Line 1464 of yacc.c  */
-#line 808 "type.y"
+#line 752 "type.y"
     { (yyval.specifier) = MkSpecifier(REGISTER); ;}
     break;
 
   case 196:
 
 /* Line 1464 of yacc.c  */
-#line 809 "type.y"
+#line 753 "type.y"
     { (yyval.specifier) = MkSpecifier(THREAD); ;}
     break;
 
   case 197:
 
 /* Line 1464 of yacc.c  */
-#line 813 "type.y"
+#line 757 "type.y"
     { (yyval.extDecl) = MkExtDeclString(CopyString(yytext)); ;}
     break;
 
   case 198:
 
 /* Line 1464 of yacc.c  */
-#line 814 "type.y"
+#line 758 "type.y"
     { (yyval.extDecl) = MkExtDeclString(CopyString(yytext)); ;}
     break;
 
   case 199:
 
 /* Line 1464 of yacc.c  */
-#line 815 "type.y"
+#line 759 "type.y"
     { (yyval.extDecl) = MkExtDeclAttrib((yyvsp[(1) - (1)].attrib)); ;}
     break;
 
   case 200:
 
 /* Line 1464 of yacc.c  */
-#line 819 "type.y"
+#line 763 "type.y"
     { (yyval.i) = ATTRIB; ;}
     break;
 
   case 201:
 
 /* Line 1464 of yacc.c  */
-#line 820 "type.y"
+#line 764 "type.y"
     { (yyval.i) = ATTRIB_DEP; ;}
     break;
 
   case 202:
 
 /* Line 1464 of yacc.c  */
-#line 821 "type.y"
+#line 765 "type.y"
     { (yyval.i) = __ATTRIB; ;}
     break;
 
   case 203:
 
 /* Line 1464 of yacc.c  */
-#line 826 "type.y"
+#line 770 "type.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 204:
 
 /* Line 1464 of yacc.c  */
-#line 827 "type.y"
+#line 771 "type.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 205:
 
 /* Line 1464 of yacc.c  */
-#line 828 "type.y"
+#line 772 "type.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 206:
 
 /* Line 1464 of yacc.c  */
-#line 829 "type.y"
+#line 773 "type.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 207:
 
 /* Line 1464 of yacc.c  */
-#line 830 "type.y"
+#line 774 "type.y"
     { (yyval.string)  = CopyString(yytext); ;}
     break;
 
   case 208:
 
 /* Line 1464 of yacc.c  */
-#line 834 "type.y"
+#line 778 "type.y"
     { (yyval.attribute) = MkAttribute((yyvsp[(1) - (1)].string), null); (yyval.attribute).loc = (yyloc); ;}
     break;
 
   case 209:
 
 /* Line 1464 of yacc.c  */
-#line 835 "type.y"
+#line 779 "type.y"
     { (yyval.attribute) = MkAttribute((yyvsp[(1) - (4)].string), MkExpBrackets((yyvsp[(3) - (4)].list))); (yyval.attribute).loc = (yyloc); ;}
     break;
 
   case 210:
 
 /* Line 1464 of yacc.c  */
-#line 839 "type.y"
+#line 783 "type.y"
     { (yyval.list) = MkListOne((yyvsp[(1) - (1)].attribute)); ;}
     break;
 
   case 211:
 
 /* Line 1464 of yacc.c  */
-#line 840 "type.y"
+#line 784 "type.y"
     { ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].attribute)); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 212:
 
 /* Line 1464 of yacc.c  */
-#line 841 "type.y"
+#line 785 "type.y"
     { ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].attribute)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 213:
 
 /* Line 1464 of yacc.c  */
-#line 845 "type.y"
+#line 789 "type.y"
     { (yyval.attrib) = MkAttrib((yyvsp[(1) - (6)].i), (yyvsp[(4) - (6)].list)); (yyval.attrib).loc = (yyloc); ;}
     break;
 
   case 214:
 
 /* Line 1464 of yacc.c  */
-#line 846 "type.y"
+#line 790 "type.y"
     { (yyval.attrib) = MkAttrib((yyvsp[(1) - (5)].i), null); (yyval.attrib).loc = (yyloc); ;}
     break;
 
   case 215:
 
 /* Line 1464 of yacc.c  */
-#line 850 "type.y"
+#line 794 "type.y"
     { (yyval.specifier) = MkSpecifierExtended((yyvsp[(1) - (1)].extDecl)); ;}
     break;
 
   case 216:
 
 /* Line 1464 of yacc.c  */
-#line 854 "type.y"
+#line 798 "type.y"
     { (yyval.specifier) = MkSpecifier(CONST); ;}
     break;
 
   case 217:
 
 /* Line 1464 of yacc.c  */
-#line 855 "type.y"
+#line 799 "type.y"
     { (yyval.specifier) = MkSpecifier(VOLATILE); ;}
     break;
 
   case 218:
 
 /* Line 1464 of yacc.c  */
-#line 856 "type.y"
+#line 800 "type.y"
     { (yyval.specifier) = (yyvsp[(1) - (1)].specifier); ;}
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
-#line 861 "type.y"
+#line 805 "type.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 220:
 
 /* Line 1464 of yacc.c  */
-#line 862 "type.y"
+#line 806 "type.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 221:
 
 /* Line 1464 of yacc.c  */
-#line 863 "type.y"
+#line 807 "type.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 222:
 
 /* Line 1464 of yacc.c  */
-#line 864 "type.y"
+#line 808 "type.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 223:
 
 /* Line 1464 of yacc.c  */
-#line 865 "type.y"
+#line 809 "type.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 224:
 
 /* Line 1464 of yacc.c  */
-#line 866 "type.y"
+#line 810 "type.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 225:
 
 /* Line 1464 of yacc.c  */
-#line 867 "type.y"
+#line 811 "type.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 226:
 
 /* Line 1464 of yacc.c  */
-#line 868 "type.y"
+#line 812 "type.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 227:
 
 /* Line 1464 of yacc.c  */
-#line 869 "type.y"
+#line 813 "type.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 228:
 
 /* Line 1464 of yacc.c  */
-#line 870 "type.y"
+#line 814 "type.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 229:
 
 /* Line 1464 of yacc.c  */
-#line 871 "type.y"
+#line 815 "type.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 230:
 
 /* Line 1464 of yacc.c  */
-#line 872 "type.y"
+#line 816 "type.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 231:
 
 /* Line 1464 of yacc.c  */
-#line 873 "type.y"
+#line 817 "type.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 232:
 
 /* Line 1464 of yacc.c  */
-#line 874 "type.y"
+#line 818 "type.y"
     { (yyval.specifier) = MkSpecifier(_BOOL); ;}
     break;
 
   case 233:
 
 /* Line 1464 of yacc.c  */
-#line 875 "type.y"
+#line 819 "type.y"
     { (yyval.specifier) = MkSpecifier(BOOL); ;}
     break;
 
   case 237:
 
 /* Line 1464 of yacc.c  */
-#line 879 "type.y"
+#line 823 "type.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 238:
 
 /* Line 1464 of yacc.c  */
-#line 880 "type.y"
+#line 824 "type.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 239:
 
 /* Line 1464 of yacc.c  */
-#line 881 "type.y"
-    { _DeclClass((yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
+#line 825 "type.y"
+    { _DeclClass((yyvsp[(3) - (4)].id)._class, (yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
     break;
 
   case 240:
 
 /* Line 1464 of yacc.c  */
-#line 882 "type.y"
+#line 826 "type.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 241:
 
 /* Line 1464 of yacc.c  */
-#line 883 "type.y"
+#line 827 "type.y"
     { (yyval.specifier) = MkSpecifier(TYPED_OBJECT); ;}
     break;
 
   case 242:
 
 /* Line 1464 of yacc.c  */
-#line 884 "type.y"
+#line 828 "type.y"
     { (yyval.specifier) = MkSpecifier(ANY_OBJECT); ;}
     break;
 
   case 243:
 
 /* Line 1464 of yacc.c  */
-#line 888 "type.y"
+#line 832 "type.y"
     { (yyval.specifier) = MkSpecifier(VOID); ;}
     break;
 
   case 244:
 
 /* Line 1464 of yacc.c  */
-#line 889 "type.y"
+#line 833 "type.y"
     { (yyval.specifier) = MkSpecifier(CHAR); ;}
     break;
 
   case 245:
 
 /* Line 1464 of yacc.c  */
-#line 890 "type.y"
+#line 834 "type.y"
     { (yyval.specifier) = MkSpecifier(SHORT); ;}
     break;
 
   case 246:
 
 /* Line 1464 of yacc.c  */
-#line 891 "type.y"
+#line 835 "type.y"
     { (yyval.specifier) = MkSpecifier(INT); ;}
     break;
 
   case 247:
 
 /* Line 1464 of yacc.c  */
-#line 892 "type.y"
+#line 836 "type.y"
     { (yyval.specifier) = MkSpecifier(UINT); ;}
     break;
 
   case 248:
 
 /* Line 1464 of yacc.c  */
-#line 893 "type.y"
+#line 837 "type.y"
     { (yyval.specifier) = MkSpecifier(INT64); ;}
     break;
 
   case 249:
 
 /* Line 1464 of yacc.c  */
-#line 894 "type.y"
+#line 838 "type.y"
     { (yyval.specifier) = MkSpecifier(VALIST); ;}
     break;
 
   case 250:
 
 /* Line 1464 of yacc.c  */
-#line 895 "type.y"
+#line 839 "type.y"
     { (yyval.specifier) = MkSpecifier(LONG); ;}
     break;
 
   case 251:
 
 /* Line 1464 of yacc.c  */
-#line 896 "type.y"
+#line 840 "type.y"
     { (yyval.specifier) = MkSpecifier(FLOAT); ;}
     break;
 
   case 252:
 
 /* Line 1464 of yacc.c  */
-#line 897 "type.y"
+#line 841 "type.y"
     { (yyval.specifier) = MkSpecifier(DOUBLE); ;}
     break;
 
   case 253:
 
 /* Line 1464 of yacc.c  */
-#line 898 "type.y"
+#line 842 "type.y"
     { (yyval.specifier) = MkSpecifier(SIGNED); ;}
     break;
 
   case 254:
 
 /* Line 1464 of yacc.c  */
-#line 899 "type.y"
+#line 843 "type.y"
     { (yyval.specifier) = MkSpecifier(UNSIGNED); ;}
     break;
 
   case 255:
 
 /* Line 1464 of yacc.c  */
-#line 900 "type.y"
+#line 844 "type.y"
     { (yyval.specifier) = MkSpecifier(EXTENSION); ;}
     break;
 
   case 256:
 
 /* Line 1464 of yacc.c  */
-#line 901 "type.y"
+#line 845 "type.y"
     { (yyval.specifier) = MkSpecifier(_BOOL); ;}
     break;
 
   case 257:
 
 /* Line 1464 of yacc.c  */
-#line 902 "type.y"
+#line 846 "type.y"
     { (yyval.specifier) = MkSpecifier(BOOL); ;}
     break;
 
   case 261:
 
 /* Line 1464 of yacc.c  */
-#line 906 "type.y"
+#line 850 "type.y"
     { (yyval.specifier) = MkSpecifierTypeOf((yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 262:
 
 /* Line 1464 of yacc.c  */
-#line 907 "type.y"
+#line 851 "type.y"
     { (yyval.specifier) = MkSpecifierSubClass((yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 263:
 
 /* Line 1464 of yacc.c  */
-#line 908 "type.y"
-    { _DeclClass((yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
+#line 852 "type.y"
+    { _DeclClass((yyvsp[(3) - (4)].id)._class, (yyvsp[(3) - (4)].id).string); (yyval.specifier) = MkSpecifierSubClass(MkSpecifierName((yyvsp[(3) - (4)].id).string)); FreeIdentifier((yyvsp[(3) - (4)].id)); ;}
     break;
 
   case 264:
 
 /* Line 1464 of yacc.c  */
-#line 909 "type.y"
+#line 853 "type.y"
     { (yyval.specifier) = MkSpecifier(THISCLASS); ;}
     break;
 
   case 265:
 
 /* Line 1464 of yacc.c  */
-#line 914 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id).string); ;}
+#line 858 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string); ;}
     break;
 
   case 266:
 
 /* Line 1464 of yacc.c  */
-#line 915 "type.y"
+#line 859 "type.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 267:
 
 /* Line 1464 of yacc.c  */
-#line 916 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), (yyvsp[(2) - (4)].id), null); if(declMode) DeclClass((yyvsp[(2) - (4)].id).string); ;}
+#line 860 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), (yyvsp[(2) - (4)].id), null); if(declMode) DeclClass((yyvsp[(2) - (4)].id)._class, (yyvsp[(2) - (4)].id).string); ;}
     break;
 
   case 268:
 
 /* Line 1464 of yacc.c  */
-#line 917 "type.y"
+#line 861 "type.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), null, null); ;}
     break;
 
   case 269:
 
 /* Line 1464 of yacc.c  */
-#line 919 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
+#line 863 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).nsSpec, (yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
     break;
 
   case 270:
 
 /* Line 1464 of yacc.c  */
-#line 921 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].id).string); ;}
+#line 865 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].id)._class, (yyvsp[(3) - (6)].id).string); ;}
     break;
 
   case 271:
 
 /* Line 1464 of yacc.c  */
-#line 922 "type.y"
+#line 866 "type.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), null, (yyvsp[(4) - (5)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (5)].extDecl); ;}
     break;
 
   case 272:
 
 /* Line 1464 of yacc.c  */
-#line 923 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(3) - (5)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (5)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (5)].id).string); ;}
+#line 867 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (5)].specifierType), (yyvsp[(3) - (5)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (5)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (5)].id)._class, (yyvsp[(3) - (5)].id).string); ;}
     break;
 
   case 273:
 
 /* Line 1464 of yacc.c  */
-#line 924 "type.y"
+#line 868 "type.y"
     { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (4)].specifierType), null, null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (4)].extDecl); ;}
     break;
 
   case 274:
 
 /* Line 1464 of yacc.c  */
-#line 926 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), MkIdentifier((yyvsp[(3) - (6)].specifier).name), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); ;}
+#line 870 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (6)].specifierType), MkIdentifier((yyvsp[(3) - (6)].specifier).name), (yyvsp[(5) - (6)].list)); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (6)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (6)].specifier).nsSpec, (yyvsp[(3) - (6)].specifier).name); FreeSpecifier((yyvsp[(3) - (6)].specifier)); ;}
     break;
 
   case 275:
 
 /* Line 1464 of yacc.c  */
-#line 930 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), (yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id).string); ;}
+#line 874 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), (yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ;}
     break;
 
   case 276:
 
 /* Line 1464 of yacc.c  */
-#line 932 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
+#line 876 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (2)].specifierType), MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 277:
 
 /* Line 1464 of yacc.c  */
-#line 935 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), (yyvsp[(3) - (3)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);if(declMode) DeclClass((yyvsp[(3) - (3)].id).string); ;}
+#line 879 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), (yyvsp[(3) - (3)].id), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl);if(declMode) DeclClass((yyvsp[(3) - (3)].id)._class, (yyvsp[(3) - (3)].id).string); ;}
     break;
 
   case 278:
 
 /* Line 1464 of yacc.c  */
-#line 937 "type.y"
-    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), MkIdentifier((yyvsp[(3) - (3)].specifier).name), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (3)].specifier).name); FreeSpecifier((yyvsp[(3) - (3)].specifier)); ;}
+#line 881 "type.y"
+    { (yyval.specifier) = MkStructOrUnion((yyvsp[(1) - (3)].specifierType), MkIdentifier((yyvsp[(3) - (3)].specifier).name), null); (yyval.specifier).extDeclStruct = (yyvsp[(2) - (3)].extDecl); if(declMode) DeclClass((yyvsp[(3) - (3)].specifier).nsSpec, (yyvsp[(3) - (3)].specifier).name); FreeSpecifier((yyvsp[(3) - (3)].specifier)); ;}
     break;
 
   case 279:
 
 /* Line 1464 of yacc.c  */
-#line 941 "type.y"
+#line 885 "type.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 280:
 
 /* Line 1464 of yacc.c  */
-#line 942 "type.y"
+#line 886 "type.y"
     { (yyval.templateDatatype) = MkTemplateDatatype((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 281:
 
 /* Line 1464 of yacc.c  */
-#line 947 "type.y"
+#line 891 "type.y"
     { (yyval.templateArgument) = MkTemplateTypeArgument(MkTemplateDatatype((yyvsp[(1) - (1)].list), null)); ;}
     break;
 
   case 282:
 
 /* Line 1464 of yacc.c  */
-#line 948 "type.y"
+#line 892 "type.y"
     { (yyval.templateArgument) = MkTemplateTypeArgument(MkTemplateDatatype((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator))); ;}
     break;
 
   case 283:
 
 /* Line 1464 of yacc.c  */
-#line 959 "type.y"
+#line 903 "type.y"
     { (yyval.templateArgument) = MkTemplateExpressionArgument((yyvsp[(1) - (1)].exp)); ;}
     break;
 
   case 286:
 
 /* Line 1464 of yacc.c  */
-#line 966 "type.y"
+#line 910 "type.y"
     { (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument); (yyval.templateArgument).name = (yyvsp[(1) - (3)].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 287:
 
 /* Line 1464 of yacc.c  */
-#line 968 "type.y"
+#line 912 "type.y"
     { (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument); (yyval.templateArgument).name = (yyvsp[(1) - (3)].id); (yyval.templateArgument).loc = (yyloc); ;}
     break;
 
   case 288:
 
 /* Line 1464 of yacc.c  */
-#line 970 "type.y"
+#line 914 "type.y"
     {
       (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument);
       if((yyvsp[(1) - (3)].templateDatatype).specifiers && (yyvsp[(1) - (3)].templateDatatype).specifiers->first)
@@ -7064,7 +7018,7 @@ yyreduce:
   case 289:
 
 /* Line 1464 of yacc.c  */
-#line 994 "type.y"
+#line 938 "type.y"
     {
       (yyval.templateArgument) = (yyvsp[(3) - (3)].templateArgument);
       if((yyvsp[(1) - (3)].templateDatatype).specifiers && (yyvsp[(1) - (3)].templateDatatype).specifiers->first)
@@ -7081,882 +7035,882 @@ yyreduce:
   case 290:
 
 /* Line 1464 of yacc.c  */
-#line 1008 "type.y"
+#line 952 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].templateArgument)); ;}
     break;
 
   case 291:
 
 /* Line 1464 of yacc.c  */
-#line 1009 "type.y"
+#line 953 "type.y"
     { ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].templateArgument)); ;}
     break;
 
   case 292:
 
 /* Line 1464 of yacc.c  */
-#line 1013 "type.y"
+#line 957 "type.y"
     { (yyval.specifierType) = structSpecifier; ;}
     break;
 
   case 293:
 
 /* Line 1464 of yacc.c  */
-#line 1014 "type.y"
+#line 958 "type.y"
     { (yyval.specifierType) = unionSpecifier; ;}
     break;
 
   case 294:
 
 /* Line 1464 of yacc.c  */
-#line 1018 "type.y"
+#line 962 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].classDef)); ;}
     break;
 
   case 295:
 
 /* Line 1464 of yacc.c  */
-#line 1019 "type.y"
+#line 963 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].classDef)); ;}
     break;
 
   case 296:
 
 /* Line 1464 of yacc.c  */
-#line 1023 "type.y"
+#line 967 "type.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); ;}
     break;
 
   case 297:
 
 /* Line 1464 of yacc.c  */
-#line 1027 "type.y"
+#line 971 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ((MemberInit)(yyval.list)->last).loc = (yyloc); ;}
     break;
 
   case 298:
 
 /* Line 1464 of yacc.c  */
-#line 1028 "type.y"
+#line 972 "type.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 299:
 
 /* Line 1464 of yacc.c  */
-#line 1033 "type.y"
+#line 977 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (9)].list), null, (yyvsp[(3) - (9)].id), (yyvsp[(6) - (9)].stmt), (yyvsp[(8) - (9)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 300:
 
 /* Line 1464 of yacc.c  */
-#line 1035 "type.y"
+#line 979 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (9)].list), null, (yyvsp[(3) - (9)].id), (yyvsp[(8) - (9)].stmt), (yyvsp[(6) - (9)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 301:
 
 /* Line 1464 of yacc.c  */
-#line 1037 "type.y"
+#line 981 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (7)].list), null, (yyvsp[(3) - (7)].id), (yyvsp[(6) - (7)].stmt), null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 302:
 
 /* Line 1464 of yacc.c  */
-#line 1039 "type.y"
+#line 983 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (7)].list), null, (yyvsp[(3) - (7)].id), null, (yyvsp[(6) - (7)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 303:
 
 /* Line 1464 of yacc.c  */
-#line 1041 "type.y"
+#line 985 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (5)].list), null, (yyvsp[(3) - (5)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 304:
 
 /* Line 1464 of yacc.c  */
-#line 1044 "type.y"
+#line 988 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (10)].list), (yyvsp[(3) - (10)].declarator), (yyvsp[(4) - (10)].id), (yyvsp[(7) - (10)].stmt), (yyvsp[(9) - (10)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 305:
 
 /* Line 1464 of yacc.c  */
-#line 1046 "type.y"
+#line 990 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (10)].list), (yyvsp[(3) - (10)].declarator), (yyvsp[(4) - (10)].id), (yyvsp[(9) - (10)].stmt), (yyvsp[(7) - (10)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 306:
 
 /* Line 1464 of yacc.c  */
-#line 1048 "type.y"
+#line 992 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (8)].list), (yyvsp[(3) - (8)].declarator), (yyvsp[(4) - (8)].id), (yyvsp[(7) - (8)].stmt), null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 307:
 
 /* Line 1464 of yacc.c  */
-#line 1050 "type.y"
+#line 994 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (8)].list), (yyvsp[(3) - (8)].declarator), (yyvsp[(4) - (8)].id), null, (yyvsp[(7) - (8)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 308:
 
 /* Line 1464 of yacc.c  */
-#line 1052 "type.y"
+#line 996 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (6)].list), (yyvsp[(3) - (6)].declarator), (yyvsp[(4) - (6)].id), null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 309:
 
 /* Line 1464 of yacc.c  */
-#line 1055 "type.y"
+#line 999 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (8)].list), null, null, (yyvsp[(5) - (8)].stmt), (yyvsp[(7) - (8)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 310:
 
 /* Line 1464 of yacc.c  */
-#line 1057 "type.y"
+#line 1001 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (8)].list), null, null, (yyvsp[(7) - (8)].stmt), (yyvsp[(5) - (8)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 311:
 
 /* Line 1464 of yacc.c  */
-#line 1059 "type.y"
+#line 1003 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (6)].list), null, null, (yyvsp[(5) - (6)].stmt), null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 312:
 
 /* Line 1464 of yacc.c  */
-#line 1061 "type.y"
+#line 1005 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (6)].list), null, null, null, (yyvsp[(5) - (6)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 313:
 
 /* Line 1464 of yacc.c  */
-#line 1063 "type.y"
+#line 1007 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (4)].list), null, null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 314:
 
 /* Line 1464 of yacc.c  */
-#line 1066 "type.y"
+#line 1010 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (9)].list), (yyvsp[(3) - (9)].declarator), null, (yyvsp[(6) - (9)].stmt), (yyvsp[(8) - (9)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 315:
 
 /* Line 1464 of yacc.c  */
-#line 1068 "type.y"
+#line 1012 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (9)].list), (yyvsp[(3) - (9)].declarator), null, (yyvsp[(8) - (9)].stmt), (yyvsp[(6) - (9)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 316:
 
 /* Line 1464 of yacc.c  */
-#line 1070 "type.y"
+#line 1014 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (7)].list), (yyvsp[(3) - (7)].declarator), null, (yyvsp[(6) - (7)].stmt), null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 317:
 
 /* Line 1464 of yacc.c  */
-#line 1072 "type.y"
+#line 1016 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (7)].list), (yyvsp[(3) - (7)].declarator), null, null, (yyvsp[(6) - (7)].stmt)); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 318:
 
 /* Line 1464 of yacc.c  */
-#line 1074 "type.y"
+#line 1018 "type.y"
     { (yyval.prop) = MkProperty((yyvsp[(2) - (5)].list), (yyvsp[(3) - (5)].declarator), null, null, null); (yyval.prop).loc = (yyloc); ;}
     break;
 
   case 319:
 
 /* Line 1464 of yacc.c  */
-#line 1078 "type.y"
+#line 1022 "type.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list), null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 320:
 
 /* Line 1464 of yacc.c  */
-#line 1079 "type.y"
+#line 1023 "type.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkStructDeclaration((yyvsp[(1) - (2)].list), null, null)); (yyval.classDef).decl.loc = (yyloc); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 321:
 
 /* Line 1464 of yacc.c  */
-#line 1080 "type.y"
+#line 1024 "type.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (2)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); ;}
     break;
 
   case 322:
 
 /* Line 1464 of yacc.c  */
-#line 1081 "type.y"
+#line 1025 "type.y"
     { (yyval.classDef) = MkClassDefDeclaration(MkDeclarationClassInst((yyvsp[(1) - (2)].instance))); (yyval.classDef).loc = (yyloc); (yyval.classDef).decl.loc = (yyloc); ;}
     break;
 
   case 323:
 
 /* Line 1464 of yacc.c  */
-#line 1082 "type.y"
+#line 1026 "type.y"
     { (yyval.classDef) = MkClassDefFunction((yyvsp[(1) - (1)].classFunction)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 324:
 
 /* Line 1464 of yacc.c  */
-#line 1083 "type.y"
+#line 1027 "type.y"
     { (yyval.classDef) = MkClassDefDefaultProperty((yyvsp[(1) - (2)].list)); if((yyvsp[(1) - (2)].list)->last) ((MemberInit)(yyvsp[(1) - (2)].list)->last).loc.end = (yylsp[(2) - (2)]).start; (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 325:
 
 /* Line 1464 of yacc.c  */
-#line 1084 "type.y"
+#line 1028 "type.y"
     { (yyval.classDef) = MkClassDefProperty((yyvsp[(1) - (1)].prop)); (yyval.classDef).loc = (yyloc); ;}
     break;
 
   case 326:
 
 /* Line 1464 of yacc.c  */
-#line 1085 "type.y"
+#line 1029 "type.y"
     { (yyval.classDef) = null; ;}
     break;
 
   case 327:
 
 /* Line 1464 of yacc.c  */
-#line 1090 "type.y"
+#line 1034 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].declarator)); ;}
     break;
 
   case 328:
 
 /* Line 1464 of yacc.c  */
-#line 1092 "type.y"
+#line 1036 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].declarator)); ;}
     break;
 
   case 329:
 
 /* Line 1464 of yacc.c  */
-#line 1097 "type.y"
+#line 1041 "type.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (1)].declarator), null); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 330:
 
 /* Line 1464 of yacc.c  */
-#line 1099 "type.y"
+#line 1043 "type.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (2)].declarator), null); (yyval.declarator).structDecl.attrib = (yyvsp[(2) - (2)].attrib); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 331:
 
 /* Line 1464 of yacc.c  */
-#line 1101 "type.y"
+#line 1045 "type.y"
     { (yyval.declarator) = MkStructDeclarator(null, (yyvsp[(2) - (2)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 332:
 
 /* Line 1464 of yacc.c  */
-#line 1103 "type.y"
+#line 1047 "type.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (3)].declarator), (yyvsp[(3) - (3)].exp));  (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 333:
 
 /* Line 1464 of yacc.c  */
-#line 1105 "type.y"
+#line 1049 "type.y"
     { (yyval.declarator) = MkStructDeclarator((yyvsp[(1) - (5)].declarator), (yyvsp[(3) - (5)].exp)); (yyval.declarator).structDecl.posExp = (yyvsp[(5) - (5)].exp); (yyval.declarator).loc = (yyloc); ;}
     break;
 
   case 334:
 
 /* Line 1464 of yacc.c  */
-#line 1109 "type.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id).string); ;}
+#line 1053 "type.y"
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (2)].id), null); if(declMode) DeclClass((yyvsp[(2) - (2)].id)._class, (yyvsp[(2) - (2)].id).string); ;}
     break;
 
   case 335:
 
 /* Line 1464 of yacc.c  */
-#line 1110 "type.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
+#line 1054 "type.y"
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (2)].specifier).name), null); if(declMode) DeclClass((yyvsp[(2) - (2)].specifier).nsSpec, (yyvsp[(2) - (2)].specifier).name); FreeSpecifier((yyvsp[(2) - (2)].specifier)); ;}
     break;
 
   case 336:
 
 /* Line 1464 of yacc.c  */
-#line 1115 "type.y"
+#line 1059 "type.y"
     { (yyval.specifier) = MkEnum(null, (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 337:
 
 /* Line 1464 of yacc.c  */
-#line 1116 "type.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id).string); ;}
+#line 1060 "type.y"
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (5)].id), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].id)._class, (yyvsp[(2) - (5)].id).string); ;}
     break;
 
   case 338:
 
 /* Line 1464 of yacc.c  */
-#line 1117 "type.y"
-    { (yyval.specifier) = MkEnum((yyvsp[(2) - (7)].id), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].id).string); ;}
+#line 1061 "type.y"
+    { (yyval.specifier) = MkEnum((yyvsp[(2) - (7)].id), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].id)._class, (yyvsp[(2) - (7)].id).string); ;}
     break;
 
   case 339:
 
 /* Line 1464 of yacc.c  */
-#line 1118 "type.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (7)].specifier).name), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].specifier).name); FreeSpecifier((yyvsp[(2) - (7)].specifier)); ;}
+#line 1062 "type.y"
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (7)].specifier).name), (yyvsp[(4) - (7)].list)); (yyval.specifier).definitions = (yyvsp[(6) - (7)].list); if(declMode) DeclClass((yyvsp[(2) - (7)].specifier).nsSpec, (yyvsp[(2) - (7)].specifier).name); FreeSpecifier((yyvsp[(2) - (7)].specifier)); ;}
     break;
 
   case 340:
 
 /* Line 1464 of yacc.c  */
-#line 1119 "type.y"
-    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
+#line 1063 "type.y"
+    { (yyval.specifier) = MkEnum(MkIdentifier((yyvsp[(2) - (5)].specifier).name), (yyvsp[(4) - (5)].list)); if(declMode) DeclClass((yyvsp[(2) - (5)].specifier).nsSpec, (yyvsp[(2) - (5)].specifier).name); FreeSpecifier((yyvsp[(2) - (5)].specifier)); ;}
     break;
 
   case 341:
 
 /* Line 1464 of yacc.c  */
-#line 1124 "type.y"
+#line 1068 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].enumerator)); ;}
     break;
 
   case 342:
 
 /* Line 1464 of yacc.c  */
-#line 1126 "type.y"
+#line 1070 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].enumerator)); ;}
     break;
 
   case 343:
 
 /* Line 1464 of yacc.c  */
-#line 1131 "type.y"
+#line 1075 "type.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[(1) - (1)].id), null); ;}
     break;
 
   case 344:
 
 /* Line 1464 of yacc.c  */
-#line 1133 "type.y"
+#line 1077 "type.y"
     { (yyval.enumerator) = MkEnumerator((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].exp)); ;}
     break;
 
   case 345:
 
 /* Line 1464 of yacc.c  */
-#line 1139 "type.y"
+#line 1083 "type.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 346:
 
 /* Line 1464 of yacc.c  */
-#line 1141 "type.y"
+#line 1085 "type.y"
     { (yyval.declarator) = MkDeclaratorArray(null, null); ;}
     break;
 
   case 347:
 
 /* Line 1464 of yacc.c  */
-#line 1143 "type.y"
+#line 1087 "type.y"
     { (yyval.declarator) = MkDeclaratorArray(null, (yyvsp[(2) - (3)].exp)); ;}
     break;
 
   case 348:
 
 /* Line 1464 of yacc.c  */
-#line 1145 "type.y"
+#line 1089 "type.y"
     { (yyval.declarator) = MkDeclaratorEnumArray(null, (yyvsp[(2) - (3)].specifier)); ;}
     break;
 
   case 349:
 
 /* Line 1464 of yacc.c  */
-#line 1147 "type.y"
+#line 1091 "type.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 350:
 
 /* Line 1464 of yacc.c  */
-#line 1149 "type.y"
+#line 1093 "type.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 351:
 
 /* Line 1464 of yacc.c  */
-#line 1151 "type.y"
+#line 1095 "type.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 352:
 
 /* Line 1464 of yacc.c  */
-#line 1153 "type.y"
+#line 1097 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 353:
 
 /* Line 1464 of yacc.c  */
-#line 1155 "type.y"
+#line 1099 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 354:
 
 /* Line 1464 of yacc.c  */
-#line 1157 "type.y"
+#line 1101 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 355:
 
 /* Line 1464 of yacc.c  */
-#line 1159 "type.y"
+#line 1103 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 356:
 
 /* Line 1464 of yacc.c  */
-#line 1164 "type.y"
+#line 1108 "type.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 357:
 
 /* Line 1464 of yacc.c  */
-#line 1166 "type.y"
+#line 1110 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, null); ;}
     break;
 
   case 358:
 
 /* Line 1464 of yacc.c  */
-#line 1168 "type.y"
+#line 1112 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction(null, (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 359:
 
 /* Line 1464 of yacc.c  */
-#line 1170 "type.y"
+#line 1114 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 360:
 
 /* Line 1464 of yacc.c  */
-#line 1172 "type.y"
+#line 1116 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].list)); ;}
     break;
 
   case 361:
 
 /* Line 1464 of yacc.c  */
-#line 1176 "type.y"
+#line 1120 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (1)].pointer), null); ;}
     break;
 
   case 363:
 
 /* Line 1464 of yacc.c  */
-#line 1178 "type.y"
+#line 1122 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 364:
 
 /* Line 1464 of yacc.c  */
-#line 1179 "type.y"
+#line 1123 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (2)].pointer), null)); ;}
     break;
 
   case 365:
 
 /* Line 1464 of yacc.c  */
-#line 1180 "type.y"
+#line 1124 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 366:
 
 /* Line 1464 of yacc.c  */
-#line 1181 "type.y"
+#line 1125 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 367:
 
 /* Line 1464 of yacc.c  */
-#line 1185 "type.y"
+#line 1129 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (1)].pointer), null); ;}
     break;
 
   case 369:
 
 /* Line 1464 of yacc.c  */
-#line 1187 "type.y"
+#line 1131 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 370:
 
 /* Line 1464 of yacc.c  */
-#line 1188 "type.y"
+#line 1132 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (2)].pointer), null)); ;}
     break;
 
   case 371:
 
 /* Line 1464 of yacc.c  */
-#line 1189 "type.y"
+#line 1133 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 372:
 
 /* Line 1464 of yacc.c  */
-#line 1190 "type.y"
+#line 1134 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 374:
 
 /* Line 1464 of yacc.c  */
-#line 1238 "type.y"
+#line 1182 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 375:
 
 /* Line 1464 of yacc.c  */
-#line 1240 "type.y"
+#line 1184 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 376:
 
 /* Line 1464 of yacc.c  */
-#line 1242 "type.y"
+#line 1186 "type.y"
     { (yyval.declarator) = MkDeclaratorExtendedEnd((yyvsp[(2) - (2)].extDecl), (yyvsp[(1) - (2)].declarator)); ;}
     break;
 
   case 377:
 
 /* Line 1464 of yacc.c  */
-#line 1247 "type.y"
+#line 1191 "type.y"
     { (yyval.declarator) = MkDeclaratorIdentifier((yyvsp[(1) - (1)].id)); ;}
     break;
 
   case 378:
 
 /* Line 1464 of yacc.c  */
-#line 1249 "type.y"
+#line 1193 "type.y"
     { (yyval.declarator) = MkDeclaratorBrackets((yyvsp[(2) - (3)].declarator)); ;}
     break;
 
   case 379:
 
 /* Line 1464 of yacc.c  */
-#line 1251 "type.y"
+#line 1195 "type.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].exp)); ;}
     break;
 
   case 380:
 
 /* Line 1464 of yacc.c  */
-#line 1253 "type.y"
+#line 1197 "type.y"
     { (yyval.declarator) = MkDeclaratorArray((yyvsp[(1) - (3)].declarator), null); ;}
     break;
 
   case 381:
 
 /* Line 1464 of yacc.c  */
-#line 1255 "type.y"
+#line 1199 "type.y"
     { (yyval.declarator) = MkDeclaratorEnumArray((yyvsp[(1) - (4)].declarator), (yyvsp[(3) - (4)].specifier)); ;}
     break;
 
   case 383:
 
 /* Line 1464 of yacc.c  */
-#line 1261 "type.y"
+#line 1205 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 384:
 
 /* Line 1464 of yacc.c  */
-#line 1264 "type.y"
+#line 1208 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 385:
 
 /* Line 1464 of yacc.c  */
-#line 1266 "type.y"
+#line 1210 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 386:
 
 /* Line 1464 of yacc.c  */
-#line 1268 "type.y"
+#line 1212 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 388:
 
 /* Line 1464 of yacc.c  */
-#line 1278 "type.y"
+#line 1222 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 389:
 
 /* Line 1464 of yacc.c  */
-#line 1280 "type.y"
+#line 1224 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (3)].declarator), (yyvsp[(2) - (3)].list)); ;}
     break;
 
   case 390:
 
 /* Line 1464 of yacc.c  */
-#line 1282 "type.y"
+#line 1226 "type.y"
     { (yyval.declarator) = MkDeclaratorFunction((yyvsp[(1) - (2)].declarator), null); ;}
     break;
 
   case 393:
 
 /* Line 1464 of yacc.c  */
-#line 1289 "type.y"
+#line 1233 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 394:
 
 /* Line 1464 of yacc.c  */
-#line 1291 "type.y"
+#line 1235 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 396:
 
 /* Line 1464 of yacc.c  */
-#line 1296 "type.y"
+#line 1240 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (2)].pointer), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 397:
 
 /* Line 1464 of yacc.c  */
-#line 1297 "type.y"
+#line 1241 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (2)].extDecl), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 398:
 
 /* Line 1464 of yacc.c  */
-#line 1298 "type.y"
+#line 1242 "type.y"
     { (yyval.declarator) = MkDeclaratorExtended((yyvsp[(1) - (3)].extDecl), MkDeclaratorPointer((yyvsp[(2) - (3)].pointer), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 399:
 
 /* Line 1464 of yacc.c  */
-#line 1299 "type.y"
+#line 1243 "type.y"
     { (yyval.declarator) = MkDeclaratorPointer((yyvsp[(1) - (3)].pointer), MkDeclaratorExtended((yyvsp[(2) - (3)].extDecl), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 400:
 
 /* Line 1464 of yacc.c  */
-#line 1303 "type.y"
+#line 1247 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].specifier)); ;}
     break;
 
   case 401:
 
 /* Line 1464 of yacc.c  */
-#line 1304 "type.y"
+#line 1248 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].specifier));  ;}
     break;
 
   case 402:
 
 /* Line 1464 of yacc.c  */
-#line 1308 "type.y"
+#line 1252 "type.y"
     { (yyval.pointer) = MkPointer(null, null); ;}
     break;
 
   case 403:
 
 /* Line 1464 of yacc.c  */
-#line 1309 "type.y"
+#line 1253 "type.y"
     { (yyval.pointer) = MkPointer((yyvsp[(2) - (2)].list), null); ;}
     break;
 
   case 404:
 
 /* Line 1464 of yacc.c  */
-#line 1310 "type.y"
+#line 1254 "type.y"
     { (yyval.pointer) = MkPointer(null, (yyvsp[(2) - (2)].pointer)); ;}
     break;
 
   case 405:
 
 /* Line 1464 of yacc.c  */
-#line 1311 "type.y"
+#line 1255 "type.y"
     { (yyval.pointer) = MkPointer((yyvsp[(2) - (3)].list), (yyvsp[(3) - (3)].pointer)); ;}
     break;
 
   case 407:
 
 /* Line 1464 of yacc.c  */
-#line 1316 "type.y"
+#line 1260 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, null)); ;}
     break;
 
   case 408:
 
 /* Line 1464 of yacc.c  */
-#line 1320 "type.y"
+#line 1264 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].typeName)); ;}
     break;
 
   case 409:
 
 /* Line 1464 of yacc.c  */
-#line 1321 "type.y"
+#line 1265 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typeName)); ;}
     break;
 
   case 410:
 
 /* Line 1464 of yacc.c  */
-#line 1325 "type.y"
+#line 1269 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 411:
 
 /* Line 1464 of yacc.c  */
-#line 1326 "type.y"
+#line 1270 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 412:
 
 /* Line 1464 of yacc.c  */
-#line 1327 "type.y"
+#line 1271 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), MkDeclaratorPointer(MkPointer(null,null), null)); ;}
     break;
 
   case 413:
 
 /* Line 1464 of yacc.c  */
-#line 1328 "type.y"
+#line 1272 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (3)].list), MkDeclaratorPointer(MkPointer(null,null), (yyvsp[(3) - (3)].declarator))); ;}
     break;
 
   case 414:
 
 /* Line 1464 of yacc.c  */
-#line 1329 "type.y"
+#line 1273 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 415:
 
 /* Line 1464 of yacc.c  */
-#line 1341 "type.y"
+#line 1285 "type.y"
     { (yyval.typeName) = MkTypeName(MkListOne(MkSpecifier(CLASS)), null); ;}
     break;
 
   case 416:
 
 /* Line 1464 of yacc.c  */
-#line 1365 "type.y"
+#line 1309 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(1) - (1)].id)))); ;}
     break;
 
   case 417:
 
 /* Line 1464 of yacc.c  */
-#line 1366 "type.y"
+#line 1310 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), MkTypeName(null, MkDeclaratorIdentifier((yyvsp[(3) - (3)].id)))); ;}
     break;
 
   case 418:
 
 /* Line 1464 of yacc.c  */
-#line 1370 "type.y"
+#line 1314 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 419:
 
 /* Line 1464 of yacc.c  */
-#line 1371 "type.y"
+#line 1315 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 420:
 
 /* Line 1464 of yacc.c  */
-#line 1375 "type.y"
+#line 1319 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 421:
 
 /* Line 1464 of yacc.c  */
-#line 1376 "type.y"
+#line 1320 "type.y"
     { (yyval.typeName) = MkTypeName((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declarator)); ;}
     break;
 
   case 422:
 
 /* Line 1464 of yacc.c  */
-#line 1381 "type.y"
+#line 1325 "type.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 423:
 
 /* Line 1464 of yacc.c  */
-#line 1383 "type.y"
+#line 1327 "type.y"
     { (yyval.initializer) = MkInitializerList((yyvsp[(2) - (3)].list)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 424:
 
 /* Line 1464 of yacc.c  */
-#line 1385 "type.y"
+#line 1329 "type.y"
     {
          (yyval.initializer) = MkInitializerList((yyvsp[(2) - (4)].list));
          (yyval.initializer).loc = (yyloc);
@@ -7974,119 +7928,119 @@ yyreduce:
   case 425:
 
 /* Line 1464 of yacc.c  */
-#line 1401 "type.y"
+#line 1345 "type.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 426:
 
 /* Line 1464 of yacc.c  */
-#line 1403 "type.y"
+#line 1347 "type.y"
     { (yyval.initializer) = MkInitializerAssignment((yyvsp[(1) - (1)].exp)); (yyval.initializer).loc = (yyloc); ;}
     break;
 
   case 427:
 
 /* Line 1464 of yacc.c  */
-#line 1425 "type.y"
+#line 1369 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].initializer)); ;}
     break;
 
   case 428:
 
 /* Line 1464 of yacc.c  */
-#line 1427 "type.y"
+#line 1371 "type.y"
     { (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].initializer)); ;}
     break;
 
   case 435:
 
 /* Line 1464 of yacc.c  */
-#line 1441 "type.y"
+#line 1385 "type.y"
     { (yyval.stmt) = MkLabeledStmt((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 436:
 
 /* Line 1464 of yacc.c  */
-#line 1443 "type.y"
+#line 1387 "type.y"
     { (yyval.stmt) = MkCaseStmt((yyvsp[(2) - (4)].exp), (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); (yyvsp[(2) - (4)].exp).loc.start = (yylsp[(1) - (4)]).end; ;}
     break;
 
   case 437:
 
 /* Line 1464 of yacc.c  */
-#line 1445 "type.y"
+#line 1389 "type.y"
     { (yyval.stmt) = MkCaseStmt(null, (yyvsp[(3) - (3)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 438:
 
 /* Line 1464 of yacc.c  */
-#line 1449 "type.y"
+#line 1393 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].declaration)); ;}
     break;
 
   case 439:
 
 /* Line 1464 of yacc.c  */
-#line 1450 "type.y"
+#line 1394 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].declaration)); ;}
     break;
 
   case 440:
 
 /* Line 1464 of yacc.c  */
-#line 1454 "type.y"
+#line 1398 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].stmt)); ;}
     break;
 
   case 441:
 
 /* Line 1464 of yacc.c  */
-#line 1455 "type.y"
+#line 1399 "type.y"
     { (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].stmt)); ;}
     break;
 
   case 442:
 
 /* Line 1464 of yacc.c  */
-#line 1458 "type.y"
+#line 1402 "type.y"
     { Statement stmt = MkBadDeclStmt((yyvsp[(2) - (2)].declaration)); stmt.loc = (yylsp[(2) - (2)]); /*yyerror(); */ ListAdd((yyvsp[(1) - (2)].list), stmt); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 443:
 
 /* Line 1464 of yacc.c  */
-#line 1462 "type.y"
+#line 1406 "type.y"
     { (yyval.stmt) = MkCompoundStmt(null, (yyvsp[(1) - (1)].list)); ;}
     break;
 
   case 444:
 
 /* Line 1464 of yacc.c  */
-#line 1463 "type.y"
+#line 1407 "type.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (1)].list), null); ;}
     break;
 
   case 445:
 
 /* Line 1464 of yacc.c  */
-#line 1464 "type.y"
+#line 1408 "type.y"
     { (yyval.stmt) = MkCompoundStmt((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); ;}
     break;
 
   case 446:
 
 /* Line 1464 of yacc.c  */
-#line 1468 "type.y"
+#line 1412 "type.y"
     { (yyval.context) = PushContext(); ;}
     break;
 
   case 447:
 
 /* Line 1464 of yacc.c  */
-#line 1473 "type.y"
+#line 1417 "type.y"
     {
       (yyval.stmt) = MkCompoundStmt(null, null);
       (yyval.stmt).compound.context = PushContext();
@@ -8098,371 +8052,371 @@ yyreduce:
   case 448:
 
 /* Line 1464 of yacc.c  */
-#line 1481 "type.y"
+#line 1425 "type.y"
     { (yyval.stmt) = (yyvsp[(2) - (3)].stmt); (yyval.stmt).compound.context = (yyvsp[(1) - (3)].context); PopContext((yyvsp[(1) - (3)].context)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 449:
 
 /* Line 1464 of yacc.c  */
-#line 1485 "type.y"
+#line 1429 "type.y"
     { (yyval.stmt) = MkExpressionStmt(null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 450:
 
 /* Line 1464 of yacc.c  */
-#line 1486 "type.y"
+#line 1430 "type.y"
     { (yyval.stmt) = MkExpressionStmt((yyvsp[(1) - (2)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 451:
 
 /* Line 1464 of yacc.c  */
-#line 1490 "type.y"
+#line 1434 "type.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt), null); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 452:
 
 /* Line 1464 of yacc.c  */
-#line 1491 "type.y"
+#line 1435 "type.y"
     { (yyval.stmt) = MkIfStmt((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].stmt), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 453:
 
 /* Line 1464 of yacc.c  */
-#line 1492 "type.y"
+#line 1436 "type.y"
     { (yyval.stmt) = MkSwitchStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 454:
 
 /* Line 1464 of yacc.c  */
-#line 1496 "type.y"
+#line 1440 "type.y"
     { (yyval.stmt) = MkWhileStmt((yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 455:
 
 /* Line 1464 of yacc.c  */
-#line 1497 "type.y"
+#line 1441 "type.y"
     { (yyval.stmt) = MkDoWhileStmt((yyvsp[(2) - (7)].stmt), (yyvsp[(5) - (7)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 456:
 
 /* Line 1464 of yacc.c  */
-#line 1498 "type.y"
+#line 1442 "type.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (6)].stmt), (yyvsp[(4) - (6)].stmt), null, (yyvsp[(6) - (6)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 457:
 
 /* Line 1464 of yacc.c  */
-#line 1499 "type.y"
+#line 1443 "type.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (7)].stmt), (yyvsp[(4) - (7)].stmt), (yyvsp[(5) - (7)].list), (yyvsp[(7) - (7)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 458:
 
 /* Line 1464 of yacc.c  */
-#line 1501 "type.y"
+#line 1445 "type.y"
     { (yyval.stmt) = MkWhileStmt(null, (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 459:
 
 /* Line 1464 of yacc.c  */
-#line 1502 "type.y"
+#line 1446 "type.y"
     { (yyval.stmt) = MkForStmt((yyvsp[(3) - (5)].stmt), null, null, (yyvsp[(5) - (5)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 460:
 
 /* Line 1464 of yacc.c  */
-#line 1503 "type.y"
+#line 1447 "type.y"
     { (yyval.stmt) = MkForStmt(null, null, null, (yyvsp[(4) - (4)].stmt)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 461:
 
 /* Line 1464 of yacc.c  */
-#line 1507 "type.y"
+#line 1451 "type.y"
     { (yyval.stmt) = MkGotoStmt((yyvsp[(2) - (3)].id)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 462:
 
 /* Line 1464 of yacc.c  */
-#line 1508 "type.y"
+#line 1452 "type.y"
     { (yyval.stmt) = MkContinueStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 463:
 
 /* Line 1464 of yacc.c  */
-#line 1509 "type.y"
+#line 1453 "type.y"
     { (yyval.stmt) = MkBreakStmt(); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 464:
 
 /* Line 1464 of yacc.c  */
-#line 1510 "type.y"
+#line 1454 "type.y"
     { Expression exp = MkExpDummy(); (yyval.stmt) = MkReturnStmt(MkListOne(exp)); (yyval.stmt).loc = (yyloc); exp.loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 465:
 
 /* Line 1464 of yacc.c  */
-#line 1511 "type.y"
+#line 1455 "type.y"
     { (yyval.stmt) = MkReturnStmt((yyvsp[(2) - (3)].list)); (yyval.stmt).loc = (yyloc); ;}
     break;
 
   case 466:
 
 /* Line 1464 of yacc.c  */
-#line 1515 "type.y"
+#line 1459 "type.y"
     { (yyval.string) = CopyString(yytext); ;}
     break;
 
   case 467:
 
 /* Line 1464 of yacc.c  */
-#line 1520 "type.y"
+#line 1464 "type.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(5) - (5)]).start;;}
     break;
 
   case 468:
 
 /* Line 1464 of yacc.c  */
-#line 1522 "type.y"
+#line 1466 "type.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), MkList());  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).start;;}
     break;
 
   case 469:
 
 /* Line 1464 of yacc.c  */
-#line 1527 "type.y"
+#line 1471 "type.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (5)].list), MkExpIdentifier((yyvsp[(2) - (5)].id)), (yyvsp[(4) - (5)].list)); (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (5)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (5)]).end; (yyval.instance).insideLoc.end = (yylsp[(5) - (5)]).start;;}
     break;
 
   case 470:
 
 /* Line 1464 of yacc.c  */
-#line 1529 "type.y"
+#line 1473 "type.y"
     { (yyval.instance) = MkInstantiationNamed((yyvsp[(1) - (4)].list), MkExpIdentifier((yyvsp[(2) - (4)].id)), MkList());  (yyval.instance).loc = (yyloc); (yyval.instance).nameLoc = (yylsp[(2) - (4)]); (yyval.instance).insideLoc.start = (yylsp[(3) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).start;;}
     break;
 
   case 471:
 
 /* Line 1464 of yacc.c  */
-#line 1554 "type.y"
+#line 1498 "type.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (4)].specifier), null, (yyvsp[(3) - (4)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).start; ;}
     break;
 
   case 472:
 
 /* Line 1464 of yacc.c  */
-#line 1556 "type.y"
+#line 1500 "type.y"
     { (yyval.instance) = MkInstantiation((yyvsp[(1) - (3)].specifier), null, MkList());  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).start;;}
     break;
 
   case 473:
 
 /* Line 1464 of yacc.c  */
-#line 1558 "type.y"
+#line 1502 "type.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (4)]); yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (4)].id).string), null, (yyvsp[(3) - (4)].list));(yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (4)]).end; (yyval.instance).insideLoc.end = (yylsp[(4) - (4)]).start; FreeIdentifier((yyvsp[(1) - (4)].id)); ;}
     break;
 
   case 474:
 
 /* Line 1464 of yacc.c  */
-#line 1560 "type.y"
+#line 1504 "type.y"
     { Location tmpLoc = yylloc; yylloc = (yylsp[(1) - (3)]); yylloc = tmpLoc;  (yyval.instance) = MkInstantiation(MkSpecifierName((yyvsp[(1) - (3)].id).string), null, MkList());  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(2) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).start; FreeIdentifier((yyvsp[(1) - (3)].id)); ;}
     break;
 
   case 475:
 
 /* Line 1464 of yacc.c  */
-#line 1565 "type.y"
+#line 1509 "type.y"
     { (yyval.instance) = MkInstantiation(null, null, (yyvsp[(2) - (3)].list));  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (3)]).end; (yyval.instance).insideLoc.end = (yylsp[(3) - (3)]).start; ;}
     break;
 
   case 476:
 
 /* Line 1464 of yacc.c  */
-#line 1567 "type.y"
+#line 1511 "type.y"
     { (yyval.instance) = MkInstantiation(null, null, MkList());  (yyval.instance).loc = (yyloc); (yyval.instance).insideLoc.start = (yylsp[(1) - (2)]).end; (yyval.instance).insideLoc.end = (yylsp[(2) - (2)]).start;;}
     break;
 
   case 477:
 
 /* Line 1464 of yacc.c  */
-#line 1571 "type.y"
+#line 1515 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 478:
 
 /* Line 1464 of yacc.c  */
-#line 1573 "type.y"
+#line 1517 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 479:
 
 /* Line 1464 of yacc.c  */
-#line 1575 "type.y"
+#line 1519 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 480:
 
 /* Line 1464 of yacc.c  */
-#line 1577 "type.y"
+#line 1521 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 481:
 
 /* Line 1464 of yacc.c  */
-#line 1579 "type.y"
+#line 1523 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 482:
 
 /* Line 1464 of yacc.c  */
-#line 1585 "type.y"
+#line 1529 "type.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 483:
 
 /* Line 1464 of yacc.c  */
-#line 1587 "type.y"
+#line 1531 "type.y"
     { (yyval.classFunction) = MkClassFunction((yyvsp[(1) - (2)].list), null, (yyvsp[(2) - (2)].declarator), null); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 484:
 
 /* Line 1464 of yacc.c  */
-#line 1592 "type.y"
+#line 1536 "type.y"
     { ProcessClassFunctionBody((yyvsp[(1) - (2)].classFunction), (yyvsp[(2) - (2)].stmt)); (yyval.classFunction).loc = (yyloc); ;}
     break;
 
   case 485:
 
 /* Line 1464 of yacc.c  */
-#line 1596 "type.y"
+#line 1540 "type.y"
     { (yyval.memberInit) = MkMemberInitExp((yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc); (yyval.memberInit).initializer.loc.start = (yylsp[(2) - (3)]).end;;}
     break;
 
   case 486:
 
 /* Line 1464 of yacc.c  */
-#line 1597 "type.y"
+#line 1541 "type.y"
     { (yyval.memberInit) = MkMemberInit(null, (yyvsp[(1) - (1)].initializer)); (yyval.memberInit).loc = (yyloc); (yyval.memberInit).realLoc = (yyloc);;}
     break;
 
   case 487:
 
 /* Line 1464 of yacc.c  */
-#line 1602 "type.y"
+#line 1546 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), (yyvsp[(1) - (1)].memberInit)); ;}
     break;
 
   case 488:
 
 /* Line 1464 of yacc.c  */
-#line 1604 "type.y"
+#line 1548 "type.y"
     { ((MemberInit)(yyvsp[(1) - (3)].list)->last).loc.end = (yylsp[(3) - (3)]).start; ListAdd((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].memberInit)); (yyval.list) = (yyvsp[(1) - (3)].list); ;}
     break;
 
   case 489:
 
 /* Line 1464 of yacc.c  */
-#line 1609 "type.y"
+#line 1553 "type.y"
     { if((yyvsp[(1) - (2)].list)->last) ((MemberInit)(yyvsp[(1) - (2)].list)->last).loc.end = (yylsp[(2) - (2)]).end; (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 490:
 
 /* Line 1464 of yacc.c  */
-#line 1613 "type.y"
+#line 1557 "type.y"
     { MembersInit members = MkMembersInitList((yyvsp[(1) - (1)].list)); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 491:
 
 /* Line 1464 of yacc.c  */
-#line 1614 "type.y"
+#line 1558 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(1) - (1)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 492:
 
 /* Line 1464 of yacc.c  */
-#line 1615 "type.y"
+#line 1559 "type.y"
     { MembersInit members = MkMembersInitList((yyvsp[(2) - (2)].list)); ListAdd((yyval.list), members); members.loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list);  ;}
     break;
 
   case 493:
 
 /* Line 1464 of yacc.c  */
-#line 1616 "type.y"
+#line 1560 "type.y"
     { ListAdd((yyval.list), MkMembersInitMethod((yyvsp[(2) - (2)].classFunction))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]);(yyval.list) = (yyvsp[(1) - (2)].list);  ;}
     break;
 
   case 494:
 
 /* Line 1464 of yacc.c  */
-#line 1617 "type.y"
+#line 1561 "type.y"
     { MembersInit members = MkMembersInitList(MkList()); (yyval.list) = MkList(); ListAdd((yyval.list), members); members.loc = (yylsp[(1) - (1)]);  ;}
     break;
 
   case 495:
 
 /* Line 1464 of yacc.c  */
-#line 1618 "type.y"
+#line 1562 "type.y"
     { MembersInit members = MkMembersInitList(MkList()); ListAdd((yyval.list), members); members.loc = (yylsp[(2) - (2)]); (yyval.list) = (yyvsp[(1) - (2)].list); ;}
     break;
 
   case 497:
 
 /* Line 1464 of yacc.c  */
-#line 1623 "type.y"
+#line 1567 "type.y"
     { (yyval.list) = MkList(); ListAdd((yyval.list), MkMembersInitList((yyvsp[(1) - (1)].list))); ((MembersInit)(yyval.list)->last).loc = (yylsp[(1) - (1)]); ;}
     break;
 
   case 498:
 
 /* Line 1464 of yacc.c  */
-#line 1624 "type.y"
+#line 1568 "type.y"
     { ListAdd((yyvsp[(1) - (2)].list), MkMembersInitList((yyvsp[(2) - (2)].list)));   ((MembersInit)(yyval.list)->last).loc = (yylsp[(2) - (2)]); ;}
     break;
 
   case 499:
 
 /* Line 1464 of yacc.c  */
-#line 1628 "type.y"
+#line 1572 "type.y"
     { parsedType = (yyvsp[(1) - (1)].typeName); ;}
     break;
 
   case 500:
 
 /* Line 1464 of yacc.c  */
-#line 1629 "type.y"
+#line 1573 "type.y"
     { parsedType = (yyvsp[(1) - (3)].typeName); parsedType.bitCount = (yyvsp[(3) - (3)].exp); ;}
     break;
 
 
 
 /* Line 1464 of yacc.c  */
-#line 8466 "type.ec"
+#line 8420 "type.ec"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8681,6 +8635,6 @@ yyreturn:
 
 
 /* Line 1684 of yacc.c  */
-#line 1632 "type.y"
+#line 1576 "type.y"
 
 
index 3bdf322..4e1339c 100644 (file)
@@ -229,7 +229,7 @@ guess_type:
    identifier '*'
    {
       $$ = null;
-      DeclClass($1.string);
+      DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       resetScannerPos(&@1.start);
       yyclearin;
@@ -248,17 +248,7 @@ guess_type:
    {
       $$ = null;
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
 
       FreeIdentifier($1);
 
@@ -280,7 +270,7 @@ guess_type:
 real_guess_type:
    identifier error
    {
-      DeclClass($1.string);
+      DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       parseTypeError = 0;
       resetScannerPos(&@1.start);
@@ -298,17 +288,7 @@ real_guess_type:
 /*   | identifier '<'
    {
    #ifdef PRECOMPILER
-      // if($1._class && !$1._class.name)
-      if($1._class)
-      {
-         char name[1024];
-         strcpy(name,  $1._class.name ? $1._class.name : "");
-         strcat(name, "::");
-         strcat(name, $1.string);
-         _DeclClass(name);
-      }
-      else
-         _DeclClass($1.string);
+      _DeclClass($1._class, $1.string);
 
       FreeIdentifier($1);
 
@@ -332,7 +312,7 @@ type:
    | identifier identifier
    {
    #ifdef PRECOMPILER
-      DeclClass($1.string);
+      DeclClass($1._class, $1.string);
       fileInput.Seek(@1.start.pos, start);
       resetScannerPos(&@1.start);
       yyclearin;
@@ -711,17 +691,7 @@ property_specifiers:
    | property_specifiers identifier          { ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2); }
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -729,15 +699,7 @@ property_specifiers:
       }
    | property_specifiers identifier '<' template_arguments_list '>'
       {
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -758,17 +720,7 @@ renew_specifiers:
    | renew_specifiers identifier          { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
    | identifier '<' template_arguments_list '>'
       {
-         // if($1._class && !$1._class.name)
-         if($1._class)
-         {
-            char name[1024];
-            strcpy(name,  $1._class.name ? $1._class.name : "");
-            strcat(name, "::");
-            strcat(name, $1.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($1.string);
+         _DeclClass($1._class, $1.string);
 
          $$ = MkList();
          ListAdd($$, MkSpecifierNameArgs($1.string, $3));
@@ -776,15 +728,7 @@ renew_specifiers:
       }
    | renew_specifiers identifier '<' template_arguments_list '>'
       {
-         if($2._class && !$2._class.name)
-         {
-            char name[1024];
-            strcpy(name, "::");
-            strcat(name, $2.string);
-            _DeclClass(name);
-         }
-         else
-            _DeclClass($2.string);
+         _DeclClass($2._class, $2.string);
          ListAdd($1, MkSpecifierNameArgs($2.string, $4));
          FreeIdentifier($2);
       }
@@ -878,7 +822,7 @@ type_specifier:
        | type
    | TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
    | SUBCLASS '(' type ')'                { $$ = MkSpecifierSubClass($3); }
-   | SUBCLASS '(' identifier ')'          { _DeclClass($3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+   | SUBCLASS '(' identifier ')'          { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
    | THISCLASS       { $$ = MkSpecifier(THISCLASS); }
    | TYPED_OBJECT    { $$ = MkSpecifier(TYPED_OBJECT); }
    | ANY_OBJECT      { $$ = MkSpecifier(ANY_OBJECT); }
@@ -905,36 +849,36 @@ strict_type_specifier:
        | strict_type
    | TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
    | SUBCLASS '(' type ')'                { $$ = MkSpecifierSubClass($3); }
-   | SUBCLASS '(' identifier ')'          { _DeclClass($3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+   | SUBCLASS '(' identifier ')'          { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
    | THISCLASS       { $$ = MkSpecifier(THISCLASS); }
        ;
 
 
 struct_or_union_specifier_compound:
-         struct_or_union identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $2, $4); if(declMode) DeclClass($2.string); }
+         struct_or_union identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $2, $4); if(declMode) DeclClass($2._class, $2.string); }
        | struct_or_union '{' struct_declaration_list '}'              { $$ = MkStructOrUnion($1, null, $3); }
-   | struct_or_union identifier '{' '}'   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2.string); }
+   | struct_or_union identifier '{' '}'   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2._class, $2.string); }
    | struct_or_union '{' '}'              { $$ = MkStructOrUnion($1, null, null); }
        | struct_or_union base_strict_type '{' struct_declaration_list '}'
-      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), $4); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), $4); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
 
-       | struct_or_union ext_decl identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $3, $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.string); }
+       | struct_or_union ext_decl identifier '{' struct_declaration_list '}'   { $$ = MkStructOrUnion($1, $3, $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3._class, $3.string); }
        | struct_or_union ext_decl '{' struct_declaration_list '}'              { $$ = MkStructOrUnion($1, null, $4); $$.extDeclStruct = $2; }
-   | struct_or_union ext_decl identifier '{' '}'   { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.string); }
+   | struct_or_union ext_decl identifier '{' '}'   { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2; if(declMode) DeclClass($3._class, $3.string); }
    | struct_or_union ext_decl '{' '}'              { $$ = MkStructOrUnion($1, null, null); $$.extDeclStruct = $2; }
        | struct_or_union ext_decl strict_type '{' struct_declaration_list '}'
-      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.name); FreeSpecifier($3); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), $5); $$.extDeclStruct = $2; if(declMode) DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); }
        ;
 
 struct_or_union_specifier_nocompound:
-         struct_or_union identifier                                   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2.string); }
+         struct_or_union identifier                                   { $$ = MkStructOrUnion($1, $2, null); if(declMode) DeclClass($2._class, $2.string); }
        | struct_or_union strict_type
-      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), null); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($2.name), null); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
 
        | struct_or_union ext_decl identifier
-      { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2;if(declMode) DeclClass($3.string); }
+      { $$ = MkStructOrUnion($1, $3, null); $$.extDeclStruct = $2;if(declMode) DeclClass($3._class, $3.string); }
        | struct_or_union ext_decl strict_type
-      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.name); FreeSpecifier($3); }
+      { $$ = MkStructOrUnion($1, MkIdentifier($3.name), null); $$.extDeclStruct = $2; if(declMode) DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); }
        ;
 
 template_datatype:
@@ -1106,17 +1050,17 @@ struct_declarator:
        ;
 
 enum_specifier_nocompound:
-     ENUM identifier                            { $$ = MkEnum($2, null); if(declMode) DeclClass($2.string); }
-   | ENUM strict_type                           { $$ = MkEnum(MkIdentifier($2.name), null); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+     ENUM identifier                            { $$ = MkEnum($2, null); if(declMode) DeclClass($2._class, $2.string); }
+   | ENUM strict_type                           { $$ = MkEnum(MkIdentifier($2.name), null); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
    ;
 
 enum_specifier_compound:
          ENUM '{' enumerator_list '}'
       { $$ = MkEnum(null, $3); }
-       | ENUM identifier '{' enumerator_list '}'    { $$ = MkEnum($2, $4); if(declMode) DeclClass($2.string); }
-   | ENUM identifier '{' enumerator_list ';' struct_declaration_list '}'    { $$ = MkEnum($2, $4); $$.definitions = $6; if(declMode) DeclClass($2.string); }
-       | ENUM strict_type '{' enumerator_list ';' struct_declaration_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); $$.definitions = $6; if(declMode) DeclClass($2.name); FreeSpecifier($2); }
-   | ENUM strict_type '{' enumerator_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); if(declMode) DeclClass($2.name); FreeSpecifier($2); }
+       | ENUM identifier '{' enumerator_list '}'    { $$ = MkEnum($2, $4); if(declMode) DeclClass($2._class, $2.string); }
+   | ENUM identifier '{' enumerator_list ';' struct_declaration_list '}'    { $$ = MkEnum($2, $4); $$.definitions = $6; if(declMode) DeclClass($2._class, $2.string); }
+       | ENUM strict_type '{' enumerator_list ';' struct_declaration_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); $$.definitions = $6; if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
+   | ENUM strict_type '{' enumerator_list '}'          { $$ = MkEnum(MkIdentifier($2.name), $4); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
        ;
 
 enumerator_list:
index 8bbff11..bf95c0f 100644 (file)
@@ -94,7 +94,7 @@ private:
 
 public class Angle : double;
 
-public class unichar : uint32
+public class ::unichar : uint32
 {
 
    const char * OnGetString(char * tempString, void * fieldData, bool * needClass)
@@ -112,6 +112,11 @@ public class unichar : uint32
 
 };
 
+// Forward declarations to hook on to libec:
+class ::Type;
+class ::Instantiation;
+class ::ClassDefinition;
+
 public class Property : struct
 {
 public:
index 0c0d503..963398f 100644 (file)
@@ -3,6 +3,7 @@ namespace gfx::bitmaps;
 import "Display"
 
 #include <setjmp.h>
+#include <stdio.h>
 
 #include "jpeglib.h"
 #include "jerror.h"
index 53a3b35..b145fa6 100644 (file)
@@ -324,6 +324,9 @@ typedef HDC (APIENTRY * PFNWGLGETPBUFFERDCARBPROC) (void * hPbuffer);
 typedef int (APIENTRY * PFNWGLRELEASEPBUFFERDCARBPROC) (void * hPbuffer, HDC hDC);
 typedef BOOL (APIENTRY * PFNWGLDESTROYPBUFFERARBPROC) (void * hPbuffer);
 typedef BOOL (APIENTRY * PFNWGLQUERYPBUFFERARBPROC) (void * hPbuffer, int iAttribute, int *piValue);
+typedef const char * (APIENTRY * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+typedef BOOL (APIENTRY * PFNWGLBINDTEXIMAGEARBPROC) (void * hPbuffer, int iBuffer);
+typedef BOOL (APIENTRY * PFNWGLRELEASETEXIMAGEARBPROC) (void * hPbuffer, int iBuffer);
 
 static PFNGLMAPBUFFERARBPROC glMapBufferARB = null;
 static PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB = null;
index f9b965c..528fe59 100644 (file)
@@ -5,6 +5,9 @@ namespace sys;
 import "System"
 
 default:
+
+typedef struct _DualPipe _DualPipe;
+
 // IMPLEMENTATION OF THESE IS IN _DualPipe.c
 void DualPipe_Destructor(_DualPipe * dp);
 void DualPipe_CloseInput(_DualPipe * dp);
index 001857a..9dd9459 100644 (file)
@@ -859,6 +859,10 @@ public:
    // property bool { };
 };
 
+#ifdef ECERE_BOOTSTRAP
+public class SecSince1970 : int64;
+#endif
+
 public struct FileStats
 {
    FileAttribs attribs;
index 4dff132..75c5f0d 100644 (file)
@@ -34,6 +34,12 @@ default:
 #undef uint
 #undef set
 
+import "Array"
+import "i18n"
+import "File"
+import "TempFile"
+import "memory"
+
 default:
 FILE *eC_stdout(void);
 FILE *eC_stderr(void);
@@ -55,12 +61,6 @@ void System_GetFreeSpace(const char * path, FileSize64 * size);
 
 private:
 
-import "Array"
-import "i18n"
-import "File"
-import "TempFile"
-import "memory"
-
 #if !defined(ECERE_BOOTSTRAP)
 import "units"
 import "Time"
@@ -487,6 +487,7 @@ private struct System
    ErrorCode lastErrorCode;
    ErrorLevel errorLevel;
 
+#ifndef ECERE_BOOTSTRAP
    Semaphore eventSemaphore;
 
    //FileSystem fileSystems;
@@ -496,6 +497,7 @@ private struct System
    Mutex fileMonitorMutex;
    Thread fileMonitorThread;
    bool systemTerminate;
+#endif
 };
 
 System globalSystem;