Просмотр исходного кода

Merge branch 'main' of https://github.com/blueloveTH/pocketpy

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

+ 5 - 1
.github/workflows/main.yml

@@ -68,6 +68,10 @@ jobs:
       runs-on: macos-latest
       steps:
       - uses: actions/checkout@v3
+      - name: Compile and Test
+        run: |
+          bash build.sh
+          python3 scripts/run_tests.py
       - run: |
           python3 amalgamate.py
           cd plugins/macos/pocketpy
@@ -107,4 +111,4 @@ jobs:
           rm -rf tmp
       - uses: actions/upload-artifact@v3
         with:
-          path: plugins/flutter/example/build/app/outputs/flutter-apk/output
+          path: plugins/flutter/example/build/app/outputs/flutter-apk/output

+ 7 - 0
CMakeLists.txt

@@ -21,6 +21,13 @@ if(MSVC)
     add_compile_options("/utf-8")
 endif()
 
+if(NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Release)
+endif()
+
+set(CMAKE_CXX_FLAGS_DEBUG "-g")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2")
+
 include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
 
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC)

+ 1 - 0
include/pocketpy/cffi.h

@@ -2,6 +2,7 @@
 
 #include "common.h"
 #include "vm.h"
+#include "_generated.h"
 
 namespace pkpy {
 

+ 1 - 1
include/pocketpy/common.h

@@ -20,7 +20,7 @@
 #include <variant>
 #include <type_traits>
 
-#define PK_VERSION				"1.1.0"
+#define PK_VERSION				"1.1.1"
 
 #include "config.h"
 #include "export.h"

+ 0 - 1
include/pocketpy/pocketpy.h

@@ -9,7 +9,6 @@
 #include "linalg.h"
 #include "easing.h"
 #include "io.h"
-#include "_generated.h"
 #include "vm.h"
 #include "re.h"
 #include "random.h"

+ 2 - 3
include/pocketpy/str.h

@@ -115,11 +115,10 @@ struct StrName {
         return this->index > other.index;
     }
 
-    inline static std::map<Str, uint16_t, std::less<>> _interned;
-    inline static std::vector<Str> _r_interned;
-
     static bool is_valid(int index);
     static StrName get(std::string_view s);
+    static std::map<std::string, uint16_t, std::less<>>& _interned();
+    static std::vector<std::string>& _r_interned();
 };
 
 struct FastStrStream{

+ 0 - 1
src/random.cpp

@@ -3,7 +3,6 @@
 #if PK_MODULE_RANDOM
 
 #include <random>
-#include "pocketpy/_generated.h"
 
 namespace pkpy{
 

+ 23 - 9
src/str.cpp

@@ -312,22 +312,33 @@ int utf8len(unsigned char c, bool suppress){
         return os << sn.sv();
     }
 
+    std::map<std::string, uint16_t, std::less<>>& StrName::_interned(){
+        static std::map<std::string, uint16_t, std::less<>> interned;
+        return interned;
+    }
+
+    std::vector<std::string>& StrName::_r_interned(){
+        static std::vector<std::string> r_interned;
+        return r_interned;
+    }
+
     StrName StrName::get(std::string_view s){
-        auto it = _interned.find(s);
-        if(it != _interned.end()) return StrName(it->second);
-        uint16_t index = (uint16_t)(_r_interned.size() + 1);
-        _interned[s] = index;
-        _r_interned.push_back(s);
+        auto it = _interned().find(s);
+        if(it != _interned().end()) return StrName(it->second);
+        uint16_t index = (uint16_t)(_r_interned().size() + 1);
+        std::string str(s);
+        _interned()[str] = index;
+        _r_interned().push_back(str);
         return StrName(index);
     }
 
     Str StrName::escape() const {
-        return _r_interned[index-1].escape();
+        return Str(sv()).escape();
     }
 
     bool StrName::is_valid(int index) {
-        // check _r_interned[index-1] is valid
-        return index > 0 && index <= _r_interned.size();
+        // check _r_interned()[index-1] is valid
+        return index > 0 && index <= _r_interned().size();
     }
 
     StrName::StrName(): index(0) {}
@@ -337,7 +348,10 @@ int utf8len(unsigned char c, bool suppress){
         index = get(s.sv()).index;
     }
 
-    std::string_view StrName::sv() const { return _r_interned[index-1].sv(); }
+    std::string_view StrName::sv() const {
+        const std::string& str = _r_interned()[index-1];
+        return std::string_view(str);
+    }
 
     FastStrStream& FastStrStream::operator<<(const Str& s){
         parts.push_back(&s);