浏览代码

plugin: New ksym_new_fast() function added.

It's inline alias for the
"ksym_new_ext(name, function, KSYM_USERDEFINED_PERMANENT,
KSYM_SYNC, KSYM_SILENT)" and targeted to syms like PTYPE checkers,
simple completion and help functions that can write to the text
buffer but not to the stdout. It helps to eliminate fork()s.
Serj Kalichev 4 月之前
父节点
当前提交
0c9317412e
共有 2 个文件被更改,包括 23 次插入22 次删除
  1. 5 21
      klish/kscheme/ksym.c
  2. 18 1
      klish/ksym.h

+ 5 - 21
klish/kscheme/ksym.c

@@ -43,7 +43,8 @@ KGET(sym, bool_t, silent);
 KSET(sym, bool_t, silent);
 
 
-ksym_t *ksym_new(const char *name, ksym_fn function)
+ksym_t *ksym_new_ext(const char *name, ksym_fn function,
+	tri_t permanent, tri_t sync, bool_t silent)
 {
 	ksym_t *sym = NULL;
 
@@ -58,26 +59,9 @@ ksym_t *ksym_new(const char *name, ksym_fn function)
 	// Initialize
 	sym->name = faux_str_dup(name);
 	sym->function = function;
-	sym->permanent = TRI_UNDEFINED;
-	sym->sync = TRI_UNDEFINED;
-	sym->silent = BOOL_FALSE;
-
-	return sym;
-}
-
-
-ksym_t *ksym_new_ext(const char *name, ksym_fn function,
-	tri_t permanent, tri_t sync, bool_t silent)
-{
-	ksym_t *sym = NULL;
-
-	sym = ksym_new(name, function);
-	if (!sym)
-		return NULL;
-
-	ksym_set_permanent(sym, permanent);
-	ksym_set_sync(sym, sync);
-	ksym_set_silent(sym, silent);
+	sym->permanent = permanent;
+	sym->sync = sync;
+	sym->silent = silent;
 
 	return sym;
 }

+ 18 - 1
klish/ksym.h

@@ -31,11 +31,28 @@ typedef int (*ksym_fn)(kcontext_t *context);
 C_DECL_BEGIN
 
 // ksym_t
-ksym_t *ksym_new(const char *name, ksym_fn function);
 ksym_t *ksym_new_ext(const char *name, ksym_fn function,
 	tri_t permanent, tri_t sync, bool_t silent);
 void ksym_free(ksym_t *sym);
 
+
+// Typical sym definition for external plugins.
+static inline ksym_t *ksym_new(const char *name, ksym_fn function)
+{
+	return ksym_new_ext(name, function, KSYM_USERDEFINED_PERMANENT,
+		KSYM_USERDEFINED_SYNC, KSYM_NONSILENT);
+}
+
+
+// Typical definition for internal syms like PTYPE checkers, simple completion
+// and help functions that can write to text buffer but not to stdout.
+static inline ksym_t *ksym_new_fast(const char *name, ksym_fn function)
+{
+	return ksym_new_ext(name, function, KSYM_USERDEFINED_PERMANENT,
+		KSYM_SYNC, KSYM_SILENT);
+}
+
+
 const char *ksym_name(const ksym_t *sym);
 
 ksym_fn ksym_function(const ksym_t *sym);