]> Nishi Git Mirror - gwion.git/commitdiff
:art: Finish removing typeof
authorJérémie Astor <fennecdjay@gmail.com>
Fri, 8 Jan 2021 10:24:14 +0000 (11:24 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Fri, 8 Jan 2021 10:24:14 +0000 (11:24 +0100)
ast
src/clean.c
src/emit/emit.c
src/parse/check.c
src/parse/scan1.c
src/parse/scan2.c

diff --git a/ast b/ast
index 59dea1d3bdabeb2ed1d69944e45bb0c83b12435b..a7f4b203839d44366733b76e74feac7dab7b2a06 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 59dea1d3bdabeb2ed1d69944e45bb0c83b12435b
+Subproject commit a7f4b203839d44366733b76e74feac7dab7b2a06
index 94e09afc58079cb48dec91962f12141230d47d5c..b4591701d75e1fc2d8ebcc54555c8ec1e62445d2 100644 (file)
@@ -46,9 +46,7 @@ ANN static void clean_type_decl(Clean *a, Type_Decl *b) {
 }
 
 ANN static void clean_prim(Clean *a, Exp_Primary *b) {
-  if(b->prim_type == ae_prim_hack   ||
-     b->prim_type == ae_prim_typeof ||
-     b->prim_type == ae_prim_interp)
+  if(b->prim_type == ae_prim_hack || b->prim_type == ae_prim_interp)
     clean_exp(a, b->d.exp);
   else if(b->prim_type == ae_prim_array)
     clean_array_sub(a, b->d.array);
index 310655c15c04383f1fcc582b43cb7a3e579f76cd..46f6e18ae39f189f4553772b9ddb76a52dd22079 100644 (file)
@@ -623,15 +623,6 @@ ANN static m_bool emit_prim_str(const Emitter emit, const m_str *str) {
 
 #define emit_prim_nil     (void*)dummy_func
 
-ANN static m_bool emit_prim_typeof(const Emitter emit, const Exp *exp) {
-  const Exp e = *exp;
-  if(!e->type->array_depth)
-    regpushi(emit, (m_uint)(actual_type(emit->gwion, e->type)));
-  else
-    regpushi(emit, (m_uint)e->type);
-  return GW_OK;
-}
-
 ANN static void interp_multi(const Emitter emit, const Exp e) {
   Var_Decl_List list = e->d.exp_decl.list;
   const int emit_var = exp_getvar(e);
index 4fcb436f44ab7171672279b513b8d686b9fbb26b..fb2a0cfab6f72480799f811215d58becba2272c7 100644 (file)
@@ -334,13 +334,6 @@ ANN static Type check_prim_id(const Env env, const Symbol *data) {
   return prim_id_non_res(env, data);
 }
 
-ANN static Type check_prim_typeof(const Env env, const Exp *exp) {
-  const Exp e = *exp;
-  DECL_OO(const Type, t, = check_exp(env, e))
-  CHECK_BO(inferable(env, t, (*exp)->pos))
-  return type_class(env->gwion, t);
-}
-
 ANN static Type check_prim_interp(const Env env, const Exp* exp) {
   CHECK_OO(check_exp(env, *exp))
   return env->gwion->type[et_string];
index 5625bef6ef225454cdd9ff34871fd1f0837bd7c3..14ac1bd31df0950db5eb97660978459a8dc617fa 100644 (file)
@@ -62,7 +62,7 @@ ANN static Type scan1_exp_decl_type(const Env env, Exp_Decl* decl) {
 }
 
 static inline m_bool scan1_defined(const Env env, const Var_Decl var) {
-  if(var->value) // from a `typeof` declaration
+  if(var->value) // from an auto declaration
     return GW_OK;
   if(((!env->class_def || !GET_FLAG(env->class_def, final) || env->scope->depth) ? nspc_lookup_value1 : nspc_lookup_value2)(env->curr, var->xid))
     ERR_B(var->pos, _("variable %s has already been defined in the same scope..."),
@@ -195,8 +195,7 @@ ANN static m_bool scan1_range(const Env env, Range *range) {
 }
 
 ANN static inline m_bool scan1_prim(const Env env, const Exp_Primary* prim) {
-  if(prim->prim_type == ae_prim_hack || prim->prim_type == ae_prim_typeof ||
-        prim->prim_type == ae_prim_interp)
+  if(prim->prim_type == ae_prim_hack || prim->prim_type == ae_prim_interp)
     return scan1_exp(env, prim->d.exp);
   if(prim->prim_type == ae_prim_array && prim->d.array->exp)
     return scan1_exp(env, prim->d.array->exp);
index f5286ac4530d8b47abacc693445f0bfac80a0f48..af5ed0fc62b70684498d95ba30e662d6ca7d3fb5 100644 (file)
@@ -105,8 +105,7 @@ ANN static m_bool scan2_range(const Env env, Range *range) {
 }
 
 ANN static inline m_bool scan2_prim(const Env env, const Exp_Primary* prim) {
-  if(prim->prim_type == ae_prim_hack || prim->prim_type == ae_prim_typeof ||
-        prim->prim_type == ae_prim_interp)
+  if(prim->prim_type == ae_prim_hack || prim->prim_type == ae_prim_interp)
     CHECK_BB(scan2_exp(env, prim->d.exp))
 /*  else if(prim->prim_type == ae_prim_id) {
     const Value v = prim_value(env, prim->d.var);