Skip to content

Commit 5d5f140

Browse files
committed
VM: Bug fix
1 parent 42f8092 commit 5d5f140

6 files changed

Lines changed: 29 additions & 22 deletions

File tree

include/openminecraft/vm/pixeltower/om_pixeltower_class_structdef.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class OMClass
4545
std::string sourceFile;
4646
std::shared_ptr<OMClass> superClass;
4747
std::vector<std::shared_ptr<OMClass>> interfaces;
48-
std::list<OMFieldInfo> fields;
48+
std::list<std::shared_ptr<OMFieldInfo>> fields;
4949
std::list<std::shared_ptr<OMMethodInfo>> methods;
5050
std::unordered_map<uint16_t, std::shared_ptr<classfile::OMClassConstant>> *mapping;
5151
uint64_t objectLength = 0;

src/vm/pixeltower/om_pixeltower_class.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ void OMClass::calcFieldOffsets()
2828
{
2929
uint64_t *length = &objectLength;
3030

31-
if ((field.accessFlag & JVM_Acc_Static) != 0)
31+
if ((field->accessFlag & JVM_Acc_Static) != 0)
3232
{
3333
length = &staticFieldLength;
3434
}
3535

36-
field.offset = *length;
36+
field->offset = *length;
3737

38-
switch (field.type)
38+
switch (field->type)
3939
{
4040
case Bytes4:
4141
*length += 4 - (*length % 4);

src/vm/pixeltower/om_pixeltower_classloader.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ util::OMResult<std::any, err::OMValidationError> OMClassLoader::loadClass(std::s
5858
auto fn = file->mapping[field->nameIndex]->to<OMClassConstantUtf8>();
5959
auto fd = file->mapping[field->descIndex]->to<OMClassConstantUtf8>();
6060
auto m = fd->data;
61-
OMFieldInfo f;
62-
f.accessFlag = field->accessFlags;
63-
f.name = m;
64-
f.desc = fd->data;
61+
auto f = std::make_shared<OMFieldInfo>();
62+
f->accessFlag = field->accessFlags;
63+
f->name = fn->data;
64+
f->desc = fd->data;
6565
switch (m[0])
6666
{
6767
case 'Z':
@@ -70,22 +70,22 @@ util::OMResult<std::any, err::OMValidationError> OMClassLoader::loadClass(std::s
7070
case 'S':
7171
case 'F':
7272
case 'C':
73-
f.type = Bytes4;
73+
f->type = Bytes4;
7474
break;
7575
case 'J':
7676
case 'D':
77-
f.type = Bytes8;
77+
f->type = Bytes8;
7878
break;
7979
case '[':
8080
case 'L': {
81-
f.type = BytesP;
81+
f->type = BytesP;
8282
break;
8383
}
8484
default:
8585
return util::OMResult<std::any, err::OMValidationError>::err(
86-
{err::ClassLoader, fmt::format("unknown field descriptor {}", fn->data), clsdata->name});
86+
{err::ClassLoader, fmt::format("unknown field descriptor {}", m), clsdata->name});
8787
}
88-
clsdata->fields.emplace_back(f);
88+
clsdata->fields.push_back(f);
8989
}
9090

9191
for (auto attrs : file->attrs)
@@ -124,6 +124,7 @@ util::OMResult<std::any, err::OMValidationError> OMClassLoader::loadClass(std::s
124124
{
125125
if (me->name == "<clinit>")
126126
{
127+
logger.info("{} loaded with class init func", clsdata->name);
127128
return std::any_cast<std::shared_ptr<runtime::OMInterpreter>>(interpreter)->execute(clsdata, me);
128129
}
129130
}

src/vm/pixeltower/om_pixeltower_interpreter.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,16 +548,19 @@ OMResult<std::any, err::OMValidationError> OMInterpreter::operand_putstatic(std:
548548

549549
for (auto fi : res.unwrap()->fields)
550550
{
551-
if (fi.name == name && (fi.accessFlag & JVM_Acc_Static))
551+
if (fi->name == name && (fi->accessFlag & JVM_Acc_Static))
552552
{
553-
writeStackTop((void *)((uint8_t *)res.unwrap()->staticFieldBlock + fi.offset));
553+
writeStackTop((void *)((uint8_t *)res.unwrap()->staticFieldBlock + fi->offset));
554+
frame->offset += 3;
554555
return OMResult<std::any, err::OMValidationError>::ok(nullptr);
555556
}
556557
}
557-
558+
logger.debug("not found!");
558559
frame->offset += 3;
559560

560-
return OMResult<std::any, err::OMValidationError>::ok(nullptr);
561+
return OMResult<std::any, err::OMValidationError>::err(
562+
{err::Instructions, fmt::format("static field not found for {} with name {}", cls, name),
563+
fetchCurrentPosition(frame)});
561564
}
562565
void OMInterpreter::operand_istore_n(std::shared_ptr<OMFrameMetadata> frame)
563566
{

src/vm/pixeltower/om_pixeltower_memorymanager.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,9 @@ void OMMemoryManager::searchFromInstance(void *b)
138138
auto arrdata = ((uint8_t *)b + sizeof(void *));
139139
for (auto fi : clazz->fields)
140140
{
141-
if (fi.type == OMFieldType::BytesP && (fi.accessFlag & JVM_Acc_Static) == 0)
141+
if (fi->type == OMFieldType::BytesP && (fi->accessFlag & JVM_Acc_Static) == 0)
142142
{
143-
searchFromInstance(*(void **)(arrdata + fi.offset));
143+
searchFromInstance(*(void **)(arrdata + fi->offset));
144144
}
145145
}
146146
}
@@ -149,9 +149,9 @@ void OMMemoryManager::seatchFromStatic(std::shared_ptr<OMClass> cls)
149149
{
150150
for (auto fi : cls->fields)
151151
{
152-
if (fi.type == OMFieldType::BytesP && (fi.accessFlag & JVM_Acc_Static) == 0)
152+
if (fi->type == OMFieldType::BytesP && (fi->accessFlag & JVM_Acc_Static) == 0)
153153
{
154-
searchFromInstance(*(void **)((uint8_t *)cls->staticFieldBlock + fi.offset));
154+
searchFromInstance(*(void **)((uint8_t *)cls->staticFieldBlock + fi->offset));
155155
}
156156
}
157157
}

vmstd/src/java/io/PrintStream.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package java.io;
22

33
public class PrintStream {
4-
4+
public void println(char c) {}
5+
public void println(long c) {}
6+
public void println(float c) {}
7+
public void println(double c) {}
58
}

0 commit comments

Comments
 (0)