You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2015/10/30 15:30:47 UTC
[12/15] lucy-clownfish git commit: New stack string macro SSTR_WRAP_C
New stack string macro SSTR_WRAP_C
Creates a stack string from a null-terminated C string. Also useful for
string literals. (strlen of a literal should be constant folded by the
compiler.)
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/6fadaae2
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/6fadaae2
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/6fadaae2
Branch: refs/heads/master
Commit: 6fadaae2b17c776dac6387147b7d3d8c64f982d2
Parents: 4ea023c
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Oct 24 16:03:23 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed Oct 28 16:10:35 2015 +0100
----------------------------------------------------------------------
runtime/core/Clownfish/Class.c | 4 ++--
runtime/core/Clownfish/String.cfh | 8 ++++++++
runtime/core/Clownfish/Test/TestHash.c | 12 ++++++------
runtime/core/Clownfish/Test/TestObj.c | 2 +-
runtime/core/Clownfish/Test/TestVector.c | 2 +-
5 files changed, 18 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6fadaae2/runtime/core/Clownfish/Class.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Class.c b/runtime/core/Clownfish/Class.c
index 62d9841..ba83928 100644
--- a/runtime/core/Clownfish/Class.c
+++ b/runtime/core/Clownfish/Class.c
@@ -206,7 +206,7 @@ Class_bootstrap(const cfish_ClassSpec *specs, size_t num_specs,
// Only store novel methods for now.
for (size_t i = 0; i < spec->num_novel_meths; ++i) {
const NovelMethSpec *mspec = &novel_specs[num_novel++];
- String *name = SSTR_WRAP_UTF8(mspec->name, strlen(mspec->name));
+ String *name = SSTR_WRAP_C(mspec->name);
Method *method = Method_new(name, mspec->callback_func,
*mspec->offset);
klass->methods[i] = method;
@@ -406,7 +406,7 @@ Class_Add_Host_Method_Alias_IMP(Class *self, const char *alias,
fprintf(stderr, "Method %s not found\n", meth_name);
abort();
}
- String *string = SSTR_WRAP_UTF8(alias, strlen(alias));
+ String *string = SSTR_WRAP_C(alias);
Method_Set_Host_Alias(method, string);
}
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6fadaae2/runtime/core/Clownfish/String.cfh
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/String.cfh b/runtime/core/Clownfish/String.cfh
index 530db6d..a063095 100644
--- a/runtime/core/Clownfish/String.cfh
+++ b/runtime/core/Clownfish/String.cfh
@@ -18,6 +18,9 @@ parcel Clownfish;
__C__
+// For strlen
+#include <string.h>
+
// For CFISH_ALLOCA_OBJ.
#include "Clownfish/Class.h"
@@ -385,6 +388,10 @@ __C__
#define CFISH_SSTR_BLANK() \
cfish_Str_init_stack_string(CFISH_ALLOCA_OBJ(CFISH_STRING), "", 0)
+#define CFISH_SSTR_WRAP_C(ptr) \
+ cfish_Str_init_stack_string(CFISH_ALLOCA_OBJ(CFISH_STRING), ptr, \
+ strlen(ptr))
+
#define CFISH_SSTR_WRAP_UTF8(ptr, size) \
cfish_Str_init_stack_string(CFISH_ALLOCA_OBJ(CFISH_STRING), ptr, size)
@@ -393,6 +400,7 @@ __C__
#ifdef CFISH_USE_SHORT_NAMES
#define SSTR_BLANK CFISH_SSTR_BLANK
+ #define SSTR_WRAP_C CFISH_SSTR_WRAP_C
#define SSTR_WRAP_UTF8 CFISH_SSTR_WRAP_UTF8
#define STR_OOB CFISH_STR_OOB
#define STRITER_DONE CFISH_STRITER_DONE
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6fadaae2/runtime/core/Clownfish/Test/TestHash.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestHash.c b/runtime/core/Clownfish/Test/TestHash.c
index d3e96f2..e3fb0d7 100644
--- a/runtime/core/Clownfish/Test/TestHash.c
+++ b/runtime/core/Clownfish/Test/TestHash.c
@@ -40,7 +40,7 @@ static void
test_Equals(TestBatchRunner *runner) {
Hash *hash = Hash_new(0);
Hash *other = Hash_new(0);
- String *stuff = SSTR_WRAP_UTF8("stuff", 5);
+ String *stuff = SSTR_WRAP_C("stuff");
TEST_TRUE(runner, Hash_Equals(hash, (Obj*)other),
"Empty hashes are equal");
@@ -68,9 +68,9 @@ test_Store_and_Fetch(TestBatchRunner *runner) {
const size_t starting_cap = Hash_Get_Capacity(hash);
Vector *expected = Vec_new(100);
Vector *got = Vec_new(100);
- String *twenty = SSTR_WRAP_UTF8("20", 2);
- String *forty = SSTR_WRAP_UTF8("40", 2);
- String *foo = SSTR_WRAP_UTF8("foo", 3);
+ String *twenty = SSTR_WRAP_C("20");
+ String *forty = SSTR_WRAP_C("40");
+ String *foo = SSTR_WRAP_C("foo");
for (int32_t i = 0; i < 100; i++) {
String *str = Str_newf("%i32", i);
@@ -161,8 +161,8 @@ test_Keys_Values(TestBatchRunner *runner) {
Vec_Clear(values);
{
- String *forty = SSTR_WRAP_UTF8("40", 2);
- String *nope = SSTR_WRAP_UTF8("nope", 4);
+ String *forty = SSTR_WRAP_C("40");
+ String *nope = SSTR_WRAP_C("nope");
TEST_TRUE(runner, Hash_Has_Key(hash, forty), "Has_Key");
TEST_FALSE(runner, Hash_Has_Key(hash, nope),
"Has_Key returns false for non-existent key");
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6fadaae2/runtime/core/Clownfish/Test/TestObj.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestObj.c b/runtime/core/Clownfish/Test/TestObj.c
index b37ad71..6f9b695 100644
--- a/runtime/core/Clownfish/Test/TestObj.c
+++ b/runtime/core/Clownfish/Test/TestObj.c
@@ -36,7 +36,7 @@ TestObj_new() {
static Obj*
S_new_testobj() {
- String *class_name = SSTR_WRAP_UTF8("TestObj", 7);
+ String *class_name = SSTR_WRAP_C("TestObj");
Obj *obj;
Class *klass = Class_fetch_class(class_name);
if (!klass) {
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6fadaae2/runtime/core/Clownfish/Test/TestVector.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestVector.c b/runtime/core/Clownfish/Test/TestVector.c
index 30621f0..7183504 100644
--- a/runtime/core/Clownfish/Test/TestVector.c
+++ b/runtime/core/Clownfish/Test/TestVector.c
@@ -61,7 +61,7 @@ static void
test_Equals(TestBatchRunner *runner) {
Vector *array = Vec_new(0);
Vector *other = Vec_new(0);
- String *stuff = SSTR_WRAP_UTF8("stuff", 5);
+ String *stuff = SSTR_WRAP_C("stuff");
TEST_TRUE(runner, Vec_Equals(array, (Obj*)array),
"Array equal to self");