]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve isres
authorfennecdjay <astor.jeremie@wanadoo.fr>
Sun, 5 May 2019 20:30:40 +0000 (22:30 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Sun, 5 May 2019 20:30:40 +0000 (22:30 +0200)
src/emit/emit.c
src/parse/scan1.c
src/parse/type_utils.c

index 8d21d35b3e9896afccfd77bfb97997c688c8c3a7..ed4e9d3a28959f3fe6b7537a9b6d1cb8729cea63 100644 (file)
@@ -437,8 +437,8 @@ ANN static m_bool prim_id(const Emitter emit, const Exp_Primary* prim) {
     emit_add_instr(emit, RegPushMem);
   else if(prim->d.var == insert_symbol("me"))
     emit_add_instr(emit, RegPushMe);
-  else if(prim->d.var == insert_symbol("now") && exp_self(prim)->type == t_now)
-    emit_add_instr(emit, RegPushNow);// 'now' is not reserved for ... now ;-)
+  else if(prim->d.var == insert_symbol("now"))
+    emit_add_instr(emit, RegPushNow);
   else if(prim->d.var == insert_symbol("maybe"))
     emit_add_instr(emit, RegPushMaybe);
   else if(prim->d.var == insert_symbol("__func__")) {
index 3caf575f98cd2d35bd76c943495efe2493b49b86..a9ed55c7d5f77a5c6c94b5a19aa96c0834da8ba2 100644 (file)
@@ -56,7 +56,8 @@ ANN m_bool scan1_exp_decl(const Env env, const Exp_Decl* decl) {
     Type t = decl->type;
     const Var_Decl var = list->self;
     const Value former = nspc_lookup_value0(env->curr, var->xid);
-    CHECK_BB(isres(env, var->xid, exp_self(decl)->pos))
+    if(!GET_FLAG(decl->td, builtin))
+      CHECK_BB(isres(env, var->xid, exp_self(decl)->pos))
     if(former && !decl->td->exp &&
         (!env->class_def || !(GET_FLAG(env->class_def, template) || GET_FLAG(env->class_def, scan1))))
       ERR_B(var->pos, "variable %s has already been defined in the same scope...",
index b6717d684693953ddcde0d0677b2a417f0c59f1f..0f41cabe6e95d3adddb59b48797898ce6d70ad55 100644 (file)
 
 ANN m_bool isres(const Env env, const Symbol xid, const loc_t pos) {
   const m_str s = s_name(xid);
-  if(!strcmp(s, "this") || !strcmp(s, "vararg") || !name2op(s))
+  if(!strcmp(s, "this")     ||
+     !strcmp(s, "me")       ||
+     !strcmp(s, "now")      ||
+     !strcmp(s, "maybe")    ||
+     !strcmp(s, "vararg")   ||
+     !strcmp(s, "__func__") ||
+     !name2op(s))
     ERR_B(pos, "%s is reserved.", s_name(xid));
   return GW_OK;
 }