src/BytecodeCompiler.cpp
changeset 149 b01ee7446984
parent 148 c0740249963c
child 150 457110815c87
     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