📄 var.c
字号:
#include "rc.h"#include "exec.h"#include "fns.h"inthash(char *s, int n){ int h = 0, i = 1; while(*s) h+=*s++*i++; h%=n; return h<0?h+n:h;}#define NKW 30struct kw{ char *name; int type; struct kw *next;}*kw[NKW];voidkenter(int type, char *name){ int h = hash(name, NKW); struct kw *p = new(struct kw); p->type = type; p->name = name; p->next = kw[h]; kw[h] = p;}voidkinit(void){ kenter(FOR, "for"); kenter(IN, "in"); kenter(WHILE, "while"); kenter(IF, "if"); kenter(NOT, "not"); kenter(TWIDDLE, "~"); kenter(BANG, "!"); kenter(SUBSHELL, "@"); kenter(SWITCH, "switch"); kenter(FN, "fn");}tree*klook(char *name){ struct kw *p; tree *t = token(name, WORD); for(p = kw[hash(name, NKW)];p;p = p->next) if(strcmp(p->name, name)==0){ t->type = p->type; t->iskw = 1; break; } return t;}var*gvlook(char *name){ int h = hash(name, NVAR); var *v; for(v = gvar[h];v;v = v->next) if(strcmp(v->name, name)==0) return v; return gvar[h] = newvar(strdup(name), gvar[h]);}var*vlook(char *name){ var *v; if(runq) for(v = runq->local;v;v = v->next) if(strcmp(v->name, name)==0) return v; return gvlook(name);}voidsetvar(char *name, word *val){ struct var *v = vlook(name); freewords(v->val); v->val = val; v->changed = 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -