1.1 --- a/src/BytecodeCompiler.cpp Sat Aug 04 19:33:06 2012 -0700
1.2 +++ b/src/BytecodeCompiler.cpp Sat Aug 04 20:12:20 2012 -0700
1.3 @@ -228,6 +228,17 @@
1.4 __ get(var);
1.5 }
1.6 }
1.7 + } else if (node->lvalue()->isFieldExpression()) {
1.8 + FieldExpression *expr = node->lvalue()->toFieldExpression();
1.9 + __ note_position(expr->pos());
1.10 +
1.11 + expr->left()->accept(this);
1.12 +
1.13 + if (node->token() != TOK_ASSIGN) {
1.14 + __ dup();
1.15 + __ getfield(expr->fieldIndex(), expr->type());
1.16 + }
1.17 +
1.18 } else {
1.19 IndexExpression *index = node->lvalue()->toIndexExpression();
1.20 __ note_position(index->pos());
1.21 @@ -276,6 +287,9 @@
1.22 __ setref(var->type()->contained());
1.23 else
1.24 __ set(var);
1.25 + } else if (node->lvalue()->isFieldExpression()) {
1.26 + FieldExpression *expr = node->lvalue()->toFieldExpression();
1.27 + __ setfield(expr->fieldIndex(), expr->type());
1.28 } else {
1.29 IndexExpression *index = node->lvalue()->toIndexExpression();
1.30 // :TODO: get rid of the BOUNDS instruction, embed it in g/setarray*?
1.31 @@ -506,6 +520,13 @@
1.32 }
1.33
1.34 void
1.35 +BytecodeCompiler::visit(FieldExpression *node)
1.36 +{
1.37 + node->left()->accept(this);
1.38 + __ getfield(node->fieldIndex(), node->type());
1.39 +}
1.40 +
1.41 +void
1.42 BytecodeCompiler::visit(ReturnStatement *node)
1.43 {
1.44 if (node->expression()) {