visitStructObjExpr method
Implementation
@override
Uint8List visitStructObjExpr(StructObjExpr obj) {
final bytesBuilder = BytesBuilder();
// Compile field values first — they push onto operand stack
for (final field in obj.fields) {
bytesBuilder.add(compileAST(field.fieldValue));
}
// Terminal opcode
bytesBuilder.addByte(OpCode.makeStruct);
bytesBuilder.addByte(obj.fields.length);
for (final field in obj.fields) {
bytesBuilder.addByte(field.isSpread ? 1 : 0);
if (!field.isSpread) {
bytesBuilder.add(_identifier(field.key!.id));
}
}
if (obj.id != null) {
bytesBuilder.addByte(1); // bool: has id
bytesBuilder.add(_identifier(obj.id!.id));
} else {
bytesBuilder.addByte(0); // bool: has id
}
if (obj.prototypeId != null) {
bytesBuilder.addByte(1); // bool: has prototype
bytesBuilder.add(_identifier(obj.prototypeId!.id));
} else {
bytesBuilder.addByte(0); // bool: has prototype
}
return bytesBuilder.toBytes();
}