[vmkit-commits] [vmkit] r198415 - J3Mangler does not use ins() anymore, it also does not use J3Method anymore.
Gael Thomas
gael.thomas at lip6.fr
Fri Jan 3 06:04:09 PST 2014
Author: gthomas
Date: Fri Jan 3 08:04:09 2014
New Revision: 198415
URL: http://llvm.org/viewvc/llvm-project?rev=198415&view=rev
Log:
J3Mangler does not use ins() anymore, it also does not use J3Method anymore.
Modified:
vmkit/branches/mcjit/include/j3/j3mangler.h
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
Modified: vmkit/branches/mcjit/include/j3/j3mangler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3mangler.h?rev=198415&r1=198414&r2=198415&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3mangler.h (original)
+++ vmkit/branches/mcjit/include/j3/j3mangler.h Fri Jan 3 08:04:09 2014
@@ -2,6 +2,7 @@
#define _J3_MANGLER_H_
#include <stdint.h>
+#include <sys/types.h>
namespace vmkit {
class Name;
@@ -10,16 +11,17 @@ namespace vmkit {
namespace j3 {
class J3Class;
class J3Method;
+ class J3Signature;
class J3Mangler {
- static const uint32_t max = 65536;
+ static const size_t max = 65536;
J3Class* from;
char buf[max];
char* cur;
char* next;
- void check(uint32_t n);
+ void check(size_t n);
public:
static const char* j3Id;
@@ -28,12 +30,14 @@ namespace j3 {
J3Mangler(J3Class* from);
char* cStr() { return buf; }
- uint32_t length() { return cur - buf; }
+ size_t length() { return cur - buf; }
+ J3Mangler* mangle(uint16_t utf16);
J3Mangler* mangle(const char* prefix);
+ J3Mangler* mangle(const char* prefix, size_t length);
J3Mangler* mangle(const vmkit::Name* name);
- J3Mangler* mangle(J3Method* method);
- J3Mangler* mangleType(J3Method* method);
+ J3Mangler* mangle(J3Signature* signature);
+ J3Mangler* mangle(const vmkit::Name* clName, const vmkit::Name* name);
};
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198415&r1=198414&r2=198415&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Fri Jan 3 08:04:09 2014
@@ -1701,9 +1701,9 @@ llvm::Type* J3CodeGen::doNativeType(J3Ty
llvm::Function* J3CodeGen::lookupNative() {
J3Mangler mangler(cl);
- mangler.mangle(mangler.javaId)->mangle(method);
+ mangler.mangle(mangler.javaId)->mangle(method->cl()->name(), method->name());
uint32_t length = mangler.length();
- mangler.mangleType(method);
+ mangler.mangle(method->signature());
void* fnPtr = method->nativeFnPtr();
@@ -1712,7 +1712,7 @@ llvm::Function* J3CodeGen::lookupNative(
if(!fnPtr) {
mangler.cStr()[length] = 0;
- fnPtr = loader->lookupNativeFunctionPointer(method, mangler.mangleType(method)->cStr());
+ fnPtr = loader->lookupNativeFunctionPointer(method, mangler.cStr());
}
if(!fnPtr)
Modified: vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc?rev=198415&r1=198414&r2=198415&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc Fri Jan 3 08:04:09 2014
@@ -3,6 +3,7 @@
#include "j3/j3classloader.h"
#include "j3/j3method.h"
#include "j3/j3utf16.h"
+#include "j3/j3thread.h"
#include "j3/j3.h"
using namespace j3;
@@ -16,47 +17,45 @@ J3Mangler::J3Mangler(J3Class* _from) {
cur = buf;
}
-void J3Mangler::check(uint32_t n) {
- next = cur + n;
- if((next+1) >= (buf + max))
- J3::internalError("unable to mangle: not enough space");
-}
+J3Mangler* J3Mangler::mangle(J3Signature* signature) {
+ const vmkit::Name* name = signature->name();
-J3Mangler* J3Mangler::mangleType(J3Method* method) {
- J3Signature* type = method->signature();
+ if(name->cStr()[1] == J3Cst::ID_Right)
+ return this;
- if(type->nbIns()) {
- check(2);
- cur[0] = '_';
- cur[1] = '_';
- cur = next;
-
- for(uint32_t i=0; i<type->nbIns(); i++) {
- check(type->ins(i)->nativeNameLength());
- memcpy(cur, type->ins(i)->nativeName(), type->ins(i)->nativeNameLength());
- cur = next;
- }
+ check(2);
+ cur[0] = '_';
+ cur[1] = '_';
+ cur = next;
+
+ J3Utf16Encoder encoder(name);
+ encoder.nextUtf16();
+ uint16_t c;
+
+ while(!encoder.isEof() && ((c = encoder.nextUtf16()) != J3Cst::ID_Right)) {
+ mangle(c);
}
- check(1);
+
*cur = 0;
-
+
return this;
}
-J3Mangler* J3Mangler::mangle(J3Method* method) {
- check(method->cl()->nativeNameLength() - 3);
- memcpy(cur, method->cl()->nativeName() + 1, method->cl()->nativeNameLength() - 3);
- *next = '_';
- cur = next+1;
-
- mangle(method->name());
+J3Mangler* J3Mangler::mangle(const vmkit::Name* clName, const vmkit::Name* name) {
+ mangle(clName);
+ check(1);
+ *cur = '_';
+ cur = next;
+ mangle(name);
return this;
}
J3Mangler* J3Mangler::mangle(const char* prefix) {
- uint32_t length = strlen(prefix);
+ return mangle(prefix, strlen(prefix));
+}
+J3Mangler* J3Mangler::mangle(const char* prefix, size_t length) {
check(length);
memcpy(cur, prefix, length);
*next = 0;
@@ -68,48 +67,8 @@ J3Mangler* J3Mangler::mangle(const char*
J3Mangler* J3Mangler::mangle(const vmkit::Name* name) {
J3Utf16Encoder encoder(name);
- next = cur;
while(!encoder.isEof()) {
- uint16_t c = encoder.nextUtf16();
-
- if(c > 256) {
- check(6);
- *cur++ = '_';
- *cur++ = '0';
- *cur++ = (c >> 24 & 0xf) + '0';
- *cur++ = (c >> 16 & 0xf) + '0';
- *cur++ = (c >> 8 & 0xf) + '0';
- *cur++ = (c >> 0 & 0xf) + '0';
- } else {
- switch(c) {
- case '<':
- case '>':
- case '(':
- case ')':
- break;
- case '_':
- check(2);
- *cur++ = '_';
- *cur++ = '1';
- break;
- case ';':
- check(2);
- *cur++ = '_';
- *cur++ = '2';
- break;
- case '[':
- check(2);
- *cur++ = '_';
- *cur++ = '3';
- break;
- case '/':
- c = '_';
- default:
- check(1);
- *cur++ = c;
- }
- }
- cur = next;
+ mangle(encoder.nextUtf16());
}
*cur = 0;
@@ -117,3 +76,54 @@ J3Mangler* J3Mangler::mangle(const vmkit
return this;
}
+J3Mangler* J3Mangler::mangle(uint16_t c) {
+ if(c > 256) {
+ check(6);
+ *cur++ = '_';
+ *cur++ = '0';
+ *cur++ = (c >> 24 & 0xf) + '0';
+ *cur++ = (c >> 16 & 0xf) + '0';
+ *cur++ = (c >> 8 & 0xf) + '0';
+ *cur++ = (c >> 0 & 0xf) + '0';
+ } else {
+
+ switch(c) {
+ case '<':
+ case '>':
+ break; /* do not encode at all */
+ case '(':
+ case ')':
+ J3Thread::get()->vm()->internalError("should not try to encode a special character such as %c", (char)c);
+ case '_':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '1';
+ break;
+ case ';':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '2';
+ break;
+ case '[':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '3';
+ break;
+ case '/':
+ c = '_';
+ default:
+ check(1);
+ *cur++ = c;
+ }
+
+ }
+ cur = next;
+
+ return this;
+}
+
+void J3Mangler::check(size_t n) {
+ next = cur + n;
+ if((next+1) >= (buf + max))
+ J3::internalError("unable to mangle: not enough space");
+}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=198415&r1=198414&r2=198415&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Fri Jan 3 08:04:09 2014
@@ -223,7 +223,7 @@ void J3Method::buildLLVMNames(J3Class* f
uint32_t plen = 5;
J3Mangler mangler(from);
- mangler.mangle(mangler.j3Id)->mangle(this)->mangleType(this);
+ mangler.mangle(mangler.j3Id)->mangle(cl()->name(), name())->mangle(signature());
uint32_t length = mangler.length() + plen;
_llvmAllNames = (char*)cl()->loader()->allocator()->allocate(length + 1);
More information about the vmkit-commits
mailing list