From 75a7a806302ba9dae0157918f73676c7d6a2efe4 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Tue, 18 Apr 2023 00:20:29 +0800 Subject: [PATCH] ... --- .github/workflows/main.yml | 236 ++++++++++++++++++------------------- src/ceval.h | 1 + src/common.h | 2 +- src/compiler.h | 2 +- tests/45_yield.py | 19 ++- 5 files changed, 139 insertions(+), 121 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b80c291b..3f310555 100644 --- a/.github/workflows/main.yml +++ b/.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 \ No newline at end of file +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 \ No newline at end of file diff --git a/src/ceval.h b/src/ceval.h index 64b75b87..01f42a1b 100644 --- a/src/ceval.h +++ b/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{ diff --git a/src/common.h b/src/common.h index 2d628c05..fa8ced9c 100644 --- a/src/common.h +++ b/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 diff --git a/src/compiler.h b/src/compiler.h index af25de50..feac5136 100644 --- a/src/compiler.h +++ b/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); diff --git a/tests/45_yield.py b/tests/45_yield.py index 645994a8..d6559d2f 100644 --- a/tests/45_yield.py +++ b/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] \ No newline at end of file +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)