diff -r c0740249963c -r b01ee7446984 src/BytecodeCompiler.cpp --- a/src/BytecodeCompiler.cpp Sat Aug 04 20:12:20 2012 -0700 +++ b/src/BytecodeCompiler.cpp Sat Aug 04 21:06:47 2012 -0700 @@ -351,6 +351,19 @@ if (node->postfix()) __ dup(); } + } else if (expr->isFieldExpression()) { + FieldExpression *field = expr->toFieldExpression(); + + field->left()->accept(this); + __ dup(); + __ getfield(field->fieldIndex(), field->type()); + + if (node->postfix()) { + // The stack looks like this now: + // OBJECT VALUE + __ swap(); // VALUE OBJECT + __ pick2(); // VALUE OBJECT VALUE + } } else { IndexExpression *index = expr->toIndexExpression(); __ note_position(index->pos()); @@ -397,7 +410,11 @@ __ setref(node->type()); else __ set(var); + } else if (expr->isFieldExpression()) { + FieldExpression *field = expr->toFieldExpression(); + __ setfield(field->fieldIndex(), field->type()); } else { + assert(expr->isIndexExpression()); __ setarray(node->type()); }