summaryrefslogtreecommitdiffstats
path: root/struct.c
diff options
context:
space:
mode:
Diffstat (limited to 'struct.c')
-rw-r--r--struct.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/struct.c b/struct.c
index b109751c..71a2984c 100644
--- a/struct.c
+++ b/struct.c
@@ -130,6 +130,7 @@ void struct_init(void)
reg_fun(intern(lit("make-struct"), user_package), func_n2v(make_struct));
reg_fun(intern(lit("make-lazy-struct"), user_package),
func_n2(make_lazy_struct));
+ reg_fun(intern(lit("make-struct-lit"), system_package), func_n2(make_struct_lit));
reg_fun(intern(lit("copy-struct"), user_package), func_n1(copy_struct));
reg_fun(intern(lit("replace-struct"), user_package), func_n2(replace_struct));
reg_fun(intern(lit("clear-struct"), user_package), func_n2o(clear_struct, 1));
@@ -563,6 +564,22 @@ val make_lazy_struct(val type, val argfun)
return sinst;
}
+val make_struct_lit(val type, val plist)
+{
+ args_decl(args, 0);
+ val strct;
+
+ if (opt_compat && opt_compat <= 154) {
+ strct = make_struct(type, plist, args);
+ } else {
+ strct = make_struct(type, nil, args);
+ for (; plist; plist = cddr(plist))
+ slotset(strct, car(plist), cadr(plist));
+ }
+
+ return strct;
+}
+
static struct struct_inst *struct_handle(val obj, val ctx)
{
if (cobjp(obj) && obj->co.ops == &struct_inst_ops)