blueloveTH 3 lat temu
rodzic
commit
ca4039a52f
5 zmienionych plików z 6 dodań i 7 usunięć
  1. 0 1
      .gitignore
  2. 1 1
      src/codeobject.h
  3. 4 0
      src/compiler.h
  4. 1 1
      src/parser.h
  5. 0 4
      src/pointer.h

+ 0 - 1
.gitignore

@@ -153,7 +153,6 @@ cython_debug/
 #  option (not recommended) you can uncomment the following to ignore the entire idea folder.
 #.idea/
 src/main
-src/test
 gmon.out
 gprof.txt
 /pocketpy

+ 1 - 1
src/codeobject.h

@@ -42,7 +42,7 @@ struct CodeObject {
     int addName(const _Str& name, NameScope scope){
         auto p = std::make_shared<NamePointer>(name, scope);
         for(int i=0; i<co_names.size(); i++){
-            if(*co_names[i] == *p) return i;
+            if(co_names[i]->name == p->name) return i;
         }
         co_names.push_back(p);
         return co_names.size() - 1;

+ 4 - 0
src/compiler.h

@@ -733,6 +733,10 @@ __LISTCOMP:
             EXPR();
             emitCode(OP_DELETE_PTR);
             consumeEndStatement();
+        } else if(match(TK("global"))){
+            consume(TK("@id"));
+            int index = getCode()->addName(parser->previous.str(), NAME_GLOBAL);
+            consumeEndStatement();
         } else if(match(TK("pass"))){
             consumeEndStatement();
         } else {

+ 1 - 1
src/parser.h

@@ -12,7 +12,7 @@ constexpr const char* __TOKENS[] = {
     "+=", "-=", "*=", "/=", "//=",
     /** KW_BEGIN **/
     "class", "import", "as", "def", "lambda", "pass", "del",
-    "None", "in", "is", "and", "or", "not", "True", "False",
+    "None", "in", "is", "and", "or", "not", "True", "False", "global",
     "while", "for", "if", "elif", "else", "break", "continue", "return", "assert", "raise",
     /** KW_END **/
     "is not", "not in",

+ 0 - 4
src/pointer.h

@@ -24,10 +24,6 @@ struct NamePointer : BasePointer {
     PyVar get(VM* vm, Frame* frame) const;
     void set(VM* vm, Frame* frame, PyVar val) const;
     void del(VM* vm, Frame* frame) const;
-
-    bool operator==(const NamePointer& other) const {
-        return name == other.name && scope == other.scope;
-    }
 };
 
 struct AttrPointer : BasePointer {