blueloveTH 2 лет назад
Родитель
Сommit
b530937393

+ 0 - 4
plugins/flutter/analysis_options.yaml

@@ -1,4 +0,0 @@
-include: package:flutter_lints/flutter.yaml
-
-# Additional information about this file can be found at
-# https://dart.dev/guides/language/analysis-options

+ 5 - 92
plugins/flutter/example/lib/main.dart

@@ -1,7 +1,5 @@
-import 'dart:io';
-
 import 'package:flutter/material.dart';
-import 'package:pocketpy/pocketpy.dart' as pkpy;
+import 'package:pocketpy/pocketpy.dart';
 
 void main() {
   runApp(const MaterialApp(home: MyApp()));
@@ -15,102 +13,17 @@ class MyApp extends StatefulWidget {
 }
 
 class _MyAppState extends State<MyApp> {
-  late final pkpy.VM vm;
-  late final pkpy.REPL repl;
-  bool needMoreLines = false;
-
-  final TextEditingController _controller = TextEditingController();
-  final StringBuffer buffer = StringBuffer();
-
   @override
   void initState() {
+    test();
     super.initState();
-
-    // create a pocketpy virtual machine
-    vm = pkpy.VM();
-
-    // create a REPL
-    repl = pkpy.REPL(vm);
-
-    // create a binding
-    vm.bind<int>("builtins", "add", (int x, int y) => x + y);
-    vm.bind<String>("builtins", "test", (String x) => x.split(',').join('|'));
-
-    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
-      refresh();
-    });
-  }
-
-  void addMessage(String text) {
-    setState(() {
-      buffer.write(text);
-    });
-  }
-
-  void submitCode() {
-    var text = _controller.text;
-    _controller.clear();
-    setState(() {
-      buffer.write(needMoreLines ? '... $text' : '>>> $text\n');
-    });
-    if (text == "exit()") exit(0);
-    needMoreLines = repl.input(text) == 0;
-    refresh();
-  }
-
-  void refresh() {
-    // ignore: no_leading_underscores_for_local_identifiers
-    var _o = vm.read_output();
-    if (_o.stdout.isNotEmpty) buffer.write(_o.stdout);
-    if (_o.stderr.isNotEmpty) buffer.write(_o.stderr);
-    setState(() {});
   }
 
   @override
   Widget build(BuildContext context) {
-    var style = const TextStyle(fontSize: 16);
-    return Scaffold(
-      appBar: AppBar(
-        title: const Text('Demo'),
-      ),
-      body: Padding(
-        padding: const EdgeInsets.all(8.0),
-        child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
-          Expanded(
-            child: SingleChildScrollView(
-              reverse: true,
-              child: Text(
-                buffer.toString(),
-                style: style,
-                textAlign: TextAlign.left,
-              ),
-            ),
-          ),
-          const SizedBox(
-            height: 16,
-          ),
-          SizedBox(
-            height: 50,
-            child: TextFormField(
-              controller: _controller,
-              style: style,
-              maxLines: 1,
-              decoration: const InputDecoration(
-                border: OutlineInputBorder(),
-                hintText: 'Enter Python code',
-              ),
-            ),
-          ),
-          Container(
-            height: 60,
-            alignment: Alignment.centerRight,
-            child: MaterialButton(
-                onPressed: submitCode,
-                color: Colors.blue,
-                textColor: Colors.white,
-                child: const Text('Run')),
-          ),
-        ]),
+    return const Scaffold(
+      body: Center(
+        child: Text("Hello World!"),
       ),
     );
   }

+ 15 - 112
plugins/flutter/example/pubspec.lock

@@ -1,107 +1,51 @@
 # Generated by pub
 # See https://dart.dev/tools/pub/glossary#lockfile
 packages:
-  async:
-    dependency: transitive
-    description:
-      name: async
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "2.9.0"
-  boolean_selector:
-    dependency: transitive
-    description:
-      name: boolean_selector
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "2.1.0"
   characters:
     dependency: transitive
     description:
       name: characters
-      url: "https://pub.dartlang.org"
+      sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
-  clock:
-    dependency: transitive
-    description:
-      name: clock
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.1.1"
   collection:
     dependency: transitive
     description:
       name: collection
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.16.0"
-  cupertino_icons:
-    dependency: "direct main"
-    description:
-      name: cupertino_icons
-      url: "https://pub.dartlang.org"
+      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      url: "https://pub.dev"
     source: hosted
-    version: "1.0.5"
-  fake_async:
-    dependency: transitive
-    description:
-      name: fake_async
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.3.1"
-  ffi:
-    dependency: transitive
-    description:
-      name: ffi
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "2.0.1"
+    version: "1.17.0"
   flutter:
     dependency: "direct main"
     description: flutter
     source: sdk
     version: "0.0.0"
-  flutter_test:
-    dependency: "direct dev"
-    description: flutter
-    source: sdk
-    version: "0.0.0"
   js:
     dependency: transitive
     description:
       name: js
-      url: "https://pub.dartlang.org"
+      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      url: "https://pub.dev"
     source: hosted
     version: "0.6.5"
-  matcher:
-    dependency: transitive
-    description:
-      name: matcher
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "0.12.12"
   material_color_utilities:
     dependency: transitive
     description:
       name: material_color_utilities
-      url: "https://pub.dartlang.org"
+      sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
+      url: "https://pub.dev"
     source: hosted
-    version: "0.1.5"
+    version: "0.2.0"
   meta:
     dependency: transitive
     description:
       name: meta
-      url: "https://pub.dartlang.org"
+      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.0"
-  path:
-    dependency: transitive
-    description:
-      name: path
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.8.2"
   pocketpy:
     dependency: "direct main"
     description:
@@ -114,55 +58,14 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.99"
-  source_span:
-    dependency: transitive
-    description:
-      name: source_span
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.9.0"
-  stack_trace:
-    dependency: transitive
-    description:
-      name: stack_trace
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.10.0"
-  stream_channel:
-    dependency: transitive
-    description:
-      name: stream_channel
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "2.1.0"
-  string_scanner:
-    dependency: transitive
-    description:
-      name: string_scanner
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.1.1"
-  term_glyph:
-    dependency: transitive
-    description:
-      name: term_glyph
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.2.1"
-  test_api:
-    dependency: transitive
-    description:
-      name: test_api
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "0.4.12"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
-      url: "https://pub.dartlang.org"
+      sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
 sdks:
   dart: ">=2.17.0 <3.0.0"
   flutter: ">=2.5.0"

+ 0 - 8
plugins/flutter/example/pubspec.yaml

@@ -40,14 +40,6 @@ dependencies:
     # the parent directory to use the current plugin's version.
     path: ../
 
-  # The following adds the Cupertino Icons font to your application.
-  # Use with the CupertinoIcons class for iOS style icons.
-  cupertino_icons: ^1.0.2
-
-dev_dependencies:
-  flutter_test:
-    sdk: flutter
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 

+ 0 - 76
plugins/flutter/lib/_ffi.dart

@@ -1,76 +0,0 @@
-// ignore_for_file: non_constant_identifier_names
-
-import 'dart:convert';
-import 'dart:ffi' as ffi;
-import 'package:ffi/ffi.dart';
-
-Map<String, Function> _mappings = {};
-
-class StrWrapper {
-  static final Finalizer<ffi.Pointer<Utf8>> finalizer =
-      Finalizer((p) => malloc.free(p));
-
-  late final ffi.Pointer<Utf8> _p;
-  StrWrapper(String s) {
-    _p = s.toNativeUtf8();
-    finalizer.attach(this, _p);
-  }
-
-  ffi.Pointer<Utf8> get p => _p;
-}
-
-dynamic invoke_f_any(ffi.Pointer<Utf8> p) {
-  String s = p.toDartString();
-  var parts = s.split(' ');
-  List<dynamic> args = [];
-  for (int i = 1; i < parts.length; i++) {
-    args.add(jsonDecode(parts[i]));
-  }
-  var f = _mappings[parts[0]];
-  return Function.apply(f!, args);
-}
-
-int invoke_f_int(ffi.Pointer<Utf8> p) => invoke_f_any(p);
-double invoke_f_float(ffi.Pointer<Utf8> p) => invoke_f_any(p);
-bool invoke_f_bool(ffi.Pointer<Utf8> p) => invoke_f_any(p);
-ffi.Pointer<Utf8> invoke_f_str(ffi.Pointer<Utf8> p) =>
-    StrWrapper(invoke_f_any(p)).p;
-void invoke_f_None(ffi.Pointer<Utf8> p) => invoke_f_any(p);
-
-ffi.Pointer f_int() {
-  return ffi.Pointer.fromFunction<ffi.Int64 Function(ffi.Pointer<Utf8>)>(
-      invoke_f_int, 0);
-}
-
-ffi.Pointer f_float() {
-  return ffi.Pointer.fromFunction<ffi.Double Function(ffi.Pointer<Utf8>)>(
-      invoke_f_float, 0.0);
-}
-
-ffi.Pointer f_bool() {
-  return ffi.Pointer.fromFunction<ffi.Bool Function(ffi.Pointer<Utf8>)>(
-      invoke_f_bool, false);
-}
-
-ffi.Pointer f_str() {
-  return ffi.Pointer.fromFunction<
-      ffi.Pointer<Utf8> Function(ffi.Pointer<Utf8>)>(invoke_f_str);
-}
-
-ffi.Pointer f_None() {
-  return ffi.Pointer.fromFunction<ffi.Void Function(ffi.Pointer<Utf8>)>(
-      invoke_f_None);
-}
-
-void register(String? key, Function value) {
-  _mappings[key!] = value;
-}
-
-int t_code<T>() {
-  if (T == int) return 'i'.codeUnitAt(0);
-  if (T == double) return 'f'.codeUnitAt(0);
-  if (T == bool) return 'b'.codeUnitAt(0);
-  if (T == String) return 's'.codeUnitAt(0);
-  return 'N'.codeUnitAt(0);
-  // throw Exception("Type must be int/double/bool/String");
-}

+ 0 - 9
plugins/flutter/lib/common.dart

@@ -1,9 +0,0 @@
-class PyOutput {
-  final String stdout;
-  final String stderr;
-  PyOutput(this.stdout, this.stderr);
-
-  PyOutput.fromJson(Map<String, dynamic> json)
-      : stdout = json['stdout'],
-        stderr = json['stderr'];
-}

+ 0 - 152
plugins/flutter/lib/no_web.dart

@@ -1,152 +0,0 @@
-// ignore_for_file: non_constant_identifier_names, prefer_typing_uninitialized_variables, constant_identifier_names, no_leading_underscores_for_local_identifiers
-
-import 'dart:convert' as cvt;
-import 'dart:ffi' as ffi;
-import 'dart:io';
-import 'package:ffi/ffi.dart';
-import '_ffi.dart';
-import 'common.dart';
-
-class _Bindings {
-  static ffi.DynamicLibrary _load() {
-    String _libName = "pocketpy";
-    if (Platform.isIOS) {
-      return ffi.DynamicLibrary.process();
-    }
-    if (Platform.isAndroid || Platform.isLinux) {
-      return ffi.DynamicLibrary.open('lib$_libName.so');
-    }
-    if (Platform.isWindows) {
-      return ffi.DynamicLibrary.open('$_libName.dll');
-    }
-    throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
-  }
-
-  static final _lib = _load();
-
-  static final pkpy_delete = _lib.lookupFunction<
-      ffi.Void Function(ffi.Pointer p),
-      void Function(ffi.Pointer p)>("pkpy_delete");
-  static final pkpy_setup_callbacks = _lib.lookupFunction<
-      ffi.Void Function(ffi.Pointer _f_int, ffi.Pointer _f_float,
-          ffi.Pointer _f_bool, ffi.Pointer _f_str, ffi.Pointer _f_None),
-      void Function(
-          ffi.Pointer _f_int,
-          ffi.Pointer _f_float,
-          ffi.Pointer _f_bool,
-          ffi.Pointer _f_str,
-          ffi.Pointer _f_None)>("pkpy_setup_callbacks");
-  static final pkpy_new_repl = _lib.lookupFunction<
-      ffi.Pointer Function(ffi.Pointer vm),
-      ffi.Pointer Function(ffi.Pointer vm)>("pkpy_new_repl");
-  static final pkpy_repl_input = _lib.lookupFunction<
-      ffi.Bool Function(ffi.Pointer r, ffi.Pointer<Utf8> line),
-      bool Function(ffi.Pointer r, ffi.Pointer<Utf8> line)>("pkpy_repl_input");
-  static final pkpy_new_vm = _lib.lookupFunction<
-      ffi.Pointer Function(ffi.Bool use_stdio),
-      ffi.Pointer Function(bool use_stdio)>("pkpy_new_vm");
-  static final pkpy_vm_add_module = _lib.lookupFunction<
-      ffi.Void Function(
-          ffi.Pointer vm, ffi.Pointer<Utf8> name, ffi.Pointer<Utf8> source),
-      void Function(ffi.Pointer vm, ffi.Pointer<Utf8> name,
-          ffi.Pointer<Utf8> source)>("pkpy_vm_add_module");
-  static final pkpy_vm_bind = _lib.lookupFunction<
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm, ffi.Pointer<Utf8> mod,
-          ffi.Pointer<Utf8> name, ffi.Int32 ret_code),
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm, ffi.Pointer<Utf8> mod,
-          ffi.Pointer<Utf8> name, int ret_code)>("pkpy_vm_bind");
-  static final pkpy_vm_eval = _lib.lookupFunction<
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm, ffi.Pointer<Utf8> source),
-      ffi.Pointer<Utf8> Function(
-          ffi.Pointer vm, ffi.Pointer<Utf8> source)>("pkpy_vm_eval");
-  static final pkpy_vm_exec = _lib.lookupFunction<
-      ffi.Void Function(ffi.Pointer vm, ffi.Pointer<Utf8> source),
-      void Function(ffi.Pointer vm, ffi.Pointer<Utf8> source)>("pkpy_vm_exec");
-  static final pkpy_vm_get_global = _lib.lookupFunction<
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm, ffi.Pointer<Utf8> name),
-      ffi.Pointer<Utf8> Function(
-          ffi.Pointer vm, ffi.Pointer<Utf8> name)>("pkpy_vm_get_global");
-  static final pkpy_vm_read_output = _lib.lookupFunction<
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm),
-      ffi.Pointer<Utf8> Function(ffi.Pointer vm)>("pkpy_vm_read_output");
-}
-
-class VM {
-  late final pointer = _Bindings.pkpy_new_vm(false);
-  static bool _firstNew = true;
-
-  VM() {
-    if (!_firstNew) return;
-    _firstNew = false;
-    _Bindings.pkpy_setup_callbacks(
-        f_int(), f_float(), f_bool(), f_str(), f_None());
-  }
-
-  void dispose() {
-    _Bindings.pkpy_delete(pointer);
-  }
-
-  PyOutput read_output() {
-    var _o = _Bindings.pkpy_vm_read_output(pointer);
-    String _j = _o.toDartString();
-    var ret = PyOutput.fromJson(cvt.jsonDecode(_j));
-    _Bindings.pkpy_delete(_o);
-    return ret;
-  }
-
-  /// Add a source module into a virtual machine.
-  void add_module(String name, String source) {
-    _Bindings.pkpy_vm_add_module(
-        pointer, StrWrapper(name).p, StrWrapper(source).p);
-  }
-
-  /// Evaluate an expression.  Return `__repr__` of the result. If there is any error, return `nullptr`.
-  String? eval(String source) {
-    var ret = _Bindings.pkpy_vm_eval(pointer, StrWrapper(source).p);
-    if (ret == ffi.nullptr) return null;
-    String s = ret.toDartString();
-    _Bindings.pkpy_delete(ret);
-    return s;
-  }
-
-  /// Run a given source on a virtual machine.
-  void exec(String source) {
-    _Bindings.pkpy_vm_exec(pointer, StrWrapper(source).p);
-  }
-
-  /// Get a global variable of a virtual machine.  Return `__repr__` of the result. If the variable is not found, return `nullptr`.
-  String? get_global(String name) {
-    var ret = _Bindings.pkpy_vm_get_global(pointer, StrWrapper(name).p);
-    if (ret == ffi.nullptr) return null;
-    String s = ret.toDartString();
-    _Bindings.pkpy_delete(ret);
-    return s;
-  }
-
-  void bind<T>(String mod, String name, Function f) {
-    ffi.Pointer<Utf8> p = _Bindings.pkpy_vm_bind(
-        pointer, StrWrapper(mod).p, StrWrapper(name).p, t_code<T>());
-    if (p == ffi.nullptr) throw Exception("vm.bind() failed");
-    String s = p.toDartString();
-    _Bindings.pkpy_delete(p);
-    register(s, f);
-  }
-}
-
-class REPL {
-  late final dynamic pointer;
-
-  REPL(VM vm) {
-    pointer = _Bindings.pkpy_new_repl(vm.pointer);
-  }
-
-  void dispose() {
-    _Bindings.pkpy_delete(pointer);
-  }
-
-  /// Input a source line to an interactive console. Return true if need more lines.
-  bool input(String line) {
-    var ret = _Bindings.pkpy_repl_input(pointer, StrWrapper(line).p);
-    return ret;
-  }
-}

+ 3 - 2
plugins/flutter/lib/pocketpy.dart

@@ -1,4 +1,5 @@
 library pocketpy;
 
-export 'common.dart';
-export 'no_web.dart' if (dart.library.html) 'web.dart';
+void test(){
+  print("Hello World!");
+}

+ 0 - 92
plugins/flutter/lib/web.dart

@@ -1,92 +0,0 @@
-// ignore_for_file: prefer_function_declarations_over_variables, non_constant_identifier_names, no_leading_underscores_for_local_identifiers
-import 'dart:convert' as cvt;
-import 'package:js/js.dart';
-import 'common.dart';
-
-@JS("Module.ccall")
-external dynamic ccall(
-    String name, String? returnType, List<String> argTypes, List<dynamic> args);
-
-class _Bindings {
-  static final pkpy_delete =
-      (dynamic p) => ccall("pkpy_delete", null, ["number"], [p]);
-  static final pkpy_new_repl =
-      (dynamic vm) => ccall("pkpy_new_repl", "number", ["number"], [vm]);
-  static final pkpy_repl_input = (dynamic r, String line) =>
-      ccall("pkpy_repl_input", "boolean", ["number", "string"], [r, line]);
-  static final pkpy_new_vm = (bool use_stdio) =>
-      ccall("pkpy_new_vm", "number", ["boolean"], [use_stdio]);
-  static final pkpy_vm_add_module = (dynamic vm, String name, String source) =>
-      ccall("pkpy_vm_add_module", null, ["number", "string", "string"],
-          [vm, name, source]);
-  static final pkpy_vm_eval = (dynamic vm, String source) =>
-      ccall("pkpy_vm_eval", "string", ["number", "string"], [vm, source]);
-  static final pkpy_vm_exec = (dynamic vm, String source) =>
-      ccall("pkpy_vm_exec", null, ["number", "string"], [vm, source]);
-  static final pkpy_vm_get_global = (dynamic vm, String name) =>
-      ccall("pkpy_vm_get_global", "string", ["number", "string"], [vm, name]);
-  static final pkpy_vm_read_output =
-      (dynamic vm) => ccall("pkpy_vm_read_output", "string", ["number"], [vm]);
-}
-
-class VM {
-  late final pointer = _Bindings.pkpy_new_vm(false);
-  static bool _firstNew = true;
-
-  VM() {
-    if (!_firstNew) return;
-    _firstNew = false;
-  }
-
-  void dispose() {
-    _Bindings.pkpy_delete(pointer);
-  }
-
-  PyOutput read_output() {
-    var _o = _Bindings.pkpy_vm_read_output(pointer);
-    String _j = _o;
-    var ret = PyOutput.fromJson(cvt.jsonDecode(_j));
-
-    return ret;
-  }
-
-  /// Add a source module into a virtual machine.
-  void add_module(String name, String source) {
-    _Bindings.pkpy_vm_add_module(pointer, name, source);
-  }
-
-  /// Evaluate an expression.  Return `__repr__` of the result. If there is any error, return `nullptr`.
-  String? eval(String source) {
-    var ret = _Bindings.pkpy_vm_eval(pointer, source);
-    return ret;
-  }
-
-  /// Run a given source on a virtual machine.
-  void exec(String source) {
-    _Bindings.pkpy_vm_exec(pointer, source);
-  }
-
-  /// Get a global variable of a virtual machine.  Return `__repr__` of the result. If the variable is not found, return `nullptr`.
-  String? get_global(String name) {
-    var ret = _Bindings.pkpy_vm_get_global(pointer, name);
-    return ret;
-  }
-}
-
-class REPL {
-  late final dynamic pointer;
-
-  REPL(VM vm) {
-    pointer = _Bindings.pkpy_new_repl(vm.pointer);
-  }
-
-  void dispose() {
-    _Bindings.pkpy_delete(pointer);
-  }
-
-  /// Input a source line to an interactive console. Return true if need more lines.
-  bool input(String line) {
-    var ret = _Bindings.pkpy_repl_input(pointer, line);
-    return ret;
-  }
-}

+ 0 - 7
plugins/flutter/pubspec.yaml

@@ -11,13 +11,6 @@ environment:
 dependencies:
   flutter:
     sdk: flutter
-  ffi: ^2.0.1
-  js: ^0.6.4
-
-dev_dependencies:
-  flutter_test:
-    sdk: flutter
-  flutter_lints: ^2.0.0
 
 flutter:
   plugin: