From 083afa0d843cfd28b6b3b67359fefee97a5359fd Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Sun, 3 Feb 2013 19:17:57 -0500 Subject: [PATCH] compiler/ecere: completed intptr/uintptr support --- compiler/bootstrap/ecc/bootstrap/ecc.c | 6 +- compiler/bootstrap/ecc/bootstrap/ecc.main.c | 3 +- compiler/bootstrap/ecere/bootstrap/AVLTree.c | 3 +- compiler/bootstrap/ecere/bootstrap/Array.c | 3 +- compiler/bootstrap/ecere/bootstrap/BTNode.c | 19 +- compiler/bootstrap/ecere/bootstrap/BinaryTree.c | 25 +-- compiler/bootstrap/ecere/bootstrap/BufferedFile.c | 3 +- .../bootstrap/ecere/bootstrap/BuiltInContainer.c | 3 +- compiler/bootstrap/ecere/bootstrap/Container.c | 3 +- compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c | 3 +- compiler/bootstrap/ecere/bootstrap/DualPipe.c | 3 +- compiler/bootstrap/ecere/bootstrap/File.c | 3 +- compiler/bootstrap/ecere/bootstrap/LinkList.c | 3 +- compiler/bootstrap/ecere/bootstrap/List.c | 3 +- compiler/bootstrap/ecere/bootstrap/Map.c | 3 +- compiler/bootstrap/ecere/bootstrap/OldList.c | 3 +- compiler/bootstrap/ecere/bootstrap/String.c | 3 +- compiler/bootstrap/ecere/bootstrap/System.c | 3 +- compiler/bootstrap/ecere/bootstrap/TempFile.c | 3 +- compiler/bootstrap/ecere/bootstrap/dataTypes.c | 81 +++++++- compiler/bootstrap/ecere/bootstrap/ecere.main.c | 6 +- compiler/bootstrap/ecere/bootstrap/i18n.c | 3 +- compiler/bootstrap/ecere/bootstrap/instance.c | 7 +- compiler/bootstrap/ecere/bootstrap/memory.c | 3 +- compiler/bootstrap/ecp/bootstrap/ecp.c | 5 +- compiler/bootstrap/ecp/bootstrap/ecp.main.c | 3 +- compiler/bootstrap/ecs/bootstrap/ecs.c | 3 +- compiler/bootstrap/ecs/bootstrap/ecs.main.c | 3 +- compiler/bootstrap/libec/bootstrap/ast.c | 9 +- compiler/bootstrap/libec/bootstrap/copy.c | 3 +- compiler/bootstrap/libec/bootstrap/dbpass.c | 3 +- compiler/bootstrap/libec/bootstrap/ec.main.c | 3 +- compiler/bootstrap/libec/bootstrap/ecdefs.c | 12 +- compiler/bootstrap/libec/bootstrap/expression.c | 3 +- compiler/bootstrap/libec/bootstrap/firstPass.c | 5 +- compiler/bootstrap/libec/bootstrap/freeAst.c | 3 +- compiler/bootstrap/libec/bootstrap/grammar.c | 3 +- compiler/bootstrap/libec/bootstrap/lexer.c | 3 +- compiler/bootstrap/libec/bootstrap/loadSymbols.c | 9 +- compiler/bootstrap/libec/bootstrap/output.c | 3 +- compiler/bootstrap/libec/bootstrap/pass0.c | 3 +- compiler/bootstrap/libec/bootstrap/pass1.c | 5 +- compiler/bootstrap/libec/bootstrap/pass15.c | 228 ++++++++++++++++++++- compiler/bootstrap/libec/bootstrap/pass16.c | 3 +- compiler/bootstrap/libec/bootstrap/pass2.c | 9 +- compiler/bootstrap/libec/bootstrap/pass3.c | 7 +- compiler/bootstrap/libec/bootstrap/shortcuts.c | 3 +- compiler/bootstrap/libec/bootstrap/type.c | 3 +- compiler/ecc/ecc.ec | 2 +- compiler/libec/locale/ec.pot | 150 +++++++------- compiler/libec/src/ast.ec | 4 +- compiler/libec/src/ecdefs.ec | 4 +- compiler/libec/src/loadSymbols.ec | 2 +- compiler/libec/src/pass15.ec | 106 +++++++++- compiler/libec/src/pass2.ec | 3 + compiler/libec/src/pass3.ec | 2 + ecere/src/com/dataTypes.ec | 10 +- ecere/src/com/instance.ec | 10 +- ecere/src/gfx/drivers/LFBDisplayDriver.ec | 26 +-- ecere/src/net/HTTPFile.ec | 2 +- ecere/src/sys/unicode.ec | 6 +- 61 files changed, 652 insertions(+), 207 deletions(-) diff --git a/compiler/bootstrap/ecc/bootstrap/ecc.c b/compiler/bootstrap/ecc/bootstrap/ecc.c index 1026c46..5712e49 100644 --- a/compiler/bootstrap/ecc/bootstrap/ecc.c +++ b/compiler/bootstrap/ecc/bootstrap/ecc.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -681,7 +682,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData; struct GlobalData { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -1141,6 +1142,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(output, "#define __ENDIA __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(output, "#else\n"); __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(output, "#define __ENDIAN_PAD(x) 0\n"); __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(output, "#endif\n"); +__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(output, "#include \n"); if(ast) OutputTree(ast, output); (__ecereNameSpace__ecere__com__eInstance_DecRef(output), output = 0); diff --git a/compiler/bootstrap/ecc/bootstrap/ecc.main.c b/compiler/bootstrap/ecc/bootstrap/ecc.main.c index c2aa4ab..9e5b0d8 100644 --- a/compiler/bootstrap/ecc/bootstrap/ecc.main.c +++ b/compiler/bootstrap/ecc/bootstrap/ecc.main.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/AVLTree.c b/compiler/bootstrap/ecere/bootstrap/AVLTree.c index e98b13a..2e13a2b 100644 --- a/compiler/bootstrap/ecere/bootstrap/AVLTree.c +++ b/compiler/bootstrap/ecere/bootstrap/AVLTree.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/Array.c b/compiler/bootstrap/ecere/bootstrap/Array.c index fcb2bef..3717ed4 100644 --- a/compiler/bootstrap/ecere/bootstrap/Array.c +++ b/compiler/bootstrap/ecere/bootstrap/Array.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/BTNode.c b/compiler/bootstrap/ecere/bootstrap/BTNode.c index c3cb100..64a0774 100644 --- a/compiler/bootstrap/ecere/bootstrap/BTNode.c +++ b/compiler/bootstrap/ecere/bootstrap/BTNode.c @@ -22,9 +22,10 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include struct __ecereNameSpace__ecere__sys__BTNode { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent, * left, * right; int depth; } __attribute__ ((gcc_struct)); @@ -37,7 +38,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -275,6 +276,8 @@ void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(struct __ec extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_bool; +extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uintptr; + extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint; 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) @@ -284,7 +287,7 @@ if((struct __ecereNameSpace__ecere__sys__BTNode *)this) unsigned int truth = 0x1; __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass_bool, &truth); -__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass_uint, &this->key); +__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass_uintptr, &this->key); __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass___ecereNameSpace__ecere__sys__BTNode, this->left); __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize(channel, __ecereClass___ecereNameSpace__ecere__sys__BTNode, this->right); } @@ -312,7 +315,7 @@ __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ece if(truth) { (*(this)) = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__BTNode); -__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass_uint, &(*(this))->key); +__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass_uintptr, &(*(this))->key); __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass___ecereNameSpace__ecere__sys__BTNode, &(*(this))->left); if((*(this))->left) { @@ -409,7 +412,7 @@ FreeKey((void *)this->key); 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) { -unsigned int newKey = node->key; +uintptr_t newKey = node->key; while(0x1) { @@ -483,7 +486,7 @@ return 0x1; return 0x0; } -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Find(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int key) +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) { while(this) { @@ -561,7 +564,7 @@ break; return subString; } -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode * this, unsigned int 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)); @@ -1104,7 +1107,7 @@ __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnSerialize", 0, __ecereM __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnUnserialize", 0, __ecereMethod___ecereNameSpace__ecere__sys__BTNode_OnUnserialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindPrefix", "ecere::sys::BTNode FindPrefix(char * key)", __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindString", "ecere::sys::BTNode FindString(char * key)", __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindString, 1); -__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "key", "uint", 4, 4, 1); +__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "key", "uintptr", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "parent", "ecere::sys::BTNode", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "left", "ecere::sys::BTNode", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "right", "ecere::sys::BTNode", 4, 4, 1); diff --git a/compiler/bootstrap/ecere/bootstrap/BinaryTree.c b/compiler/bootstrap/ecere/bootstrap/BinaryTree.c index 1b5973c..7e5fddd 100644 --- a/compiler/bootstrap/ecere/bootstrap/BinaryTree.c +++ b/compiler/bootstrap/ecere/bootstrap/BinaryTree.c @@ -22,9 +22,10 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include struct __ecereNameSpace__ecere__sys__BTNode { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -37,7 +38,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -271,7 +272,7 @@ __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ece (*(this)).count = (*(this)).root ? __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_count((*(this)).root) : 0; } -int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt(struct __ecereNameSpace__ecere__sys__BinaryTree * this, unsigned int a, unsigned int b) +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); } @@ -316,9 +317,9 @@ this->count++; return 0x1; } -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Find(struct __ecereNameSpace__ecere__sys__BTNode * this, struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int key); +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); -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find(struct __ecereNameSpace__ecere__sys__BinaryTree * this, unsigned int key) +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 = __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt; @@ -339,9 +340,9 @@ struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ec return this->root ? __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindPrefix(this->root, key) : (((void *)0)); } -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BTNode_FindAll(struct __ecereNameSpace__ecere__sys__BTNode * this, unsigned int 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 * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindAll(struct __ecereNameSpace__ecere__sys__BinaryTree * this, unsigned int key) +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)); } @@ -407,7 +408,7 @@ struct __ecereNameSpace__ecere__sys__StringBinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -486,11 +487,11 @@ __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnSerialize", 0, __ecereM __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnUnserialize", 0, __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_OnUnserialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Add", "bool Add(ecere::sys::BTNode node)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Check", "bool Check()", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Check, 1); -__ecereNameSpace__ecere__com__eClass_AddMethod(class, "CompareInt", "int CompareInt(unsigned int a, unsigned int b)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(class, "CompareInt", "int CompareInt(uintptr a, uintptr b)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareInt, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "CompareString", "int CompareString(char * a, char * b)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Delete", "void Delete(ecere::sys::BTNode node)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Delete, 1); -__ecereNameSpace__ecere__com__eClass_AddMethod(class, "Find", "ecere::sys::BTNode Find(unsigned int key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find, 1); -__ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindAll", "ecere::sys::BTNode FindAll(unsigned int key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindAll, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(class, "Find", "ecere::sys::BTNode Find(uintptr key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindAll", "ecere::sys::BTNode FindAll(uintptr key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindAll, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindPrefix", "ecere::sys::BTNode FindPrefix(char * key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "FindString", "ecere::sys::BTNode FindString(char * key)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Free", "void Free()", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Free, 1); @@ -499,7 +500,7 @@ __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Print", "char * Print(cha __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Remove", "void Remove(ecere::sys::BTNode node)", __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "root", "ecere::sys::BTNode", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "count", "int", 4, 4, 1); -__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "CompareKey", "int( *)(ecere::sys::BinaryTree tree, uint a, uint b)", 4, 4, 1); +__ecereNameSpace__ecere__com__eClass_AddDataMember(class, "CompareKey", "int( *)(ecere::sys::BinaryTree tree, uintptr a, uintptr b)", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "FreeKey", "void( *)(void * key)", 4, 4, 1); __ecerePropM___ecereNameSpace__ecere__sys__BinaryTree_first = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "first", "ecere::sys::BTNode", 0, __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first, 1); if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 12)))->application) diff --git a/compiler/bootstrap/ecere/bootstrap/BufferedFile.c b/compiler/bootstrap/ecere/bootstrap/BufferedFile.c index d2fdb20..966b284 100644 --- a/compiler/bootstrap/ecere/bootstrap/BufferedFile.c +++ b/compiler/bootstrap/ecere/bootstrap/BufferedFile.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/BuiltInContainer.c b/compiler/bootstrap/ecere/bootstrap/BuiltInContainer.c index ca8b70d..ee093db 100644 --- a/compiler/bootstrap/ecere/bootstrap/BuiltInContainer.c +++ b/compiler/bootstrap/ecere/bootstrap/BuiltInContainer.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/Container.c b/compiler/bootstrap/ecere/bootstrap/Container.c index 12c44f5..51e60e4 100644 --- a/compiler/bootstrap/ecere/bootstrap/Container.c +++ b/compiler/bootstrap/ecere/bootstrap/Container.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c b/compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c index e7f1048..03ee396 100644 --- a/compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c +++ b/compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/DualPipe.c b/compiler/bootstrap/ecere/bootstrap/DualPipe.c index 18c71b0..b1b2e74 100644 --- a/compiler/bootstrap/ecere/bootstrap/DualPipe.c +++ b/compiler/bootstrap/ecere/bootstrap/DualPipe.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/File.c b/compiler/bootstrap/ecere/bootstrap/File.c index d2a7785..4962663 100644 --- a/compiler/bootstrap/ecere/bootstrap/File.c +++ b/compiler/bootstrap/ecere/bootstrap/File.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/LinkList.c b/compiler/bootstrap/ecere/bootstrap/LinkList.c index bae9b55..cd752bd 100644 --- a/compiler/bootstrap/ecere/bootstrap/LinkList.c +++ b/compiler/bootstrap/ecere/bootstrap/LinkList.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/List.c b/compiler/bootstrap/ecere/bootstrap/List.c index 75689ab..a280ec1 100644 --- a/compiler/bootstrap/ecere/bootstrap/List.c +++ b/compiler/bootstrap/ecere/bootstrap/List.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/Map.c b/compiler/bootstrap/ecere/bootstrap/Map.c index 56f01df..5396c5f 100644 --- a/compiler/bootstrap/ecere/bootstrap/Map.c +++ b/compiler/bootstrap/ecere/bootstrap/Map.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/OldList.c b/compiler/bootstrap/ecere/bootstrap/OldList.c index d25cc82..11e9f44 100644 --- a/compiler/bootstrap/ecere/bootstrap/OldList.c +++ b/compiler/bootstrap/ecere/bootstrap/OldList.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/String.c b/compiler/bootstrap/ecere/bootstrap/String.c index 25c52bd..d8f8ab9 100644 --- a/compiler/bootstrap/ecere/bootstrap/String.c +++ b/compiler/bootstrap/ecere/bootstrap/String.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/System.c b/compiler/bootstrap/ecere/bootstrap/System.c index 107b735..399c1da 100644 --- a/compiler/bootstrap/ecere/bootstrap/System.c +++ b/compiler/bootstrap/ecere/bootstrap/System.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/TempFile.c b/compiler/bootstrap/ecere/bootstrap/TempFile.c index b63b403..a258e4b 100644 --- a/compiler/bootstrap/ecere/bootstrap/TempFile.c +++ b/compiler/bootstrap/ecere/bootstrap/TempFile.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/dataTypes.c b/compiler/bootstrap/ecere/bootstrap/dataTypes.c index d647166..9347481 100644 --- a/compiler/bootstrap/ecere/bootstrap/dataTypes.c +++ b/compiler/bootstrap/ecere/bootstrap/dataTypes.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1528,6 +1529,40 @@ return 0x1; return 0x0; } +static int __ecereNameSpace__ecere__com__Int64_OnCompare(struct __ecereNameSpace__ecere__com__Class * _class, long long * data1, long long * data2) +{ +int result = 0; + +if(!data1 && !data2) +result = 0; +else if(data1 && !data2) +result = 1; +else if(!data1 && data2) +result = -1; +else if(*data1 > *data2) +result = 1; +else if(*data1 < *data2) +result = -1; +return result; +} + +static int __ecereNameSpace__ecere__com__UInt64_OnCompare(struct __ecereNameSpace__ecere__com__Class * _class, uint64 * data1, uint64 * data2) +{ +int result = 0; + +if(!data1 && !data2) +result = 0; +else if(data1 && !data2) +result = 1; +else if(!data1 && data2) +result = -1; +else if(*data1 > *data2) +result = 1; +else if(*data1 < *data2) +result = -1; +return result; +} + extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void); static char * __ecereNameSpace__ecere__com__Int64_OnGetString(struct __ecereNameSpace__ecere__com__Class * _class, long long * data, char * string, void * fieldData, unsigned int * needClass) @@ -1652,6 +1687,7 @@ integerClass->typeSize = sizeof(long long); (__ecereNameSpace__ecere__com__eSystem_Delete(integerClass->dataTypeString), integerClass->dataTypeString = 0); integerClass->dataTypeString = __ecereNameSpace__ecere__sys__CopyString("int64"); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnGetString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnCompare, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnSerialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnUnserialize, 1); integerClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "uint", (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), module, 4, 1); @@ -1707,6 +1743,7 @@ integerClass->typeSize = sizeof(uint64); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__UInt64_OnGetString, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnSerialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnUnserialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnCompare, 1); integerClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "byte", (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), module, 4, 1); integerClass->type = 1000; (__ecereNameSpace__ecere__com__eSystem_Delete(integerClass->dataTypeString), integerClass->dataTypeString = 0); @@ -1729,6 +1766,48 @@ __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((v __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetDataFromString", (((void *)0)), __ecereNameSpace__ecere__com__Byte_OnGetDataFromString, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Byte_OnSerialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Byte_OnUnserialize, 1); +integerClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "uintptr", (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), module, 4, 1); +integerClass->type = 1000; +(__ecereNameSpace__ecere__com__eSystem_Delete(integerClass->dataTypeString), integerClass->dataTypeString = 0); +integerClass->dataTypeString = __ecereNameSpace__ecere__sys__CopyString("uintptr_t"); +integerClass->structSize = 0; +integerClass->typeSize = sizeof(uintptr_t); +if(sizeof(uintptr_t) == 8) +{ +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__UInt64_OnGetString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnSerialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnUnserialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__UInt64_OnCompare, 1); +} +else +{ +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__UInteger_OnCompare, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__UInteger_OnGetString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetDataFromString", (((void *)0)), __ecereNameSpace__ecere__com__UInteger_OnGetDataFromString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int_OnSerialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int_OnUnserialize, 1); +} +integerClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "intptr", (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), module, 4, 1); +integerClass->type = 1000; +(__ecereNameSpace__ecere__com__eSystem_Delete(integerClass->dataTypeString), integerClass->dataTypeString = 0); +integerClass->dataTypeString = __ecereNameSpace__ecere__sys__CopyString("intptr_t"); +integerClass->structSize = 0; +integerClass->typeSize = sizeof(intptr_t); +if(sizeof(intptr_t) == 8) +{ +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnGetString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnSerialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnUnserialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnCompare, 1); +} +else +{ +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnCompare", (((void *)0)), __ecereNameSpace__ecere__com__Integer_OnCompare, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__Integer_OnGetString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetDataFromString", (((void *)0)), __ecereNameSpace__ecere__com__Integer_OnGetDataFromString, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnSerialize", (((void *)0)), __ecereNameSpace__ecere__com__Int_OnSerialize, 1); +__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnUnserialize", (((void *)0)), __ecereNameSpace__ecere__com__Int_OnUnserialize, 1); +} } static int __ecereNameSpace__ecere__com__Float_OnCompare(struct __ecereNameSpace__ecere__com__Class * _class, float * data1, float * data2) diff --git a/compiler/bootstrap/ecere/bootstrap/ecere.main.c b/compiler/bootstrap/ecere/bootstrap/ecere.main.c index 24d7aea..e05fc63 100644 --- a/compiler/bootstrap/ecere/bootstrap/ecere.main.c +++ b/compiler/bootstrap/ecere/bootstrap/ecere.main.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -551,6 +552,8 @@ struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint; struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint64; +struct __ecereNameSpace__ecere__com__Class * __ecereClass_uintptr; + void __ecereRegisterModule_BufferedFile(struct __ecereNameSpace__ecere__com__Instance * module); void __ecereUnregisterModule_BufferedFile(struct __ecereNameSpace__ecere__com__Instance * module); @@ -1034,6 +1037,7 @@ __ecereClass___ecereNameSpace__ecere__sys__TempFile = __ecereNameSpace__ecere__c __ecereClass_int = __ecereNameSpace__ecere__com__eSystem_FindClass(module, "int"); __ecereClass_uint = __ecereNameSpace__ecere__com__eSystem_FindClass(module, "uint"); __ecereClass_uint64 = __ecereNameSpace__ecere__com__eSystem_FindClass(module, "uint64"); +__ecereClass_uintptr = __ecereNameSpace__ecere__com__eSystem_FindClass(module, "uintptr"); __ecereCreateModuleInstances_i18n(); __ecereNameSpace__ecere__LoadTranslatedStrings(module, "ecere"); } diff --git a/compiler/bootstrap/ecere/bootstrap/i18n.c b/compiler/bootstrap/ecere/bootstrap/i18n.c index 8584bd0..24c8ad8 100644 --- a/compiler/bootstrap/ecere/bootstrap/i18n.c +++ b/compiler/bootstrap/ecere/bootstrap/i18n.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecere/bootstrap/instance.c b/compiler/bootstrap/ecere/bootstrap/instance.c index 0a57258..79d4bc5 100644 --- a/compiler/bootstrap/ecere/bootstrap/instance.c +++ b/compiler/bootstrap/ecere/bootstrap/instance.c @@ -30,6 +30,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -40,7 +41,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -2048,12 +2049,12 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_Delete(&_class->templatePara __ecereNameSpace__ecere__com___free(_class); } -struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find(struct __ecereNameSpace__ecere__sys__BinaryTree * this, unsigned int key); +struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find(struct __ecereNameSpace__ecere__sys__BinaryTree * this, uintptr_t key); static struct __ecereNameSpace__ecere__com__BTNamedLink * __ecereNameSpace__ecere__com__ScanNameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name, void * listOffset) { struct __ecereNameSpace__ecere__sys__BinaryTree * tree = (struct __ecereNameSpace__ecere__sys__BinaryTree *)((unsigned char *)nameSpace + (unsigned int)listOffset); -struct __ecereNameSpace__ecere__com__BTNamedLink * link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find((&*tree), (unsigned int)name); +struct __ecereNameSpace__ecere__com__BTNamedLink * link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Find((&*tree), (uintptr_t)name); struct __ecereNameSpace__ecere__com__NameSpace * child; if(!link) diff --git a/compiler/bootstrap/ecere/bootstrap/memory.c b/compiler/bootstrap/ecere/bootstrap/memory.c index 0e41fa2..300eff0 100644 --- a/compiler/bootstrap/ecere/bootstrap/memory.c +++ b/compiler/bootstrap/ecere/bootstrap/memory.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecp/bootstrap/ecp.c b/compiler/bootstrap/ecp/bootstrap/ecp.c index 823b6ea..0e36478 100644 --- a/compiler/bootstrap/ecp/bootstrap/ecp.c +++ b/compiler/bootstrap/ecp/bootstrap/ecp.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1525,6 +1526,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecp/bootstrap/ecp.main.c b/compiler/bootstrap/ecp/bootstrap/ecp.main.c index a0a198b..2aeb055 100644 --- a/compiler/bootstrap/ecp/bootstrap/ecp.main.c +++ b/compiler/bootstrap/ecp/bootstrap/ecp.main.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecs/bootstrap/ecs.c b/compiler/bootstrap/ecs/bootstrap/ecs.c index 310c146..c837ae6 100644 --- a/compiler/bootstrap/ecs/bootstrap/ecs.c +++ b/compiler/bootstrap/ecs/bootstrap/ecs.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/ecs/bootstrap/ecs.main.c b/compiler/bootstrap/ecs/bootstrap/ecs.main.c index fb13665..eec8ca3 100644 --- a/compiler/bootstrap/ecs/bootstrap/ecs.main.c +++ b/compiler/bootstrap/ecs/bootstrap/ecs.main.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/ast.c b/compiler/bootstrap/libec/bootstrap/ast.c index f1d7423..b5d1150 100644 --- a/compiler/bootstrap/libec/bootstrap/ast.c +++ b/compiler/bootstrap/libec/bootstrap/ast.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1243,7 +1244,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType; struct TemplatedType { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -1351,7 +1352,7 @@ struct TemplateParameter * MkTypeTemplateParameter(struct Identifier * identifie if(identifier->string) { struct TemplateParameter * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter), param->type = 0, param->identifier = identifier, param->dataType = baseTplDatatype, param->defaultArgument = defaultArgument, param); -struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (unsigned int)identifier->string, type->param = param, type); +struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)identifier->string, type->param = param, type); if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type)) ((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor(type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor(type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0); @@ -3112,7 +3113,7 @@ if(!param) { p->param = param = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter), ((struct TemplateParameter *)__ecereTemp1)->identifier = MkIdentifier(p->name), ((struct TemplateParameter *)__ecereTemp1)->type = p->type, ((struct TemplateParameter *)__ecereTemp1)->dataTypeString = p->dataTypeString, ((struct TemplateParameter *)__ecereTemp1)); } -type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (unsigned int)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1)); +type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (uintptr_t)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1)); if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type)) ((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor(type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor(type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0); } diff --git a/compiler/bootstrap/libec/bootstrap/copy.c b/compiler/bootstrap/libec/bootstrap/copy.c index 9642137..78ef371 100644 --- a/compiler/bootstrap/libec/bootstrap/copy.c +++ b/compiler/bootstrap/libec/bootstrap/copy.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/dbpass.c b/compiler/bootstrap/libec/bootstrap/dbpass.c index d7410b4..c7af2f8 100644 --- a/compiler/bootstrap/libec/bootstrap/dbpass.c +++ b/compiler/bootstrap/libec/bootstrap/dbpass.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/ec.main.c b/compiler/bootstrap/libec/bootstrap/ec.main.c index c0f8501..aa1f36d 100644 --- a/compiler/bootstrap/libec/bootstrap/ec.main.c +++ b/compiler/bootstrap/libec/bootstrap/ec.main.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/ecdefs.c b/compiler/bootstrap/libec/bootstrap/ecdefs.c index a10592b..bdfca91 100644 --- a/compiler/bootstrap/libec/bootstrap/ecdefs.c +++ b/compiler/bootstrap/libec/bootstrap/ecdefs.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include struct __ecereNameSpace__ecere__sys__BTNode; extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1134,7 +1135,7 @@ outputLineNumbers = value; struct GlobalData { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -1150,7 +1151,7 @@ static struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData; struct TemplatedType { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -1565,6 +1566,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); @@ -2642,6 +2645,7 @@ __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "dummyType", 18); __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "subClassType", 19); __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "templateType", 20); __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "thisClassType", 21); +__ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "intPtrType", 22); class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Type", 0, sizeof(struct Type), 0, 0, 0, module, 1, 1); if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 12)))->application && class) __ecereClass_Type = class; @@ -2732,6 +2736,8 @@ __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "d", "double", __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "p", "byte *", 4, 4, 1); __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "i64", "int64", 8, 8, 1); __ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "ui64", "uint64", 8, 8, 1); +__ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "iptr", "intptr", 4, 4, 1); +__ecereNameSpace__ecere__com__eMember_AddDataMember(dataMember0, "uiptr", "uintptr", 4, 4, 1); __ecereNameSpace__ecere__com__eClass_AddMember(class, dataMember0); } __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "ops", "OpTable", 140, 4, 1); diff --git a/compiler/bootstrap/libec/bootstrap/expression.c b/compiler/bootstrap/libec/bootstrap/expression.c index 1b4cb87..884efc6 100644 --- a/compiler/bootstrap/libec/bootstrap/expression.c +++ b/compiler/bootstrap/libec/bootstrap/expression.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/firstPass.c b/compiler/bootstrap/libec/bootstrap/firstPass.c index d19c8e5..ec56897 100644 --- a/compiler/bootstrap/libec/bootstrap/firstPass.c +++ b/compiler/bootstrap/libec/bootstrap/firstPass.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1309,6 +1310,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/freeAst.c b/compiler/bootstrap/libec/bootstrap/freeAst.c index 83829bb..6b007cc 100644 --- a/compiler/bootstrap/libec/bootstrap/freeAst.c +++ b/compiler/bootstrap/libec/bootstrap/freeAst.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/grammar.c b/compiler/bootstrap/libec/bootstrap/grammar.c index c1e83ea..e0b4cfe 100644 --- a/compiler/bootstrap/libec/bootstrap/grammar.c +++ b/compiler/bootstrap/libec/bootstrap/grammar.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/lexer.c b/compiler/bootstrap/libec/bootstrap/lexer.c index bf4e1e0..e0f21ef 100644 --- a/compiler/bootstrap/libec/bootstrap/lexer.c +++ b/compiler/bootstrap/libec/bootstrap/lexer.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/loadSymbols.c b/compiler/bootstrap/libec/bootstrap/loadSymbols.c index c8cb989..d2af0e1 100644 --- a/compiler/bootstrap/libec/bootstrap/loadSymbols.c +++ b/compiler/bootstrap/libec/bootstrap/loadSymbols.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -848,6 +849,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); @@ -916,7 +919,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData; struct GlobalData { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -1496,7 +1499,7 @@ data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTr if(!data) { data = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_GlobalData), ((struct GlobalData *)__ecereTemp1)->fullName = __ecereNameSpace__ecere__sys__CopyString(name), ((struct GlobalData *)__ecereTemp1)->dataTypeString = __ecereNameSpace__ecere__sys__CopyString(line), ((struct GlobalData *)__ecereTemp1)->module = privateModule, ((struct GlobalData *)__ecereTemp1)); -data->key = (unsigned int)(data->fullName + start); +data->key = (uintptr_t)(data->fullName + start); __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&(*nameSpace).functions, (struct __ecereNameSpace__ecere__sys__BTNode *)data); } else if(strcmp(data->dataTypeString, line)) diff --git a/compiler/bootstrap/libec/bootstrap/output.c b/compiler/bootstrap/libec/bootstrap/output.c index 848704e..71a082e 100644 --- a/compiler/bootstrap/libec/bootstrap/output.c +++ b/compiler/bootstrap/libec/bootstrap/output.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/pass0.c b/compiler/bootstrap/libec/bootstrap/pass0.c index 5f871f7..9a4dfe8 100644 --- a/compiler/bootstrap/libec/bootstrap/pass0.c +++ b/compiler/bootstrap/libec/bootstrap/pass0.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/pass1.c b/compiler/bootstrap/libec/bootstrap/pass1.c index 7d751b7..a0522af 100644 --- a/compiler/bootstrap/libec/bootstrap/pass1.c +++ b/compiler/bootstrap/libec/bootstrap/pass1.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -2010,6 +2011,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/pass15.c b/compiler/bootstrap/libec/bootstrap/pass15.c index efa6535..bc81b23 100644 --- a/compiler/bootstrap/libec/bootstrap/pass15.c +++ b/compiler/bootstrap/libec/bootstrap/pass15.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1373,6 +1374,7 @@ case 1: case 2: case 3: case 4: +case 22: if(type1->passAsTemplate && !type2->passAsTemplate) return 0x1; return type1->isSigned != type2->isSigned; @@ -1734,6 +1736,8 @@ double d; unsigned char * p; long long i64; uint64 ui64; +intptr_t iptr; +uintptr_t uiptr; } __attribute__ ((gcc_struct)); struct OpTable ops; } __attribute__ ((gcc_struct)); @@ -1752,6 +1756,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (int)op2.i64; else if(op2.kind == 4) *value2 = (int)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (int)op2.iptr; +else if(op2.kind == 22) +*value2 = (int)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (int)op2.s; else if(op2.kind == 2) @@ -1783,6 +1791,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (unsigned int)op2.i64; else if(op2.kind == 4) *value2 = (unsigned int)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (unsigned int)op2.iptr; +else if(op2.kind == 22) +*value2 = (unsigned int)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (unsigned int)op2.s; else if(op2.kind == 2) @@ -1814,6 +1826,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = op2.i64; else if(op2.kind == 4) *value2 = (long long)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (long long)op2.iptr; +else if(op2.kind == 22) +*value2 = (long long)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (long long)op2.s; else if(op2.kind == 2) @@ -1845,6 +1861,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (uint64)op2.i64; else if(op2.kind == 4) *value2 = op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (uint64)op2.iptr; +else if(op2.kind == 22) +*value2 = (uint64)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (uint64)op2.s; else if(op2.kind == 2) @@ -1864,6 +1884,76 @@ return 0x0; return 0x1; } +unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2) +{ +struct Operand op2 = GetOperand(exp); + +if(op2.kind == 3 && op2.type->isSigned) +*value2 = (intptr_t)op2.i; +else if(op2.kind == 3) +*value2 = (intptr_t)op2.ui; +if(op2.kind == 4 && op2.type->isSigned) +*value2 = (intptr_t)op2.i64; +else if(op2.kind == 4) +*value2 = (intptr_t)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = op2.iptr; +else if(op2.kind == 22) +*value2 = (intptr_t)op2.uiptr; +else if(op2.kind == 2 && op2.type->isSigned) +*value2 = (intptr_t)op2.s; +else if(op2.kind == 2) +*value2 = (intptr_t)op2.us; +else if(op2.kind == 1 && op2.type->isSigned) +*value2 = (intptr_t)op2.c; +else if(op2.kind == 1) +*value2 = (intptr_t)op2.uc; +else if(op2.kind == 6) +*value2 = (intptr_t)op2.f; +else if(op2.kind == 7) +*value2 = (intptr_t)op2.d; +else if(op2.kind == 13) +*value2 = (intptr_t)op2.ui; +else +return 0x0; +return 0x1; +} + +unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2) +{ +struct Operand op2 = GetOperand(exp); + +if(op2.kind == 3 && op2.type->isSigned) +*value2 = (uintptr_t)op2.i; +else if(op2.kind == 3) +*value2 = (uintptr_t)op2.ui; +if(op2.kind == 4 && op2.type->isSigned) +*value2 = (uintptr_t)op2.i64; +else if(op2.kind == 4) +*value2 = (uintptr_t)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (uintptr_t)op2.iptr; +else if(op2.kind == 22) +*value2 = op2.uiptr; +else if(op2.kind == 2 && op2.type->isSigned) +*value2 = (uintptr_t)op2.s; +else if(op2.kind == 2) +*value2 = (uintptr_t)op2.us; +else if(op2.kind == 1 && op2.type->isSigned) +*value2 = (uintptr_t)op2.c; +else if(op2.kind == 1) +*value2 = (uintptr_t)op2.uc; +else if(op2.kind == 6) +*value2 = (uintptr_t)op2.f; +else if(op2.kind == 7) +*value2 = (uintptr_t)op2.d; +else if(op2.kind == 13) +*value2 = (uintptr_t)op2.ui; +else +return 0x0; +return 0x1; +} + unsigned int GetShort(struct Expression * exp, short * value2) { struct Operand op2 = GetOperand(exp); @@ -1876,6 +1966,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (short)op2.i64; else if(op2.kind == 4) *value2 = (short)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (short)op2.iptr; +else if(op2.kind == 22) +*value2 = (short)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = op2.s; else if(op2.kind == 2) @@ -1907,6 +2001,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (unsigned short)op2.i64; else if(op2.kind == 4) *value2 = (unsigned short)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (unsigned short)op2.iptr; +else if(op2.kind == 22) +*value2 = (unsigned short)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (unsigned short)op2.s; else if(op2.kind == 2) @@ -1938,6 +2036,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (char)op2.i64; else if(op2.kind == 4) *value2 = (char)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (char)op2.iptr; +else if(op2.kind == 22) +*value2 = (char)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (char)op2.s; else if(op2.kind == 2) @@ -1969,6 +2071,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (unsigned char)op2.i64; else if(op2.kind == 4) *value2 = (unsigned char)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (unsigned char)op2.iptr; +else if(op2.kind == 22) +*value2 = (unsigned char)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (unsigned char)op2.s; else if(op2.kind == 2) @@ -2000,6 +2106,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (float)(float)op2.i64; else if(op2.kind == 4) *value2 = (float)(float)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (float)op2.iptr; +else if(op2.kind == 22) +*value2 = (float)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (float)(float)op2.s; else if(op2.kind == 2) @@ -2031,6 +2141,10 @@ if(op2.kind == 4 && op2.type->isSigned) *value2 = (double)(double)op2.i64; else if(op2.kind == 4) *value2 = (double)(double)op2.ui64; +else if(op2.kind == 22 && op2.type->isSigned) +*value2 = (double)op2.iptr; +else if(op2.kind == 22) +*value2 = (double)op2.uiptr; else if(op2.kind == 2 && op2.type->isSigned) *value2 = (double)(double)op2.s; else if(op2.kind == 2) @@ -2416,6 +2530,9 @@ break; case 4: type->alignment = size = sizeof(long long); break; +case 22: +type->alignment = size = sizeof(intptr_t); +break; case 5: type->alignment = size = sizeof(long); break; @@ -3781,7 +3898,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType; struct TemplatedType { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -3805,7 +3922,7 @@ for(; param; param = param->next) { if(param->type == 0 && param->identifier) { -struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (unsigned int)param->identifier->string, type->param = param, type); +struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type); __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type); } @@ -3830,7 +3947,7 @@ if(!param) { p->param = param = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter), ((struct TemplateParameter *)__ecereTemp1)->identifier = MkIdentifier(p->name), ((struct TemplateParameter *)__ecereTemp1)->type = p->type, ((struct TemplateParameter *)__ecereTemp1)->dataTypeString = p->dataTypeString, ((struct TemplateParameter *)__ecereTemp1)); } -type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (unsigned int)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1)); +type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (uintptr_t)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1)); __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type); } } @@ -4309,7 +4426,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData; struct GlobalData { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -4599,9 +4716,11 @@ else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1)) return 0x1; else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 3)) return 0x1; -else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4)) +else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 3)) return 0x1; -else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || dest->kind == 4)) +else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22)) +return 0x1; +else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || source->kind == 4 || source->kind == 22)) return 0x1; else if((dest->kind == 11 || (dest->kind == 13 && dest->type->kind == 11) || dest->kind == 16) && ((source->kind == 11 || (source->kind == 13 && source->type->kind == 11) || source->kind == 16))) { @@ -9230,6 +9349,19 @@ op.ops = uintOps; } op.kind = 3; break; +case 22: +if(type->isSigned) +{ +op.iptr = (intptr_t)_strtoi64(exp->constant, (((void *)0)), 0); +op.ops = intOps; +} +else +{ +op.uiptr = (uintptr_t)_strtoui64(exp->constant, (((void *)0)), 0); +op.ops = uintOps; +} +op.kind = 3; +break; case 6: op.f = (float)strtod(exp->constant, (((void *)0))); op.ops = floatOps; @@ -9354,6 +9486,13 @@ exp->constant = PrintInt64(*(long long *)ptr); exp->type = 2; break; } +case 22: +{ +FreeExpContents(exp); +exp->constant = PrintInt64((long long)*(intptr_t *)ptr); +exp->type = 2; +break; +} default: Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0)))); } @@ -9459,6 +9598,12 @@ exp->constant = PrintInt64(*(long long *)ptr); exp->type = 2; break; } +case 22: +{ +exp->constant = PrintInt64((long long)*(intptr_t *)ptr); +exp->type = 2; +break; +} default: Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0)))); } @@ -9646,6 +9791,11 @@ case 4: GetInt64(value, (long long *)ptr); break; } +case 22: +{ +GetIntPtr(value, (intptr_t *)ptr); +break; +} case 6: { GetFloat(value, (float *)ptr); @@ -9714,6 +9864,13 @@ void (* Set)(void *, long long) = (void *)prop->Set; Set(inst->data, _strtoi64(value->constant, (((void *)0)), 0)); break; } +case 22: +{ +void (* Set)(void *, intptr_t) = (void *)prop->Set; + +Set(inst->data, (intptr_t)_strtoi64(value->constant, (((void *)0)), 0)); +break; +} } } else if(value->type == 3) @@ -9826,6 +9983,12 @@ bits |= ((long long)part << bitMember->pos); else bits |= ((uint64)part << bitMember->pos); break; +case 22: +if(type->isSigned) +bits |= ((intptr_t)part << bitMember->pos); +else +bits |= ((uintptr_t)part << bitMember->pos); +break; } } } @@ -10287,6 +10450,21 @@ Set(exp->instance->data, intValue); PopulateInstance(exp->instance); break; } +case 22: +{ +intptr_t intValue; +void (* Set)(void *, intptr_t) = (void *)prop->Set; + +exp->instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation); +exp->instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize)); +exp->instance->_class = MkSpecifierName(_class->fullName); +exp->instance->loc = exp->loc; +exp->type = 1; +GetIntPtr(value, &intValue); +Set(exp->instance->data, intValue); +PopulateInstance(exp->instance); +break; +} case 7: { double doubleValue; @@ -10562,6 +10740,26 @@ exp->constant = PrintUInt64(value); exp->type = 2; } break; +case 22: +if(type->isSigned) +{ +intptr_t value; + +GetIntPtr(e, &value); +FreeExpContents(exp); +exp->constant = PrintInt64((long long)value); +exp->type = 2; +} +else +{ +uintptr_t value; + +GetUIntPtr(e, &value); +FreeExpContents(exp); +exp->constant = PrintUInt64((uint64)value); +exp->type = 2; +} +break; case 6: { float value; @@ -11045,7 +11243,7 @@ return symbol; static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs) { -if(!type->isSigned) +if(!type->isSigned && type->kind != 22) ListAdd(specs, MkSpecifier(UNSIGNED)); switch(type->kind) { @@ -11074,6 +11272,9 @@ break; case 4: ListAdd(specs, MkSpecifier(INT64)); break; +case 22: +ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr")); +break; case 3: default: ListAdd(specs, MkSpecifier(INT)); @@ -11122,6 +11323,9 @@ break; case 4: strcat(string, type->isSigned ? "int64" : "uint64"); break; +case 22: +strcat(string, type->isSigned ? "intptr" : "uintptr"); +break; case 1: strcat(string, type->isSigned ? "char" : "byte"); break; @@ -12364,7 +12568,7 @@ if(exp->op.exp2->destType && exp->op.op != '=') exp->op.exp2->destType->count--; if(assign && type1 && type1->kind == 13 && exp->op.exp2->expType) { -if(exp->op.exp2->expType->kind == 4 || exp->op.exp2->expType->kind == 3 || exp->op.exp2->expType->kind == 2 || exp->op.exp2->expType->kind == 1) +if(exp->op.exp2->expType->kind == 22 || exp->op.exp2->expType->kind == 4 || exp->op.exp2->expType->kind == 3 || exp->op.exp2->expType->kind == 2 || exp->op.exp2->expType->kind == 1) { if(exp->op.op != '=' && type1->type->kind == 0) Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0)))); @@ -12480,7 +12684,7 @@ ProcessExpressionType(exp->op.exp2); } } } -if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1))) +if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1))) { if(type1->kind != 8 && type1->type->kind == 0) Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0)))); @@ -12488,7 +12692,7 @@ exp->expType = type1; if(type1) type1->refCount++; } -else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->_class->string, "String"))) && (type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1))) +else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->_class->string, "String"))) && (type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1))) { if(type2->kind != 8 && type2->type->kind == 0) Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0)))); @@ -16161,6 +16365,8 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Ex __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1); +__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1); +__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1); diff --git a/compiler/bootstrap/libec/bootstrap/pass16.c b/compiler/bootstrap/libec/bootstrap/pass16.c index 6c3798a..3aed711 100644 --- a/compiler/bootstrap/libec/bootstrap/pass16.c +++ b/compiler/bootstrap/libec/bootstrap/pass16.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/pass2.c b/compiler/bootstrap/libec/bootstrap/pass2.c index 8bcb188..fa9ac33 100644 --- a/compiler/bootstrap/libec/bootstrap/pass2.c +++ b/compiler/bootstrap/libec/bootstrap/pass2.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1082,7 +1083,7 @@ struct Expression * exp = *expPtr; *memberExpPtr = (((void *)0)); newExp = CopyExpression(exp); -*(struct Expression **)((unsigned char *)newExp + ((unsigned char *)memberExpPtr - (unsigned char *)exp)) = memberExp; +*(struct Expression **)((unsigned char *)newExp + (unsigned int)((unsigned char *)memberExpPtr - (unsigned char *)exp)) = memberExp; memberExp->member.exp = idExp; exp->type = 5; exp->list = bracketExp->list; @@ -1100,7 +1101,7 @@ struct Expression * exp = *expPtr; *memberExpPtr = (((void *)0)); newExp = CopyExpression(exp); -*(struct Expression **)((unsigned char *)newExp + ((unsigned char *)memberExpPtr - (unsigned char *)exp)) = (*memberExp->list).last; +*(struct Expression **)((unsigned char *)newExp + (unsigned int)((unsigned char *)memberExpPtr - (unsigned char *)exp)) = (*memberExp->list).last; exp->type = 5; exp->list = memberExp->list; memberExp->list = (((void *)0)); @@ -1140,7 +1141,7 @@ if(type->kind == 8) { struct __ecereNameSpace__ecere__com__Class * _class = type->_class ? type->_class->registered : (((void *)0)); -if(_class && (_class->type == 1 || _class->type == 5 || (_class->type == 1000 && _class->base && strcmp(_class->fullName, "ecere::com::Instance") && strcmp(_class->fullName, "ecere::com::Class") && strcmp(_class->dataTypeString, "char *")))) +if(_class && (_class->type == 1 || _class->type == 5 || (_class->type == 1000 && _class->base && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr") && strcmp(_class->fullName, "ecere::com::Instance") && strcmp(_class->fullName, "ecere::com::Class") && strcmp(_class->dataTypeString, "char *")))) { if(wantReference != (e->byReference || isPointer)) { diff --git a/compiler/bootstrap/libec/bootstrap/pass3.c b/compiler/bootstrap/libec/bootstrap/pass3.c index 4789909..a383d07 100644 --- a/compiler/bootstrap/libec/bootstrap/pass3.c +++ b/compiler/bootstrap/libec/bootstrap/pass3.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); @@ -1115,12 +1116,12 @@ spec->addNameSpace = 0x0; } else if(_class) { -if((_class->type != 1000 || !strcmp(_class->fullName, "enum") || !strcmp(_class->fullName, "ecere::com::Instance") || (_class->dataTypeString && !strcmp(_class->dataTypeString, "char *")) || !strcmp(_class->fullName, "uint64") || !strcmp(_class->fullName, "uint32") || !strcmp(_class->fullName, "uint16") || !strcmp(_class->fullName, "uint") || !strcmp(_class->fullName, "byte"))) +if((_class->type != 1000 || !strcmp(_class->fullName, "enum") || !strcmp(_class->fullName, "ecere::com::Instance") || (_class->dataTypeString && !strcmp(_class->dataTypeString, "char *")) || !strcmp(_class->fullName, "uint64") || !strcmp(_class->fullName, "uint32") || !strcmp(_class->fullName, "uint16") || !strcmp(_class->fullName, "uintptr") || !strcmp(_class->fullName, "intptr") || !strcmp(_class->fullName, "uint") || !strcmp(_class->fullName, "byte"))) { (__ecereNameSpace__ecere__com__eSystem_Delete(spec->name), spec->name = 0); if(_class->dataTypeString) { -if(!strcmp(_class->dataTypeString, "uint64") || !strcmp(_class->dataTypeString, "uint32") || !strcmp(_class->dataTypeString, "uint16") || !strcmp(_class->dataTypeString, "uint") || !strcmp(_class->dataTypeString, "byte")) +if(!strcmp(_class->dataTypeString, "uint64") || !strcmp(_class->dataTypeString, "uint32") || !strcmp(_class->dataTypeString, "uint16") || !strcmp(_class->dataTypeString, "uintptr") || !strcmp(_class->dataTypeString, "intptr") || !strcmp(_class->dataTypeString, "uint") || !strcmp(_class->dataTypeString, "byte")) { if(!_class->dataType) _class->dataType = ProcessTypeString(_class->dataTypeString, 0x0); diff --git a/compiler/bootstrap/libec/bootstrap/shortcuts.c b/compiler/bootstrap/libec/bootstrap/shortcuts.c index e48ff3b..ec8a53b 100644 --- a/compiler/bootstrap/libec/bootstrap/shortcuts.c +++ b/compiler/bootstrap/libec/bootstrap/shortcuts.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/bootstrap/libec/bootstrap/type.c b/compiler/bootstrap/libec/bootstrap/type.c index 1f20215..81af7dd 100644 --- a/compiler/bootstrap/libec/bootstrap/type.c +++ b/compiler/bootstrap/libec/bootstrap/type.c @@ -22,6 +22,7 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,7 +33,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); } __attribute__ ((gcc_struct)); diff --git a/compiler/ecc/ecc.ec b/compiler/ecc/ecc.ec index 511d88b..bf33c73 100644 --- a/compiler/ecc/ecc.ec +++ b/compiler/ecc/ecc.ec @@ -333,7 +333,7 @@ class CompilerApp : Application { GlobalData data { fullName = CopyString("__thisModule"), dataTypeString = CopyString("Module"), module = privateModule }; - data.key = (uint)data.fullName; + data.key = (uintptr)data.fullName; globalData.functions.Add((BTNode)data); } diff --git a/compiler/libec/locale/ec.pot b/compiler/libec/locale/ec.pot index 4988e02..6d35c03 100644 --- a/compiler/libec/locale/ec.pot +++ b/compiler/libec/locale/ec.pot @@ -10,33 +10,33 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Basepath: ../\n" -#: ./src/pass15.ec:3244 -#: ./src/pass15.ec:3270 +#: ./src/pass15.ec:3252 +#: ./src/pass15.ec:3278 msgid "%s expected to be derived from method class\n" msgstr "%s expected to be derived from method class\n" -#: ./src/pass15.ec:8857 +#: ./src/pass15.ec:8947 msgid "%s undefined; assuming extern returning int\n" msgstr "%s undefined; assuming extern returning int\n" -#: ./src/ecdefs.ec:1259 +#: ./src/ecdefs.ec:1260 msgid ":%d:%d: error: " msgstr ":%d:%d: error: " -#: ./src/ecdefs.ec:1300 +#: ./src/ecdefs.ec:1301 msgid ":%d:%d: warning: " msgstr ":%d:%d: warning: " -#: ./src/pass15.ec:808 +#: ./src/pass15.ec:814 msgid "Array size not constant int (%s)\n" msgstr "Array size not constant int (%s)\n" -#: ./src/pass15.ec:10364 +#: ./src/pass15.ec:10454 msgid "Assigning list initializer to non list\n" msgstr "Assigning list initializer to non list\n" -#: ./src/pass15.ec:10028 -#: ./src/pass15.ec:11075 +#: ./src/pass15.ec:10118 +#: ./src/pass15.ec:11165 msgid "Couldn't determine type of array elements\n" msgstr "Couldn't determine type of array elements\n" @@ -52,7 +52,7 @@ msgstr "Couldn't open %s\n" msgid "Expecting class specifier\n" msgstr "Expecting class specifier\n" -#: ./src/pass15.ec:11233 +#: ./src/pass15.ec:11323 msgid "Expression is not a container\n" msgstr "Expression is not a container\n" @@ -64,12 +64,12 @@ msgstr "Includes nested too deeply" msgid "Incompatible virtual function %s\n" msgstr "Incompatible virtual function %s\n" -#: ./src/pass15.ec:11507 -#: ./src/pass15.ec:11582 +#: ./src/pass15.ec:11597 +#: ./src/pass15.ec:11672 msgid "Invalid object specified and not inside a class\n" msgstr "Invalid object specified and not inside a class\n" -#: ./src/pass15.ec:11415 +#: ./src/pass15.ec:11505 msgid "Invalid watched object\n" msgstr "Invalid watched object\n" @@ -94,11 +94,11 @@ msgstr "Multiple field index requires a name\n" msgid "No database table defined in this module or database_open already used.\n" msgstr "No database table defined in this module or database_open already used.\n" -#: ./src/pass15.ec:11428 +#: ./src/pass15.ec:11518 msgid "No observer specified and not inside a _class\n" msgstr "No observer specified and not inside a _class\n" -#: ./src/pass15.ec:11585 +#: ./src/pass15.ec:11675 msgid "No observer specified and not inside a class\n" msgstr "No observer specified and not inside a class\n" @@ -112,9 +112,9 @@ msgid "Non-static %s making use of a static class\n" msgstr "Non-static %s making use of a static class\n" #: ./src/pass1.ec:1035 -#: ./src/pass15.ec:11410 -#: ./src/pass15.ec:11482 -#: ./src/pass15.ec:11571 +#: ./src/pass15.ec:11500 +#: ./src/pass15.ec:11572 +#: ./src/pass15.ec:11661 msgid "Property %s not found in class %s\n" msgstr "Property %s not found in class %s\n" @@ -122,7 +122,7 @@ msgstr "Property %s not found in class %s\n" msgid "Public %s making use of a private class\n" msgstr "Public %s making use of a private class\n" -#: ./src/pass15.ec:7309 +#: ./src/pass15.ec:7399 msgid "Recursion in defined expression %s\n" msgstr "Recursion in defined expression %s\n" @@ -138,34 +138,34 @@ msgstr "Redefinition of %s ignored\n" msgid "Redefinition of method %s in class %s\n" msgstr "Redefinition of method %s in class %s\n" -#: ./src/pass15.ec:4386 -#: ./src/pass15.ec:4487 +#: ./src/pass15.ec:4415 +#: ./src/pass15.ec:4522 msgid "Unhandled type populating instance\n" msgstr "Unhandled type populating instance\n" -#: ./src/pass15.ec:7045 +#: ./src/pass15.ec:7135 msgid "Unspecified type\n" msgstr "Unspecified type\n" -#: ./src/pass15.ec:8872 +#: ./src/pass15.ec:8962 msgid "callable object undefined; extern assuming returning int\n" msgstr "callable object undefined; extern assuming returning int\n" -#: ./src/pass15.ec:8682 +#: ./src/pass15.ec:8772 msgid "called object %s is not a function\n" msgstr "called object %s is not a function\n" -#: ./src/pass15.ec:7771 -#: ./src/pass15.ec:7777 -#: ./src/pass15.ec:7941 +#: ./src/pass15.ec:7861 +#: ./src/pass15.ec:7867 +#: ./src/pass15.ec:8031 msgid "cannot add two pointers\n" msgstr "cannot add two pointers\n" -#: ./src/pass15.ec:1571 +#: ./src/pass15.ec:1577 msgid "cannot dereference type\n" msgstr "cannot dereference type\n" -#: ./src/pass2.ec:2232 +#: ./src/pass2.ec:2235 msgid "cannot obtain address of property\n" msgstr "cannot obtain address of property\n" @@ -183,101 +183,101 @@ msgstr "class data member" msgid "class member instance" msgstr "class member instance" -#: ./src/pass15.ec:10103 +#: ./src/pass15.ec:10193 msgid "couldn't determine type of %s; expected %s\n" msgstr "couldn't determine type of %s; expected %s\n" -#: ./src/pass15.ec:8318 -#: ./src/pass15.ec:8330 -#: ./src/pass15.ec:10115 -#: ./src/pass15.ec:10191 +#: ./src/pass15.ec:8408 +#: ./src/pass15.ec:8420 +#: ./src/pass15.ec:10205 +#: ./src/pass15.ec:10281 msgid "couldn't determine type of %s\n" msgstr "couldn't determine type of %s\n" -#: ./src/pass15.ec:1943 -#: ./src/pass15.ec:9337 +#: ./src/pass15.ec:1949 +#: ./src/pass15.ec:9427 msgid "couldn't find member %s in class %s\n" msgstr "couldn't find member %s in class %s\n" -#: ./src/pass15.ec:1939 -#: ./src/pass15.ec:2048 +#: ./src/pass15.ec:1945 +#: ./src/pass15.ec:2054 msgid "couldn't find virtual method %s in class %s\n" msgstr "couldn't find virtual method %s in class %s\n" -#: ./src/pass15.ec:7933 +#: ./src/pass15.ec:8023 msgid "different levels of indirection\n" msgstr "different levels of indirection\n" -#: ./src/pass15.ec:7789 -#: ./src/pass15.ec:10146 +#: ./src/pass15.ec:7879 +#: ./src/pass15.ec:10236 msgid "incompatible expression %s (%s); expected %s\n" msgstr "incompatible expression %s (%s); expected %s\n" -#: ./src/pass15.ec:8050 -#: ./src/pass15.ec:8210 +#: ./src/pass15.ec:8140 +#: ./src/pass15.ec:8300 msgid "incompatible expressions %s (%s) and %s (%s)\n" msgstr "incompatible expressions %s (%s) and %s (%s)\n" -#: ./src/pass15.ec:1895 +#: ./src/pass15.ec:1901 msgid "incompatible instance method %s\n" msgstr "incompatible instance method %s\n" -#: ./src/pass15.ec:3343 +#: ./src/pass15.ec:3351 msgid "incompatible parameter %s (expected %s)\n" msgstr "incompatible parameter %s (expected %s)\n" -#: ./src/pass15.ec:3283 +#: ./src/pass15.ec:3291 msgid "incompatible return type for function\n" msgstr "incompatible return type for function\n" -#: ./src/pass15.ec:9151 +#: ./src/pass15.ec:9241 msgid "invalid class specifier %s for object of class %s\n" msgstr "invalid class specifier %s for object of class %s\n" -#: ./src/pass15.ec:9621 +#: ./src/pass15.ec:9711 msgid "member operator on non-structure type expression %s\n" msgstr "member operator on non-structure type expression %s\n" -#: ./src/pass15.ec:3218 -#: ./src/pass15.ec:3233 -#: ./src/pass15.ec:3259 +#: ./src/pass15.ec:3226 +#: ./src/pass15.ec:3241 +#: ./src/pass15.ec:3267 msgid "method class must be derived from %s\n" msgstr "method class must be derived from %s\n" -#: ./src/pass15.ec:3220 +#: ./src/pass15.ec:3228 msgid "method class should not take an object\n" msgstr "method class should not take an object\n" -#: ./src/pass2.ec:2234 -#: ./src/pass2.ec:2236 +#: ./src/pass2.ec:2237 +#: ./src/pass2.ec:2239 msgid "no get defined for property %s of class %s\n" msgstr "no get defined for property %s of class %s\n" -#: ./src/pass2.ec:877 +#: ./src/pass2.ec:880 msgid "no set defined for property %s of class %s\n" msgstr "no set defined for property %s of class %s\n" -#: ./src/pass15.ec:8831 +#: ./src/pass15.ec:8921 msgid "not enough arguments for function %s (%d given, expected %d)\n" msgstr "not enough arguments for function %s (%d given, expected %d)\n" -#: ./src/pass15.ec:8827 +#: ./src/pass15.ec:8917 msgid "not enough arguments for method %s::%s (%d given, expected %d)\n" msgstr "not enough arguments for method %s::%s (%d given, expected %d)\n" -#: ./src/pass15.ec:3294 +#: ./src/pass15.ec:3302 msgid "not enough parameters\n" msgstr "not enough parameters\n" -#: ./src/pass15.ec:7876 +#: ./src/pass15.ec:7966 msgid "operating on %s and %s with an untyped result, assuming %s\n" msgstr "operating on %s and %s with an untyped result, assuming %s\n" -#: ./src/pass15.ec:7701 +#: ./src/pass15.ec:7791 msgid "operator %s illegal on pointer\n" msgstr "operator %s illegal on pointer\n" -#: ./src/pass15.ec:3246 +#: ./src/pass15.ec:3254 msgid "overriding class expected to be derived from method class\n" msgstr "overriding class expected to be derived from method class\n" @@ -298,7 +298,7 @@ msgstr "redefinition of constructor for class %s\n" msgid "redefinition of destructor for class %s\n" msgstr "redefinition of destructor for class %s\n" -#: ./src/ecdefs.ec:1319 +#: ./src/ecdefs.ec:1321 #: ./src/grammar.ec:3128 #: ./src/grammar.ec:3129 #: ./src/grammar.ec:3130 @@ -309,46 +309,46 @@ msgstr "redefinition of destructor for class %s\n" msgid "syntax error\n" msgstr "syntax error\n" -#: ./src/pass15.ec:8750 +#: ./src/pass15.ec:8840 msgid "too many arguments for function %s (%d given, expected %d)\n" msgstr "too many arguments for function %s (%d given, expected %d)\n" -#: ./src/pass15.ec:8746 +#: ./src/pass15.ec:8836 msgid "too many arguments for method %s::%s (%d given, expected %d)\n" msgstr "too many arguments for method %s::%s (%d given, expected %d)\n" -#: ./src/pass15.ec:1949 +#: ./src/pass15.ec:1955 msgid "too many initializers for instantiation of class %s\n" msgstr "too many initializers for instantiation of class %s\n" -#: ./src/pass15.ec:3357 +#: ./src/pass15.ec:3365 msgid "too many parameters\n" msgstr "too many parameters\n" -#: ./src/pass15.ec:9604 +#: ./src/pass15.ec:9694 msgid "undefined class %s\n" msgstr "undefined class %s\n" -#: ./src/pass15.ec:10182 +#: ./src/pass15.ec:10272 msgid "unresolved identifier %s::%s\n" msgstr "unresolved identifier %s::%s\n" -#: ./src/pass15.ec:10101 +#: ./src/pass15.ec:10191 msgid "unresolved identifier %s; expected %s\n" msgstr "unresolved identifier %s; expected %s\n" -#: ./src/pass15.ec:10113 -#: ./src/pass15.ec:10184 +#: ./src/pass15.ec:10203 +#: ./src/pass15.ec:10274 msgid "unresolved identifier %s\n" msgstr "unresolved identifier %s\n" -#: ./src/pass15.ec:1889 +#: ./src/pass15.ec:1895 msgid "unresolved symbol used as an instance method %s\n" msgstr "unresolved symbol used as an instance method %s\n" -#: ./src/pass15.ec:7762 -#: ./src/pass15.ec:7919 -#: ./src/pass15.ec:7926 +#: ./src/pass15.ec:7852 +#: ./src/pass15.ec:8009 +#: ./src/pass15.ec:8016 msgid "void *: unknown size\n" msgstr "void *: unknown size\n" diff --git a/compiler/libec/src/ast.ec b/compiler/libec/src/ast.ec index 1890b2e..e9aab44 100644 --- a/compiler/libec/src/ast.ec +++ b/compiler/libec/src/ast.ec @@ -139,7 +139,7 @@ public TemplateParameter MkTypeTemplateParameter(Identifier identifier, Template if(identifier.string) { TemplateParameter param { type = TemplateParameterType::type, identifier = identifier, dataType = baseTplDatatype, defaultArgument = defaultArgument }; - TemplatedType type { key = (uint)identifier.string, param = param }; + TemplatedType type { key = (uintptr)identifier.string, param = param }; if(!curContext.templateTypes.Add((BTNode)type)) delete type; return param; @@ -1660,7 +1660,7 @@ void SetupBaseSpecs(Symbol symbol, OldList baseSpecs) dataTypeString = p.dataTypeString /*, dataType = { specs, decl }*/ }; } - type = TemplatedType { key = (uint)p.name, param = param }; + type = TemplatedType { key = (uintptr)p.name, param = param }; if(!curContext.templateTypes.Add((BTNode)type)) delete type; } diff --git a/compiler/libec/src/ecdefs.ec b/compiler/libec/src/ecdefs.ec index e1fd43d..62b5588 100644 --- a/compiler/libec/src/ecdefs.ec +++ b/compiler/libec/src/ecdefs.ec @@ -1053,7 +1053,7 @@ public enum TypeKind voidType, charType, shortType, intType, int64Type, longType, floatType, doubleType, classType, structType, unionType, functionType, arrayType, pointerType, ellipsisType, enumType, methodType, vaListType, /*typedObjectType, anyObjectType, classPointerType, */ dummyType, - subClassType, templateType, thisClassType + subClassType, templateType, thisClassType, intPtrType }; public class Type : struct @@ -1155,6 +1155,8 @@ public: unsigned char * p; int64 i64; uint64 ui64; + intptr iptr; + uintptr uiptr; }; OpTable ops; }; diff --git a/compiler/libec/src/loadSymbols.ec b/compiler/libec/src/loadSymbols.ec index ce1081a..8488bf2 100644 --- a/compiler/libec/src/loadSymbols.ec +++ b/compiler/libec/src/loadSymbols.ec @@ -661,7 +661,7 @@ public bool LoadSymbols(char * fileName, ImportType importType, bool loadDllOnly dataTypeString = CopyString(line), module = privateModule }; - data.key = (uint)(data.fullName + start); + data.key = (uintptr)(data.fullName + start); // Reusing functions here... nameSpace->functions.Add((BTNode)data); } diff --git a/compiler/libec/src/pass15.ec b/compiler/libec/src/pass15.ec index c0923aa..55d1b5a 100644 --- a/compiler/libec/src/pass15.ec +++ b/compiler/libec/src/pass15.ec @@ -205,6 +205,7 @@ bool NeedCast(Type type1, Type type2) case shortType: case intType: case int64Type: + case intPtrType: if(type1.passAsTemplate && !type2.passAsTemplate) return true; return type1.isSigned != type2.isSigned; @@ -431,6 +432,8 @@ public char * PrintDouble(double result) else if(op2.kind == intType) *value2 = (t) op2.ui; \ if(op2.kind == int64Type && op2.type.isSigned) *value2 = (t) op2.i64; \ else if(op2.kind == int64Type) *value2 = (t) op2.ui64; \ + else if(op2.kind == intPtrType && op2.type.isSigned) *value2 = (t) op2.iptr; \ + else if(op2.kind == intPtrType) *value2 = (t) op2.uiptr; \ else if(op2.kind == shortType && op2.type.isSigned) *value2 = (t) op2.s; \ else if(op2.kind == shortType) *value2 = (t) op2.us; \ else if(op2.kind == charType && op2.type.isSigned) *value2 = (t) op2.c; \ @@ -447,6 +450,8 @@ GETVALUE(Int, int); GETVALUE(UInt, unsigned int); GETVALUE(Int64, int64); GETVALUE(UInt64, uint64); +GETVALUE(IntPtr, intptr); +GETVALUE(UIntPtr, uintptr); GETVALUE(Short, short); GETVALUE(UShort, unsigned short); GETVALUE(Char, char); @@ -758,6 +763,7 @@ public int ComputeTypeSize(Type type) case charType: type.alignment = size = sizeof(char); break; case intType: type.alignment = size = sizeof(int); break; case int64Type: type.alignment = size = sizeof(int64); break; + case intPtrType: type.alignment = size = sizeof(intptr); break; case longType: type.alignment = size = sizeof(long); break; case shortType: type.alignment = size = sizeof(short); break; case floatType: type.alignment = size = sizeof(float); break; @@ -2263,7 +2269,7 @@ public Context SetupTemplatesContext(Class _class) { if(param.type == type && param.identifier) { - TemplatedType type { key = (uint)param.identifier.string, param = param }; + TemplatedType type { key = (uintptr)param.identifier.string, param = param }; curContext.templateTypes.Add((BTNode)type); } } @@ -2292,7 +2298,7 @@ public Context SetupTemplatesContext(Class _class) dataTypeString = p.dataTypeString /*, dataType = { specs, decl }*/ }; } - type = TemplatedType { key = (uint)p.name, param = param }; + type = TemplatedType { key = (uintptr)p.name, param = param }; curContext.templateTypes.Add((BTNode)type); } } @@ -3178,11 +3184,13 @@ public bool MatchTypes(Type source, Type dest, OldList conversions, Class owning return true; else if(dest.kind == int64Type && (source.kind == shortType || source.kind == charType || source.kind == intType)) return true; + else if(dest.kind == intPtrType && (source.kind == shortType || source.kind == charType || source.kind == intType)) + return true; else if(source.kind == enumType && - (dest.kind == intType || dest.kind == shortType || dest.kind == charType || dest.kind == longType || dest.kind == int64Type)) + (dest.kind == intType || dest.kind == shortType || dest.kind == charType || dest.kind == longType || dest.kind == int64Type || dest.kind == intPtrType)) return true; else if(dest.kind == enumType && - (source.kind == intType || source.kind == shortType || source.kind == charType || source.kind == longType || dest.kind == int64Type)) + (source.kind == intType || source.kind == shortType || source.kind == charType || source.kind == longType || source.kind == int64Type || source.kind == intPtrType)) return true; else if((dest.kind == functionType || (dest.kind == pointerType && dest.type.kind == functionType) || dest.kind == methodType) && ((source.kind == functionType || (source.kind == pointerType && source.type.kind == functionType) || source.kind == methodType))) @@ -4258,6 +4266,19 @@ public Operand GetOperand(Expression exp) } op.kind = intType; break; + case intPtrType: + if(type.isSigned) + { + op.iptr = (intptr)_strtoi64(exp.constant, null, 0); + op.ops = intOps; + } + else + { + op.uiptr = (uintptr)_strtoui64(exp.constant, null, 0); + op.ops = uintOps; + } + op.kind = intType; + break; case floatType: op.f = (float)strtod(exp.constant, null); op.ops = floatOps; @@ -4382,6 +4403,14 @@ static void PopulateInstanceProcessMember(Instantiation inst, OldList * memberLi exp.type = constantExp; break; } + case intPtrType: + { + FreeExpContents(exp); + + exp.constant = PrintInt64((int64)*(intptr*)ptr); + exp.type = constantExp; + break; + } default: Compiler_Error($"Unhandled type populating instance\n"); } @@ -4483,6 +4512,12 @@ void PopulateInstance(Instantiation inst) exp.type = constantExp; break; } + case intPtrType: + { + exp.constant = PrintInt64((int64)*(intptr*)ptr); + exp.type = constantExp; + break; + } default: Compiler_Error($"Unhandled type populating instance\n"); } @@ -4679,6 +4714,11 @@ void ComputeInstantiation(Expression exp) GetInt64(value, (int64*)ptr); break; } + case intPtrType: + { + GetIntPtr(value, (intptr*)ptr); + break; + } case floatType: { GetFloat(value, (float*)ptr); @@ -4741,6 +4781,12 @@ void ComputeInstantiation(Expression exp) Set(inst.data, _strtoi64(value.constant, null, 0)); break; } + case intPtrType: + { + void (*Set)(void *, intptr) = (void *)prop.Set; + Set(inst.data, (intptr)_strtoi64(value.constant, null, 0)); + break; + } } } else if(value.type == stringExp) @@ -4852,6 +4898,12 @@ void ComputeInstantiation(Expression exp) else bits |= ((uint64)part << bitMember.pos); break; + case intPtrType: + if(type.isSigned) + bits |= ((intptr)part << bitMember.pos); + else + bits |= ((uintptr)part << bitMember.pos); + break; } } } @@ -5453,6 +5505,24 @@ void ComputeExpression(Expression exp) PopulateInstance(exp.instance); break; } + case intPtrType: + { + // TOFIX: + intptr intValue; + void (*Set)(void *, intptr) = (void *)prop.Set; + + exp.instance = Instantiation { }; + exp.instance.data = new0 byte[_class.structSize]; + exp.instance._class = MkSpecifierName/*MkClassName*/(_class.fullName); + exp.instance.loc = exp.loc; + exp.type = instanceExp; + + GetIntPtr(value, &intValue); + + Set(exp.instance.data, intValue); + PopulateInstance(exp.instance); + break; + } case doubleType: { double doubleValue; @@ -5742,6 +5812,24 @@ void ComputeExpression(Expression exp) exp.type = constantExp; } break; + case intPtrType: + if(type.isSigned) + { + intptr value; + GetIntPtr(e, &value); + FreeExpContents(exp); + exp.constant = PrintInt64((int64)value); + exp.type = constantExp; + } + else + { + uintptr value; + GetUIntPtr(e, &value); + FreeExpContents(exp); + exp.constant = PrintUInt64((uint64)value); + exp.type = constantExp; + } + break; case floatType: { float value; @@ -6231,7 +6319,7 @@ static void ProcessDeclaration(Declaration decl); static void GetTypeSpecs(Type type, OldList * specs) { - if(!type.isSigned) ListAdd(specs, MkSpecifier(UNSIGNED)); + if(!type.isSigned && type.kind != intPtrType) ListAdd(specs, MkSpecifier(UNSIGNED)); switch(type.kind) { case classType: @@ -6249,6 +6337,7 @@ static void GetTypeSpecs(Type type, OldList * specs) case charType: ListAdd(specs, MkSpecifier(CHAR)); break; case shortType: ListAdd(specs, MkSpecifier(SHORT)); break; case int64Type: ListAdd(specs, MkSpecifier(INT64)); break; + case intPtrType: ListAdd(specs, MkSpecifierName(type.isSigned ? "intptr" : "uintptr")); break; case intType: default: ListAdd(specs, MkSpecifier(INT)); break; @@ -6318,6 +6407,7 @@ static void _PrintType(Type type, char * string, bool printName, bool printFunct case voidType: strcat(string, "void"); break; case intType: strcat(string, type.isSigned ? "int" : "uint"); break; case int64Type: strcat(string, type.isSigned ? "int64" : "uint64"); break; + case intPtrType: strcat(string, type.isSigned ? "intptr" : "uintptr"); break; case charType: strcat(string, type.isSigned ? "char" : "byte"); break; case shortType: strcat(string, type.isSigned ? "short" : "uint16"); break; case floatType: strcat(string, "float"); break; @@ -7756,7 +7846,7 @@ void ProcessExpressionType(Expression exp) if(assign && type1 && type1.kind == pointerType && exp.op.exp2.expType) { - if(exp.op.exp2.expType.kind == int64Type || exp.op.exp2.expType.kind == intType || exp.op.exp2.expType.kind == shortType || exp.op.exp2.expType.kind == charType) + if(exp.op.exp2.expType.kind == intPtrType || exp.op.exp2.expType.kind == int64Type || exp.op.exp2.expType.kind == intType || exp.op.exp2.expType.kind == shortType || exp.op.exp2.expType.kind == charType) { if(exp.op.op != '=' && type1.type.kind == voidType) Compiler_Error($"void *: unknown size\n"); @@ -7913,14 +8003,14 @@ void ProcessExpressionType(Expression exp) } } - if(!boolResult && ((type1.kind == pointerType || type1.kind == arrayType || (type1.kind == classType && !strcmp(type1._class.string, "String"))) && (type2.kind == int64Type || type2.kind == intType || type2.kind == shortType || type2.kind == charType))) + if(!boolResult && ((type1.kind == pointerType || type1.kind == arrayType || (type1.kind == classType && !strcmp(type1._class.string, "String"))) && (type2.kind == intPtrType || type2.kind == int64Type || type2.kind == intType || type2.kind == shortType || type2.kind == charType))) { if(type1.kind != classType && type1.type.kind == voidType) Compiler_Error($"void *: unknown size\n"); exp.expType = type1; if(type1) type1.refCount++; } - else if(!boolResult && ((type2.kind == pointerType || type2.kind == arrayType || (type2.kind == classType && !strcmp(type2._class.string, "String"))) && (type1.kind == int64Type || type1.kind == intType || type1.kind == shortType || type1.kind == charType))) + else if(!boolResult && ((type2.kind == pointerType || type2.kind == arrayType || (type2.kind == classType && !strcmp(type2._class.string, "String"))) && (type1.kind == intPtrType || type1.kind == int64Type || type1.kind == intType || type1.kind == shortType || type1.kind == charType))) { if(type2.kind != classType && type2.type.kind == voidType) Compiler_Error($"void *: unknown size\n"); diff --git a/compiler/libec/src/pass2.ec b/compiler/libec/src/pass2.ec index a751815..e1e20c1 100644 --- a/compiler/libec/src/pass2.ec +++ b/compiler/libec/src/pass2.ec @@ -95,8 +95,11 @@ static Expression FixReference(Expression e, bool wantReference) { Class _class = type._class ? type._class.registered : null; // TOLOOKINTO: What was systemClass used for here? Exclude "typed_object"... + // TOFIX: In which case with systemClass do we actually want this to come here? Can't think of any! if(_class && (_class.type == structClass || _class.type == noHeadClass || (_class.type == systemClass && _class.base && + strcmp(_class.fullName, "uintptr") && + strcmp(_class.fullName, "intptr") && strcmp(_class.fullName, "ecere::com::Instance") && strcmp(_class.fullName, "ecere::com::Class") && strcmp(_class.dataTypeString, "char *")))) diff --git a/compiler/libec/src/pass3.ec b/compiler/libec/src/pass3.ec index 4a38d20..56345a0 100644 --- a/compiler/libec/src/pass3.ec +++ b/compiler/libec/src/pass3.ec @@ -120,6 +120,7 @@ static bool ReplaceClassSpec(OldList specs, Specifier spec, bool param) !strcmp(_class.fullName, "uint32") || !strcmp(_class.fullName, "uint16") || !strcmp(_class.fullName, "uintptr") || + !strcmp(_class.fullName, "intptr") || !strcmp(_class.fullName, "uint") || !strcmp(_class.fullName, "byte"))) { @@ -130,6 +131,7 @@ static bool ReplaceClassSpec(OldList specs, Specifier spec, bool param) !strcmp(_class.dataTypeString, "uint32") || !strcmp(_class.dataTypeString, "uint16") || !strcmp(_class.dataTypeString, "uintptr") || + !strcmp(_class.dataTypeString, "intptr") || !strcmp(_class.dataTypeString, "uint") || !strcmp(_class.dataTypeString, "byte")) { diff --git a/ecere/src/com/dataTypes.ec b/ecere/src/com/dataTypes.ec index d56a736..55264b8 100644 --- a/ecere/src/com/dataTypes.ec +++ b/ecere/src/com/dataTypes.ec @@ -1,5 +1,3 @@ -#include - namespace com; #if defined(ECERE_BOOTSTRAP) @@ -1473,8 +1471,8 @@ static void RegisterClass_Integer(Module module) delete integerClass.dataTypeString; integerClass.dataTypeString = CopyString("uintptr_t"); integerClass.structSize = 0; - integerClass.typeSize = sizeof(uintptr_t); - if(sizeof(uintptr_t) == 8) + integerClass.typeSize = sizeof(uintptr); + if(sizeof(uintptr) == 8) { eClass_AddMethod(integerClass, "OnGetString", null, UInt64_OnGetString, publicAccess); eClass_AddMethod(integerClass, "OnSerialize", null, Int64_OnSerialize, publicAccess); @@ -1495,8 +1493,8 @@ static void RegisterClass_Integer(Module module) delete integerClass.dataTypeString; integerClass.dataTypeString = CopyString("intptr_t"); integerClass.structSize = 0; - integerClass.typeSize = sizeof(intptr_t); - if(sizeof(uintptr_t) == 8) + integerClass.typeSize = sizeof(intptr); + if(sizeof(intptr) == 8) { eClass_AddMethod(integerClass, "OnGetString", null, Int64_OnGetString, publicAccess); eClass_AddMethod(integerClass, "OnSerialize", null, Int64_OnSerialize, publicAccess); diff --git a/ecere/src/com/instance.ec b/ecere/src/com/instance.ec index 3359777..21496aa 100644 --- a/ecere/src/com/instance.ec +++ b/ecere/src/com/instance.ec @@ -1387,7 +1387,7 @@ static void * _malloc(unsigned int size) if(!recurse && !stack.recurse) { stack.recurse = true; - block = MemInfo { size = size, key = (uint)((byte *)pointer + REDZONE), id = blockID++ }; + block = MemInfo { size = size, key = (uintptr)((byte *)pointer + REDZONE), id = blockID++ }; memcpy(block.allocLoc, stack.frames + stack.pos - Min(stack.pos, MAX_MEMORY_LOC), Min(stack.pos, MAX_MEMORY_LOC) * sizeof(char *)); memBlocks.Add(block); stack.recurse = false; @@ -1443,7 +1443,7 @@ static void * _calloc(int n, unsigned int size) MemInfo block; stack.recurse = true; - block = MemInfo { size = size, key = (uint)((byte *)pointer + REDZONE), _class = allocateClass, internal = allocateInternal, id = blockID++ }; + block = MemInfo { size = size, key = (uintptr)((byte *)pointer + REDZONE), _class = allocateClass, internal = allocateInternal, id = blockID++ }; memcpy(block.allocLoc, stack.frames + stack.pos - Min(stack.pos, MAX_MEMORY_LOC), Min(stack.pos, MAX_MEMORY_LOC) * sizeof(char *)); memBlocks.Add(block); stack.recurse = false; @@ -1534,7 +1534,7 @@ static void * _realloc(void * pointer, unsigned int size) { MemInfo block; stack.recurse = true; - block = MemInfo { size = size, key = (uint)((byte *)pointer + REDZONE), id = blockID++ }; + block = MemInfo { size = size, key = (uintptr)((byte *)pointer + REDZONE), id = blockID++ }; memcpy(block.allocLoc, stack.frames + stack.pos - Min(stack.pos, MAX_MEMORY_LOC), Min(stack.pos, MAX_MEMORY_LOC) * sizeof(char *)); memBlocks.Add(block); stack.recurse = false; @@ -1622,7 +1622,7 @@ static void * _crealloc(void * pointer, unsigned int size) { MemInfo block; stack.recurse = true; - block = MemInfo { size = size, key = (uint)((byte *)pointer + REDZONE), id = blockID++ }; + block = MemInfo { size = size, key = (uintptr)((byte *)pointer + REDZONE), id = blockID++ }; memcpy(block.allocLoc, stack.frames + stack.pos - Min(stack.pos, MAX_MEMORY_LOC), Min(stack.pos, MAX_MEMORY_LOC) * sizeof(char *)); memBlocks.Add(block); stack.recurse = false; @@ -2877,7 +2877,7 @@ public dllexport void eClass_Unregister(Class _class) static BTNamedLink ScanNameSpace(NameSpace nameSpace, char * name, void * listOffset) { BinaryTree * tree = (BinaryTree *)((byte *)nameSpace + (uint)listOffset); - BTNamedLink link = (BTNamedLink)tree->Find((uint)name); + BTNamedLink link = (BTNamedLink)tree->Find((uintptr)name); NameSpace * child; if(!link) { diff --git a/ecere/src/gfx/drivers/LFBDisplayDriver.ec b/ecere/src/gfx/drivers/LFBDisplayDriver.ec index c48e18f..0785698 100644 --- a/ecere/src/gfx/drivers/LFBDisplayDriver.ec +++ b/ecere/src/gfx/drivers/LFBDisplayDriver.ec @@ -117,10 +117,10 @@ static void hb_getAdvances(HB_Font font, const HB_Glyph * glyphs, uint numGlyphs uint packNo = glyphNo & 0xFFFFFF80; if(packNo != lastPack) { - pack = (GlyphPack)glFont.glyphPacks.Find(packNo); + pack = (GlyphPack)glFont.glyphPacks.Find((uintptr)packNo); if(!pack) { - glFont.glyphPacks.Add((pack = GlyphPack { key = packNo })); + glFont.glyphPacks.Add((pack = GlyphPack { key = (uintptr)packNo })); pack.Render(glFont, fontEntryNum, glFont.displaySystem); pack.bitmap.alphaBlend = true; } @@ -203,10 +203,10 @@ static void hb_getGlyphMetrics(HB_Font font, HB_Glyph theGlyph, HB_GlyphMetrics uint packNo = glyphNo & 0xFFFFFF80; if(packNo != lastPack) { - pack = (GlyphPack)glFont.glyphPacks.Find(packNo); + pack = (GlyphPack)glFont.glyphPacks.Find((uintptr)packNo); if(!pack) { - pack = { key = packNo }; + pack = { key = (uintptr)packNo }; glFont.glyphPacks.Add(pack); pack.Render(glFont, fontEntryNum, glFont.displaySystem); pack.bitmap.alphaBlend = true; @@ -356,8 +356,8 @@ class GlyphPack : BTNode FontEntry fontEntry = null; FT_Face faces[128]; float scales[128]; - bool isGlyph = key & 0x80000000; - int curScript = (key & 0x7F000000) >> 24; + bool isGlyph = (uint)key & 0x80000000; + int curScript = ((uint)key & 0x7F000000) >> 24; unichar testChar = 0; /* if(isGlyph) @@ -433,7 +433,7 @@ class GlyphPack : BTNode int entry = 0; if(isGlyph) { - uint glyph = (key | c) & 0xFFFFFF; + uint glyph = ((uint)key | c) & 0xFFFFFF; for(entry = startFontEntry; entry < MAX_FONT_LINK_ENTRIES; entry++) { fontEntry = font.fontEntries[entry]; @@ -453,7 +453,7 @@ class GlyphPack : BTNode { uint glyph; fontEntry = font.fontEntries[entry]; - if((glyph = FT_Get_Char_Index(fontEntry.face, (key | c) & 0xFFFFFF)) || entry == MAX_FONT_LINK_ENTRIES-1 || !font.fontEntries[entry+1]) + if((glyph = FT_Get_Char_Index(fontEntry.face, ((uint)key | c) & 0xFFFFFF)) || entry == MAX_FONT_LINK_ENTRIES-1 || !font.fontEntries[entry+1]) { if(!FT_Load_Glyph(fontEntry.face, glyph, FT_LOAD_DEFAULT /*FT_LOAD_NO_HINTING*/) || entry == MAX_FONT_LINK_ENTRIES-1 || !font.fontEntries[entry+1]) break; @@ -492,7 +492,7 @@ class GlyphPack : BTNode //double x_scale = faces[c]->size->metrics.x_ppem / em_size; double y_scale = em_size ? (faces[c]->size->metrics.y_ppem / em_size) : 1; double ascender = faces[c]->ascender * y_scale; - int glyphNo = isGlyph ? ((key | c) & 0x00FFFFFF) : FT_Get_Char_Index(faces[c], key | c); + int glyphNo = isGlyph ? (((uint)key | c) & 0x00FFFFFF) : FT_Get_Char_Index(faces[c], (uint)key | c); FT_Load_Glyph(faces[c], glyphNo, /*FT_LOAD_DEFAULT | FT_LOAD_FORCE_AUTOHINT*/ FT_LOAD_DEFAULT /*FT_LOAD_NO_HINTING*/); // FT_LOAD_RENDER // FT_LOAD_NO_HINTING @@ -3002,7 +3002,7 @@ public class LFBDisplayDriver : DisplayDriver if(!ftLibrary) FT_Init_FreeType( &ftLibrary ); - fontEntry = FontEntry { key = (uint)CopyString(fileName) }; + fontEntry = FontEntry { key = (uintptr)CopyString(fileName) }; fontEntry.stream = stream; /* @@ -3414,7 +3414,7 @@ public class LFBDisplayDriver : DisplayDriver if(!ftLibrary) FT_Init_FreeType( &ftLibrary ); - fontEntry = FontEntry { key = (uint)CopyString(fileName) }; + fontEntry = FontEntry { key = (uintptr)CopyString(fileName) }; fontEntry.stream = stream; //args.num_params = 1; @@ -3488,10 +3488,10 @@ public class LFBDisplayDriver : DisplayDriver pack = font.asciiPack; else { - pack = (GlyphPack)font.glyphPacks.Find(packNo); + pack = (GlyphPack)font.glyphPacks.Find((uintptr)packNo); if(!pack) { - pack = GlyphPack { key = packNo }; + pack = GlyphPack { key = (uintptr)packNo }; font.glyphPacks.Add(pack); pack.Render(font, fontEntryNum, displaySystem); } diff --git a/ecere/src/net/HTTPFile.ec b/ecere/src/net/HTTPFile.ec index 631a40d..2ae06a4 100644 --- a/ecere/src/net/HTTPFile.ec +++ b/ecere/src/net/HTTPFile.ec @@ -45,7 +45,7 @@ static class ServerNameCache server = (ServerNode)servers.FindString(host); if(!server) { - server = ServerNode { key = (uint)CopyString(host) }; + server = ServerNode { key = (uintptr)CopyString(host) }; servers.Add(server); server.resolved = GetAddressFromName(host, server.address); } diff --git a/ecere/src/sys/unicode.ec b/ecere/src/sys/unicode.ec index 505c9a1..317534b 100644 --- a/ecere/src/sys/unicode.ec +++ b/ecere/src/sys/unicode.ec @@ -491,10 +491,10 @@ static class UnicodeDatabase if(category) { Range range { start, end, category }; - BTNode node { key = (uint) &range }; + BTNode node { key = (uintptr) &range }; if(categories.Add(node)) { - node.key = (uint)new Range[1]; + node.key = (uintptr)new Range[1]; *(Range *)node.key = range; } else @@ -553,7 +553,7 @@ public CharCategory GetCharCategory(unichar ch) { CharCategory category = none; Range range { ch, ch }; - BTNode node = dataBase.categories.Find((uint) &range); + BTNode node = dataBase.categories.Find((uintptr) &range); if(node) category = ((Range *)node.key)->category; return category; -- 1.8.3.1