MCPcopy Create free account
hub / github.com/ReadyTalk/avian / parseMethodTable

Function parseMethodTable

src/machine.cpp:2409–2751  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2407}
2408
2409void parseMethodTable(Thread* t, Stream& s, GcClass* class_, GcSingleton* pool)
2410{
2411 PROTECT(t, class_);
2412 PROTECT(t, pool);
2413
2414 GcHashMap* virtualMap = makeHashMap(t, 0, 0);
2415 PROTECT(t, virtualMap);
2416
2417 unsigned virtualCount = 0;
2418 unsigned declaredVirtualCount = 0;
2419
2420 GcArray* superVirtualTable = 0;
2421 PROTECT(t, superVirtualTable);
2422
2423 if ((class_->flags() & ACC_INTERFACE) == 0) {
2424 if (class_->super()) {
2425 superVirtualTable = cast<GcArray>(t, class_->super()->virtualTable());
2426 }
2427
2428 if (superVirtualTable) {
2429 virtualCount = superVirtualTable->length();
2430 for (unsigned i = 0; i < virtualCount; ++i) {
2431 object method = superVirtualTable->body()[i];
2432 hashMapInsert(t, virtualMap, method, method, methodHash);
2433 }
2434 }
2435 }
2436
2437 GcList* newVirtuals = makeList(t, 0, 0, 0);
2438 PROTECT(t, newVirtuals);
2439
2440 unsigned count = s.read2();
2441
2442 if (DebugClassReader) {
2443 fprintf(stderr, " method count %d\n", count);
2444 }
2445
2446 if (count) {
2447 GcArray* methodTable = makeArray(t, count);
2448 PROTECT(t, methodTable);
2449
2450 GcMethodAddendum* addendum = 0;
2451 PROTECT(t, addendum);
2452
2453 GcCode* code = 0;
2454 PROTECT(t, code);
2455
2456 for (unsigned i = 0; i < count; ++i) {
2457 unsigned flags = s.read2();
2458 unsigned name = s.read2();
2459 unsigned spec = s.read2();
2460
2461 if (DebugClassReader) {
2462 fprintf(stderr,
2463 " method flags %d name %d spec %d '%s%s'\n",
2464 flags,
2465 name,
2466 spec,

Callers 1

parseClassFunction · 0.85

Calls 15

hashMapInsertFunction · 0.85
strcmpFunction · 0.85
parseCodeFunction · 0.85
makeByteArrayFunction · 0.85
scanMethodSpecFunction · 0.85
hashMapFindNodeFunction · 0.85
listAppendFunction · 0.85
addInterfaceMethodsFunction · 0.85
assertTFunction · 0.85
hashMapFindFunction · 0.85
getClassAddendumFunction · 0.85
markFunction · 0.85

Tested by

no test coverage detected