]> Nishi Git Mirror - gwion.git/commitdiff
:art: Update
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 30 Nov 2020 21:00:57 +0000 (22:00 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 30 Nov 2020 21:00:57 +0000 (22:00 +0100)
20 files changed:
ast
examples/ptr_cast.gw
include/env/context.h
include/env/value.h
include/gwi.h
src/env/context.c
src/env/value.c
src/import/import_internals.c
src/lib/engine.c
src/lib/lib_func.c
src/lib/object_op.c
src/lib/opfunc.c
src/lib/prim.c
src/lib/ptr.c
src/parse/check.c
src/parse/scan2.c
tests/error/func_non.gw
tests/error/non_function_template.gw
tests/tree/docstr.gw [new file with mode: 0644]
util

diff --git a/ast b/ast
index ba9550c1d998f0ddf81b901e633c901ebc92cb18..31bfb80acafe4235a0446cde7c93b0e3687d503c 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit ba9550c1d998f0ddf81b901e633c901ebc92cb18
+Subproject commit 31bfb80acafe4235a0446cde7c93b0e3687d503c
index 5a653f44a6094c4a498d64ba7beebfe750573d7a..a93249242a1ba871e7ecf338d3b049595b4a6376 100644 (file)
@@ -1,2 +1,2 @@
 12 => var int i;
-<<<i   $ Ptr:[int] >>>;
+<<<i $ Ptr:[int] >>>;
index 1810e04d1e6ec645f99507dbda6db72064036fc2..0fea1b748e7eb163eef6d035cb83f0f21b7a6505 100644 (file)
@@ -6,7 +6,6 @@ struct Context_ {
   Ast         tree;
   Nspc        nspc;
   struct Map_ lbls;
-  GwText *docstr;
   m_bool error;
   m_bool global;
   uint16_t ref;
index 7adb5dccdd0715bac030a36ae6506f1fe41774d0..c87da142e13d5defe0a55f74f5999ff3bf4e46e4 100644 (file)
@@ -30,7 +30,6 @@ struct Value_ {
     m_uint* ptr;
     Func func_ref;
   } d;
-  GwText *docstr;
   uint16_t ref;
   ae_flag flag;
   enum vflag vflag;
index 0d7f8937f3621cc956e30892ea4bfbeafb87cd39..d20124fdfbb3ea517289cf0abe6914f88cbbe292 100644 (file)
@@ -17,6 +17,4 @@ static inline Tmpl* gwi_tmpl(const Gwi gwi) {
 }
 
 ANN m_bool gwi_run(const Gwion gwion, m_bool (*f)(const Gwi));
-
-ANN m_bool gwi_doc(const Gwi gwi, const m_str name, const m_str doc);
 #endif
index 1ba288c7572c21120ae78c25d6339de09fb1bb80..c78d522e65f26fe0658211d78ed78f5ad7082f41 100644 (file)
@@ -7,8 +7,6 @@
 ANN void free_context(const Context a, Gwion gwion) {
   nspc_remref(a->nspc, gwion);
   free_mstr(gwion->mp, a->name);
-  if(a->docstr)
-    free_text(a->docstr);
   mp_free(gwion->mp, Context, a);
 }
 
index 86dfa6b7c78abaccd542003de1b2e15f11b7a95a..dfbf80b8d77fe90c0772792a2da2d0125c59a333 100644 (file)
@@ -14,8 +14,6 @@ ANN void free_value(Value a, Gwion gwion) {
     xfree(a->d.ptr);
   if(is_class(gwion, t))
     type_remref(t, gwion);
-  if(a->docstr)
-    free_text(a->docstr);
   mp_free(gwion->mp, ValueFrom, a->from);
   mp_free(gwion->mp, Value, a);
 }
index 2d9976619380eb3b1f462eec26b8de59e16061bf..a4fbefdf173fab1f64dbf4db669b98902d5be63f 100644 (file)
@@ -39,10 +39,3 @@ ANN m_bool gwi_run(const Gwion gwion, m_bool (*f)(const Gwi)) {
    gwion->env->name = name;
    return ret;
 }
-
-ANN m_bool gwi_doc(const Gwi gwi, const m_str name, const m_str doc) {
-  DECL_OB(const Value, v, = nspc_lookup_value0(gwi->gwion->env->curr, insert_symbol(gwi->gwion->st, name)))
-  v->docstr = new_text(gwi->gwion->mp);
-  text_add(v->docstr, doc);
-  return GW_OK;
-}
index 3688593f4a3e489faab1c8791ca6c7c531722c64..b58b7b3b2f173e3cdb7ec73cbf1c3b7faf3aedbc 100644 (file)
@@ -71,6 +71,12 @@ mk_class_instr(lt, r, l, && l != r)
 
 OP_CHECK(opck_object_dot);
 OP_EMIT(opem_object_dot);
+
+static OP_CHECK(opck_basic_ctor) {
+  const Exp_Call* call = (Exp_Call*)data;
+  ERR_N(exp_self(call)->pos, _("can't call a non-callable value"))
+}
+
 ANN static m_bool import_core_libs(const Gwi gwi) {
   const Type t_class = gwi_mk_type(gwi, "@Class", SZ_INT, NULL);
   set_tflag(t_class, tflag_infer);
@@ -159,6 +165,10 @@ ANN static m_bool import_core_libs(const Gwi gwi) {
   GWI_BB(gwi_oper_end(gwi, ">",  instr_class_gt))
   GWI_BB(gwi_oper_end(gwi, "<=", instr_class_le))
   GWI_BB(gwi_oper_end(gwi, "<",  instr_class_lt))
+
+  GWI_BB(gwi_oper_ini(gwi, NULL, (m_str)OP_ANY_TYPE, NULL))
+  GWI_BB(gwi_oper_add(gwi, opck_basic_ctor))
+  GWI_BB(gwi_oper_end(gwi, "@ctor", NULL))
   return GW_OK;
 }
 
index 4f33ccefae588c2d05830249c89257163805cd57..e73a1de87197bcf6495e1db625ace225eefded56 100644 (file)
@@ -267,7 +267,7 @@ static OP_CHECK(opck_fptr_impl) {
   struct FptrInfo info = { impl->e->info->type->info->func, impl->t->info->func,
       impl->e, impl->e->pos };
   CHECK_BO(fptr_do(env, &info))
-  return ((Exp)impl->e)->info->cast_to = impl->t;
+  return impl->t;
 }
 
 static OP_EMIT(opem_fptr_impl) {
index 3269f8900d864bfcc18faa2e60926da1ea883941..343a154ca751ea48c4c215b58fbe6f68a8ad2db6 100644 (file)
@@ -98,7 +98,6 @@ static OP_CHECK(opck_implicit_null2obj) {
   const Type r = imp->t;
   if(check_nonnull(env, l, r, "implicitly cast", imp->e->pos) == env->gwion->type[et_null])
     return env->gwion->type[et_null];
-  imp->e->info->cast_to = r;
   return imp->t;
 }
 
@@ -114,7 +113,7 @@ static OP_EMIT(opem_implicit_null2obj) {
 ANN /*static*/ Type scan_class(const Env env, const Type t, const Type_Decl* td);
 
 static Type opck_object_scan(const Env env, const struct TemplateScan *ts) {
-  if(ts->t->info->cdef && ts->t->info->cdef->base.tmpl->call)
+  if(ts->td->types)
     return scan_class(env, ts->t, ts->td) ?: env->gwion->type[et_null];
   ERR_N(td_pos(ts->td), _("you must provide template types for type '%s'"), ts->t->name)
 }
index 4acfaff47dfe4e1422ee5a3c235a4d522cadb793..439bbc05462d6db3390f2e801fd2f6d444803bd0 100644 (file)
@@ -18,7 +18,6 @@ OP_CHECK(opck_basic_cast) {
 
 OP_CHECK(opck_usr_implicit) {
   struct Implicit* imp = (struct Implicit*)data;
-  imp->e->info->cast_to = imp->t;
   return imp->t;
 }
 
index 442aaf134364792f61366e289114f2f67f585a38..947dc1bf79c35f5e7c712b04802f9a7e5c9a9b50 100644 (file)
@@ -146,8 +146,7 @@ static OP_CHECK(opck_cast_i2f) {
 }
 
 static OP_CHECK(opck_implicit_i2f) {
-  struct Implicit* imp = (struct Implicit*)data;
-  return imp->e->info->cast_to = env->gwion->type[et_float];
+  return env->gwion->type[et_float];
 }
 
 #define CHECK_FF(op, check, func) _CHECK_OP(op, check, float_##func)
index 32f6114274b0ea07f7aa33843929237dc7ab0fce..4e5d2f3d4fb1e689f9f768e23130b9dd927cd3f4 100644 (file)
@@ -95,7 +95,6 @@ static OP_CHECK(opck_ptr_implicit) {
     const m_str access = exp_access(e);
     if(access)
       ERR_N(e->pos, _("can't cast %s value to Ptr"), access);
-    e->info->cast_to = imp->t;
     exp_setvar(e, 1);
     const Type t = get_type(imp->t);
     if(!tflag(t, tflag_check))
index 8bd67cbddd9495246e71863fe2b3b2f553455f43..9caac831d04abcc3dd5e225740b1c0f7cc2b26de 100644 (file)
 ANN static m_bool check_stmt_list(const Env env, Stmt_List list);
 ANN m_bool check_class_def(const Env env, const Class_Def class_def);
 
-ANN static m_bool check_internal(const Env env, const Symbol sym,
+ANN static Type check_internal(const Env env, const Symbol sym,
       const Exp e, const Type t) {
   struct Implicit imp = { .e=e, .t=t, .pos=e->pos };
   struct Op_Import opi = { .op=sym, .lhs=e->info->type,
         .rhs=t, .data=(uintptr_t)&imp, .pos=e->pos, .op_type=op_implicit };
-  CHECK_OB(op_check(env, &opi))
-  assert(e->info->nspc);
-  return GW_OK;
+  return op_check(env, &opi);
 }
 
 ANN m_bool check_implicit(const Env env, const Exp e, const Type t) {
   if(e->info->type == t)
     return GW_OK;
   const Symbol sym = insert_symbol("@implicit");
-  return info->cast_to = check_internal(env, sym, e, t);
+  return (e->info->cast_to = check_internal(env, sym, e, t)) ? GW_OK : GW_ERROR;
 }
 
 ANN m_bool check_subscripts(Env env, const Array_Sub array, const m_bool is_decl) {
index 20cb1ac33b0e19fc222398d92a3c8a1c8af0fc05..ccaeb95e89c14f8a2be3884dd2c51dbbb08a412c 100644 (file)
@@ -286,27 +286,9 @@ ANN m_bool scan2_union_def(const Env env, const Union_Def udef) {
 #define scan2_stmt_break    (void*)dummy_func
 #define scan2_stmt_return   scan2_stmt_exp
 
-#define DOCSTRING(name, value, prefix)                   \
-ANN static inline GwText* name##_docstr(const Env env) { \
-  prefix                                                 \
-  if(!(value))                                           \
-    (value) = new_text(env->gwion->mp);                  \
-  return value;                                          \
-}
-DOCSTRING(context, env->context->docstr,)
-DOCSTRING(func, env->func->value_ref->docstr,)
-DOCSTRING(class, v->docstr, const Value v = nspc_lookup_value0(env->curr->parent, insert_symbol(env->class_def->name));)
-typedef GwText* (*docfunc)(Env);
-
 ANN static m_bool scan2_stmt_pp(const Env env, const Stmt_PP stmt) {
   if(stmt->pp_type == ae_pp_include)
     env->name = stmt->data;
-  else if(stmt->pp_type == ae_pp_docstr) {
-    const docfunc df = env->func ? func_docstr : env->class_def ? class_docstr : context_docstr;
-    GwText *docstr = df(env);
-    text_add(docstr, stmt->data);
-
-  }
   return GW_OK;
 }
 
index 6e848c9665033b2d0817e548a7fd4e4b5ea16e32..cf68a27dd36a6c04cc06187fdd697e667f9b8772 100644 (file)
@@ -1,2 +1,2 @@
-#! [contains] function call using a non-function value
+#! [contains] non-callable value
 null();
index 8840211d235d5ecf9ee0ef16441a6209c6456ee6..4cdc5eb8ad02649187dc670a4ff41360795a602f 100644 (file)
@@ -1,3 +1,3 @@
-#! [contains] template call of non-function value
+#! [contains] tests/error/non_function_template.gw
 var int test;
 test:[int]();
diff --git a/tests/tree/docstr.gw b/tests/tree/docstr.gw
new file mode 100644 (file)
index 0000000..dd20594
--- /dev/null
@@ -0,0 +1,15 @@
+#!! document file
+
+fun void test() {
+  #!! Document file level function
+}
+
+class C {
+  #!! document class
+
+  fun void test() {
+    #!! Document member function
+  }
+}
+
+<<< "Ensuring it parses: declaring a variable:", var C c >>>;
diff --git a/util b/util
index 011948c5a80f49af50d6e6a35aacd8e70eb53ec6..18330ebb0d167c9f1e30cdc97bfc0c86fa329dc0 160000 (submodule)
--- a/util
+++ b/util
@@ -1 +1 @@
-Subproject commit 011948c5a80f49af50d6e6a35aacd8e70eb53ec6
+Subproject commit 18330ebb0d167c9f1e30cdc97bfc0c86fa329dc0