Chromium Code Reviews| Index: pkg/compiler/lib/src/kernel/accessors.dart |
| diff --git a/pkg/compiler/lib/src/kernel/accessors.dart b/pkg/compiler/lib/src/kernel/accessors.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ae8d4647f65d9cf294b2848539d0a613ff64d620 |
| --- /dev/null |
| +++ b/pkg/compiler/lib/src/kernel/accessors.dart |
| @@ -0,0 +1,136 @@ |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE.md file. |
| + |
| +import 'package:kernel/ast.dart' as ir; |
| +import 'package:kernel/frontend/accessors.dart' as ir_accessors; |
| + |
| +import 'kernel.dart' show Kernel; |
| +import 'unresolved.dart' show UnresolvedVisitor; |
| + |
| +export 'package:kernel/frontend/accessors.dart' show Accessor; |
| + |
| +class TopLevelStaticAccessor extends ir_accessors.StaticAccessor { |
| + final UnresolvedVisitor builder; |
| + |
| + /// Name of the property attempted to be accessed, used to generate an |
| + /// error if unresolved. |
| + final String name; |
| + |
| + Kernel get kernel => builder.kernel; |
| + |
| + TopLevelStaticAccessor( |
| + this.builder, |
| + this.name, |
| + ir.Member readTarget, |
| + ir.Member writeTarget) |
| + : super(readTarget, writeTarget); |
| + |
| + @override |
| + makeInvalidRead() { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedTopLevelGetterBuilder(), |
| + new ir.NullLiteral(), |
| + name, |
| + new ir.Arguments.empty()); |
| + } |
| + |
| + @override |
| + makeInvalidWrite(ir.Expression value) { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedTopLevelSetterBuilder(), |
| + new ir.NullLiteral(), |
| + name, |
| + new ir.Arguments(<ir.Expression>[value])); |
| + } |
| +} |
| + |
| +class ClassStaticAccessor extends ir_accessors.StaticAccessor { |
| + final RastaUnresolved builder; |
|
Siggi Cherem (dart-lang)
2016/08/22 22:30:15
rename to UnresolvedVisitor? (same below)?
|
| + |
| + /// Name of the property attempted to be accessed, used to generate an |
| + /// error if unresolved. |
| + final String name; |
| + |
| + Kernel get kernel => builder.kernel; |
| + |
| + ClassStaticAccessor(this.builder, this.name, |
| + ir.Member readTarget, ir.Member writeTarget) |
| + : super(readTarget, writeTarget); |
| + |
| + @override |
| + makeInvalidRead() { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedStaticGetterBuilder(), |
| + new ir.NullLiteral(), |
| + name, |
| + new ir.Arguments.empty()); |
| + } |
| + |
| + @override |
| + makeInvalidWrite(ir.Expression value) { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedStaticSetterBuilder(), |
| + new ir.NullLiteral(), |
| + name, |
| + new ir.Arguments(<ir.Expression>[value])); |
| + } |
| +} |
| + |
| +class SuperPropertyAccessor extends ir_accessors.SuperPropertyAccessor { |
| + final RastaUnresolved builder; |
| + |
| + /// Name of the property attempted to be accessed, used to generate an |
| + /// error if unresolved. |
| + final String name; |
| + |
| + SuperPropertyAccessor( |
| + this.builder, |
| + this.name, |
| + ir.Member readTarget, |
| + ir.Member writeTarget) |
| + : super(readTarget, writeTarget); |
| + |
| + @override |
| + makeInvalidRead() { |
| + // TODO(asgerf): Technically, we should invoke 'super.noSuchMethod' for |
| + // this and the other invalid super cases. |
| + return builder.buildThrowUnresolvedSuperGetter(name); |
| + } |
| + |
| + @override |
| + makeInvalidWrite(ir.Expression value) { |
| + return builder.buildThrowUnresolvedSuperSetter(name, value); |
| + } |
| +} |
| + |
| +class SuperIndexAccessor extends ir_accessors.SuperIndexAccessor { |
| + final RastaUnresolved builder; |
| + |
| + Kernel get kernel => builder.kernel; |
| + |
| + SuperIndexAccessor( |
| + this.builder, |
| + ir.Expression index, |
| + ir.Member readTarget, |
| + ir.Member writeTarget) |
| + : super(index, readTarget, writeTarget); |
| + |
| + @override |
| + makeInvalidRead() { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedSuperMethodBuilder(), |
| + new ir.ThisExpression(), |
| + '[]', |
| + new ir.Arguments(<ir.Expression>[indexAccess()])); |
| + } |
| + |
| + @override |
| + makeInvalidWrite(ir.Expression value) { |
| + return builder.buildThrowNoSuchMethodError( |
| + kernel.getUnresolvedSuperMethodBuilder(), |
| + new ir.ThisExpression(), |
| + '[]=', |
| + new ir.Arguments(<ir.Expression>[indexAccess(), value])); |
| + } |
| +} |