add global kw

This commit is contained in:
blueloveTH 2022-11-11 00:47:01 +08:00
parent ff4776f756
commit ca4039a52f
5 changed files with 6 additions and 7 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -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;

View File

@ -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 {

View File

@ -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",

View File

@ -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 {