blueloveTH 2 лет назад
Родитель
Сommit
75a7a80630
5 измененных файлов с 139 добавлено и 121 удалено
  1. 118 118
      .github/workflows/main.yml
  2. 1 0
      src/ceval.h
  3. 1 1
      src/common.h
  4. 1 1
      src/compiler.h
  5. 18 1
      tests/45_yield.py

+ 118 - 118
.github/workflows/main.yml

@@ -1,118 +1,118 @@
-# name: build
-# on: [push, pull_request]
-# jobs:
-#   build_win:
-#     runs-on: windows-latest
-#     steps:
-#     - uses: actions/checkout@v3
-#     - uses: ilammy/msvc-dev-cmd@v1
-#     - name: Compile
-#       shell: bash
-#       run: |
-#         python3 build.py windows
-#         python3 build.py windows -lib
-#         mkdir -p output/windows/x86_64
-#         cp pocketpy.exe output/windows/x86_64
-#         cp pocketpy.dll output/windows/x86_64
-#     - uses: actions/upload-artifact@v3
-#       with:
-#         path: output
-#     - name: Unit Test
-#       run: python3 scripts/run_tests.py
-#     - name: Benchmark
-#       run: python3 scripts/run_tests.py benchmark
-#   build_linux:
-#     runs-on: ubuntu-latest
-#     steps:
-#     - uses: actions/checkout@v3
-#     - name: Setup Clang
-#       uses: egor-tensin/setup-clang@v1
-#       with:
-#         version: 15
-#         platform: x64
-#     - name: Install libc++
-#       run: sudo apt install -y libc++-15-dev libc++1-15 libc++abi-15-dev libc++abi1-15
-#     - name: Compile
-#       run: |
-#         python3 build.py linux
-#         python3 build.py linux -lib
-#         mkdir -p output/linux/x86_64
-#         cp pocketpy output/linux/x86_64
-#         cp pocketpy.so output/linux/x86_64
-#     - uses: actions/upload-artifact@v3
-#       with:
-#         path: output
-#     - name: Unit Test
-#       run: python3 scripts/run_tests.py
-#     - name: Benchmark
-#       run: python3 scripts/run_tests.py benchmark
-#   build_macos:
-#       runs-on: macos-latest
-#       steps:
-#       - uses: actions/checkout@v3
-#       - run: |
-#           python3 amalgamate.py
-#           cd plugins/macos/pocketpy
-#           mkdir -p output/macos
-#           xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
-#           cp -r build/Release/pocketpy.bundle output/macos
-#       - uses: actions/upload-artifact@v3
-#         with:
-#           path: plugins/macos/pocketpy/output
-#   build_android:
-#       runs-on: ubuntu-latest
-#       steps:
-#       - uses: actions/checkout@v3
-#       - uses: subosito/flutter-action@v2
-#         with:
-#           flutter-version: '3.3.0'
-#           channel: 'stable'
-#           cache: true
-#       - run: flutter --version
-#       - name: Compile
-#         run: |
-#           python3 amalgamate.py
-#           cd plugins/flutter/example
-#           flutter build apk --split-debug-info=.debug-info --split-per-abi
-#           cd build/app/outputs/flutter-apk
-#           mkdir -p output/android/arm64-v8a
-#           mkdir -p output/android/armeabi-v7a
-#           mkdir -p output/android/x86_64
-#           unzip -q app-arm64-v8a-release.apk -d tmp
-#           mv tmp/lib/arm64-v8a/libpocketpy.so output/android/arm64-v8a/libpocketpy.so
-#           rm -rf tmp
-#           unzip -q app-armeabi-v7a-release.apk -d tmp
-#           mv tmp/lib/armeabi-v7a/libpocketpy.so output/android/armeabi-v7a/libpocketpy.so
-#           rm -rf tmp
-#           unzip -q app-x86_64-release.apk -d tmp
-#           mv tmp/lib/x86_64/libpocketpy.so output/android/x86_64/libpocketpy.so
-#           rm -rf tmp
-#       - uses: actions/upload-artifact@v3
-#         with:
-#           path: plugins/flutter/example/build/app/outputs/flutter-apk/output
-#   build_web:
-#     runs-on: ubuntu-latest
-#     steps:
-#     - uses: actions/checkout@v3
-#     - name: Setup emsdk
-#       uses: mymindstorm/setup-emsdk@v12
-#       with:
-#         version: 3.1.25
-#         actions-cache-folder: 'emsdk-cache'
-#     - name: Verify emsdk
-#       run: emcc -v
-#     - name: Compile
-#       run: |
-#         mkdir -p output/web/lib
-#         python3 build.py web
-#         cp web/lib/* output/web/lib
-#     - uses: crazy-max/ghaction-github-pages@v3
-#       with:
-#         target_branch: gh-pages
-#         build_dir: web
-#       env:
-#         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-#       if: github.event_name == 'push' && github.ref == 'refs/heads/main'
-#     - uses: actions/upload-artifact@v3
-#       with:
-#         path: output
+name: build
+on: [push, pull_request]
+jobs:
+  build_win:
+    runs-on: windows-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: ilammy/msvc-dev-cmd@v1
+    - name: Compile
+      shell: bash
+      run: |
+        python3 build.py windows
+        python3 build.py windows -lib
+        mkdir -p output/windows/x86_64
+        cp pocketpy.exe output/windows/x86_64
+        cp pocketpy.dll output/windows/x86_64
+    - uses: actions/upload-artifact@v3
+      with:
+        path: output
+    - name: Unit Test
+      run: python3 scripts/run_tests.py
+    - name: Benchmark
+      run: python3 scripts/run_tests.py benchmark
+  build_linux:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - name: Setup Clang
+      uses: egor-tensin/setup-clang@v1
+      with:
+        version: 15
+        platform: x64
+    - name: Install libc++
+      run: sudo apt install -y libc++-15-dev libc++1-15 libc++abi-15-dev libc++abi1-15
+    - name: Compile
+      run: |
+        python3 build.py linux
+        python3 build.py linux -lib
+        mkdir -p output/linux/x86_64
+        cp pocketpy output/linux/x86_64
+        cp pocketpy.so output/linux/x86_64
+    - uses: actions/upload-artifact@v3
+      with:
+        path: output
+    - name: Unit Test
+      run: python3 scripts/run_tests.py
+    - name: Benchmark
+      run: python3 scripts/run_tests.py benchmark
+  build_macos:
+      runs-on: macos-latest
+      steps:
+      - uses: actions/checkout@v3
+      - run: |
+          python3 amalgamate.py
+          cd plugins/macos/pocketpy
+          mkdir -p output/macos
+          xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
+          cp -r build/Release/pocketpy.bundle output/macos
+      - uses: actions/upload-artifact@v3
+        with:
+          path: plugins/macos/pocketpy/output
+  build_android:
+      runs-on: ubuntu-latest
+      steps:
+      - uses: actions/checkout@v3
+      - uses: subosito/flutter-action@v2
+        with:
+          flutter-version: '3.3.0'
+          channel: 'stable'
+          cache: true
+      - run: flutter --version
+      - name: Compile
+        run: |
+          python3 amalgamate.py
+          cd plugins/flutter/example
+          flutter build apk --split-debug-info=.debug-info --split-per-abi
+          cd build/app/outputs/flutter-apk
+          mkdir -p output/android/arm64-v8a
+          mkdir -p output/android/armeabi-v7a
+          mkdir -p output/android/x86_64
+          unzip -q app-arm64-v8a-release.apk -d tmp
+          mv tmp/lib/arm64-v8a/libpocketpy.so output/android/arm64-v8a/libpocketpy.so
+          rm -rf tmp
+          unzip -q app-armeabi-v7a-release.apk -d tmp
+          mv tmp/lib/armeabi-v7a/libpocketpy.so output/android/armeabi-v7a/libpocketpy.so
+          rm -rf tmp
+          unzip -q app-x86_64-release.apk -d tmp
+          mv tmp/lib/x86_64/libpocketpy.so output/android/x86_64/libpocketpy.so
+          rm -rf tmp
+      - uses: actions/upload-artifact@v3
+        with:
+          path: plugins/flutter/example/build/app/outputs/flutter-apk/output
+  build_web:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - name: Setup emsdk
+      uses: mymindstorm/setup-emsdk@v12
+      with:
+        version: 3.1.25
+        actions-cache-folder: 'emsdk-cache'
+    - name: Verify emsdk
+      run: emcc -v
+    - name: Compile
+      run: |
+        mkdir -p output/web/lib
+        python3 build.py web
+        cp web/lib/* output/web/lib
+    - uses: crazy-max/ghaction-github-pages@v3
+      with:
+        target_branch: gh-pages
+        build_dir: web
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+    - uses: actions/upload-artifact@v3
+      with:
+        path: output

+ 1 - 0
src/ceval.h

@@ -331,6 +331,7 @@ __NEXT_STEP:;
     TARGET(CONTAINS_OP)
         // a in b -> b __contains__ a
         _0 = call_method(TOP(), __contains__, SECOND());
+        POP();
         if(byte.arg == 1){
             TOP() = VAR(!CAST(bool, _0));
         }else{

+ 1 - 1
src/common.h

@@ -33,7 +33,7 @@
 
 // debug macros
 #define DEBUG_NO_BUILTIN_MODULES	0
-#define DEBUG_EXTRA_CHECK			1
+#define DEBUG_EXTRA_CHECK			0
 #define DEBUG_DIS_EXEC				0
 #define DEBUG_CEVAL_STEP			0
 #define DEBUG_CEVAL_STEP_MIN		0

+ 1 - 1
src/compiler.h

@@ -620,7 +620,7 @@ __SUBSCR_END:
     void compile_for_loop() {
         Expr_ vars = EXPR_VARS();
         consume(TK("in"));
-        EXPR(false);
+        EXPR_TUPLE(false);
         ctx()->emit(OP_GET_ITER, BC_NOARG, BC_KEEPLINE);
         ctx()->enter_block(FOR_LOOP);
         ctx()->emit(OP_FOR_ITER, BC_NOARG, BC_KEEPLINE);

+ 18 - 1
tests/45_yield.py

@@ -10,4 +10,21 @@ assert x == 10
 
 a = [i for i in f(6)]
 
-assert a == [0,1,2,3,4,5]
+assert a == [0,1,2,3,4,5]
+
+def f(n):
+    for i in range(n):
+        for j in range(n):
+            yield i, j
+
+a = [i for i in f(3)]
+assert len(a) == 9
+assert a[0] == (0,0)
+assert a[1] == (0,1)
+assert a[2] == (0,2)
+assert a[3] == (1,0)
+assert a[4] == (1,1)
+assert a[5] == (1,2)
+assert a[6] == (2,0)
+assert a[7] == (2,1)
+assert a[8] == (2,2)