ethanblake4 / dart_eval

Extensible Dart interpreter for Dart with full interop
https://pub.dev/packages/dart_eval
BSD 3-Clause "New" or "Revised" License
334 stars 40 forks source link

dart_eval runtime exception: type 'Null' is not a subtype of type '$Instance' in type cast #175

Closed HXiaoMing closed 8 months ago

HXiaoMing commented 9 months ago

Test case:

import 'package:dart_eval/dart_eval.dart';
import 'package:test/test.dart';

void main() {
  group('set value tests', () {
    late Compiler compiler;

    setUp(() {
      compiler = Compiler();
    });

    test('Using set value', () {
      final program = compiler.compile({
        'example': {
          'main.dart': '''
            class TestClass {
              int tempValue = 0;
            }  

            bool main() {
              final testClass = TestClass();
              testClass.tempValue = testClass.hashCode;
              print('hashCode \${testClass.tempValue}');
              return true;
            }
          '''
        }
      });

      final runtime = Runtime.ofProgram(program);
      expect(runtime.executeLib('package:example/main.dart', 'main'), true);
    });
  });
}

Error: package:dart_eval/src/eval/runtime/runtime.dart 832:7 Runtime.execute package:dart_eval/src/eval/runtime/runtime.dart 810:12 Runtime.executeLib test/set_value_test.dart 31:22 main..

dart_eval runtime exception: type 'Null' is not a subtype of type '$Instance' in type cast

0 PushObjectProperty.run (package:dart_eval/src/eval/runtime/ops/objects.dart:276:31)

1 Runtime.execute (package:dart_eval/src/eval/runtime/runtime.dart:823:12)

2 Runtime.executeLib (package:dart_eval/src/eval/runtime/runtime.dart:810:12)

at main()

RUNTIME STATE

Program offset: 16 Stack sample: [L0: Instance of '$InstanceImpl', *L1: null, L2: null, L3: null, L4: null, L5: null, L6: null, L7: null, L8: null, L9: null] Args sample: [] Call stack: [0, -1] TRACE: 10: PushScope (F7:44, 'TestClass.tempValue (set)') 11: SetObjectPropertyImpl (L0[0] = L1) 12: Return (L1) 13: PushScope (F7:101, 'main()') 14: Call (@0) 15: PushReturnValue () 16: PushObjectProperty (L0.C0) <<< EXCEPTION 17: PushReturnValue () 18: SetObjectProperty (L0.tempValue = L1) 19: PushConstant (C1)

ethanblake4 commented 8 months ago

Fixed in v0.7.9