1.1 --- a/src/BytecodeCompiler.cpp Sat Aug 04 20:12:20 2012 -0700
1.2 +++ b/src/BytecodeCompiler.cpp Sat Aug 04 21:06:47 2012 -0700
1.3 @@ -351,6 +351,19 @@
1.4 if (node->postfix())
1.5 __ dup();
1.6 }
1.7 + } else if (expr->isFieldExpression()) {
1.8 + FieldExpression *field = expr->toFieldExpression();
1.9 +
1.10 + field->left()->accept(this);
1.11 + __ dup();
1.12 + __ getfield(field->fieldIndex(), field->type());
1.13 +
1.14 + if (node->postfix()) {
1.15 + // The stack looks like this now:
1.16 + // OBJECT VALUE
1.17 + __ swap(); // VALUE OBJECT
1.18 + __ pick2(); // VALUE OBJECT VALUE
1.19 + }
1.20 } else {
1.21 IndexExpression *index = expr->toIndexExpression();
1.22 __ note_position(index->pos());
1.23 @@ -397,7 +410,11 @@
1.24 __ setref(node->type());
1.25 else
1.26 __ set(var);
1.27 + } else if (expr->isFieldExpression()) {
1.28 + FieldExpression *field = expr->toFieldExpression();
1.29 + __ setfield(field->fieldIndex(), field->type());
1.30 } else {
1.31 + assert(expr->isIndexExpression());
1.32 __ setarray(node->type());
1.33 }
1.34