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 2013/09/01 22:17:04 UTC
[lucy-commits] [16/24] git commit: refs/heads/cfish-string-prep1 - Convert
Clownfish::Err to CharBuf
Convert Clownfish::Err to CharBuf
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/e2f2ce56
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/e2f2ce56
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/e2f2ce56
Branch: refs/heads/cfish-string-prep1
Commit: e2f2ce5651c5be91998bc30d7a1cd9e3c98cc1b4
Parents: e6150f4
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sun Sep 1 18:49:12 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Sep 1 22:05:02 2013 +0200
----------------------------------------------------------------------
clownfish/runtime/core/Clownfish/Err.c | 69 ++++++++++++++++++-----------
1 file changed, 42 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/e2f2ce56/clownfish/runtime/core/Clownfish/Err.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/core/Clownfish/Err.c b/clownfish/runtime/core/Clownfish/Err.c
index 46f0027..6d58301 100644
--- a/clownfish/runtime/core/Clownfish/Err.c
+++ b/clownfish/runtime/core/Clownfish/Err.c
@@ -27,6 +27,8 @@
#include <ctype.h>
#include "Clownfish/Err.h"
+
+#include "Clownfish/CharBuf.h"
#include "Clownfish/String.h"
#include "Clownfish/VTable.h"
#include "Clownfish/Util/Memory.h"
@@ -56,30 +58,39 @@ Err_To_String_IMP(Err *self) {
void
Err_Cat_Mess_IMP(Err *self, const String *mess) {
- Str_Cat(self->mess, mess);
+ String *new_mess = Str_Immutable_Cat(self->mess, mess);
+ DECREF(self->mess);
+ self->mess = new_mess;
}
// Fallbacks in case variadic macros aren't available.
#ifndef CHY_HAS_VARIADIC_MACROS
+static String*
+S_str_vnewf(char *pattern, va_list args) {
+ CharBuf *buf = CB_new(strlen(pattern) + 10);
+ CB_VCatF(buf, pattern, args);
+ String *message = CB_Yield_String(buf);
+ DECREF(buf);
+ return message;
+}
void
THROW(VTable *vtable, char *pattern, ...) {
va_list args;
- Err *err = (Err*)VTable_Make_Obj(vtable);
- err = Err_init(err, Str_new(0));
va_start(args, pattern);
- Str_VCatF(err->mess, pattern, args);
+ String *message = S_str_vnewf(pattern, args);
va_end(args);
+ Err *err = (Err*)VTable_Make_Obj(vtable);
+ err = Err_init(err, message);
Err_do_throw(err);
}
void
CFISH_WARN(char *pattern, ...) {
va_list args;
- String *const message = Str_new(strlen(pattern) + 10);
va_start(args, pattern);
- Str_VCatF(message, pattern, args);
+ String *message = S_str_vnewf(pattern, args);
va_end(args);
Err_warn_mess(message);
@@ -87,10 +98,9 @@ CFISH_WARN(char *pattern, ...) {
String*
CFISH_MAKE_MESS(char *pattern, ...) {
va_list args;
- String *const message = Str_new(strlen(pattern) + 10);
va_start(args, pattern);
- Str_VCatF(message, pattern, args);
+ String *message = S_str_vnewf(pattern, args);
va_end(args);
return message;
@@ -98,31 +108,32 @@ CFISH_MAKE_MESS(char *pattern, ...) {
#endif
-static void
-S_vcat_mess(String *message, const char *file, int line, const char *func,
- const char *pattern, va_list args) {
+static String*
+S_vmake_mess(const char *file, int line, const char *func,
+ const char *pattern, va_list args) {
size_t guess_len = strlen(file)
+ func ? strlen(func) : 0
+ strlen(pattern)
+ 30;
- Str_Grow(message, guess_len);
- Str_VCatF(message, pattern, args);
+ CharBuf *buf = CB_new(guess_len);
+ CB_VCatF(buf, pattern, args);
if (func != NULL) {
- Str_catf(message, "\n\t%s at %s line %i32\n", func, file, (int32_t)line);
+ CB_catf(buf, "\n\t%s at %s line %i32\n", func, file, (int32_t)line);
}
else {
- Str_catf(message, "\n\t%s line %i32\n", file, (int32_t)line);
+ CB_catf(buf, "\n\t%s line %i32\n", file, (int32_t)line);
}
+ String *message = CB_Yield_String(buf);
+ DECREF(buf);
+ return message;
}
String*
Err_make_mess(const char *file, int line, const char *func,
const char *pattern, ...) {
va_list args;
- size_t guess_len = strlen(pattern) + strlen(file) + 20;
- String *message = Str_new(guess_len);
va_start(args, pattern);
- S_vcat_mess(message, file, line, func, pattern, args);
+ String *message = S_vmake_mess(file, line, func, pattern, args);
va_end(args);
return message;
}
@@ -131,9 +142,8 @@ void
Err_warn_at(const char *file, int line, const char *func,
const char *pattern, ...) {
va_list args;
- String *message = Str_new(0);
va_start(args, pattern);
- S_vcat_mess(message, file, line, func, pattern, args);
+ String *message = S_vmake_mess(file, line, func, pattern, args);
va_end(args);
Err_warn_mess(message);
}
@@ -145,17 +155,22 @@ Err_Get_Mess_IMP(Err *self) {
void
Err_Add_Frame_IMP(Err *self, const char *file, int line, const char *func) {
+ CharBuf *buf = CB_new_from_str(self->mess);
+
if (!Str_Ends_With_Str(self->mess, "\n", 1)) {
- Str_Cat_Char(self->mess, '\n');
+ CB_Cat_Char(buf, '\n');
}
if (func != NULL) {
- Str_catf(self->mess, "\t%s at %s line %i32\n", func, file,
- (int32_t)line);
+ CB_catf(buf, "\t%s at %s line %i32\n", func, file, (int32_t)line);
}
else {
- Str_catf(self->mess, "\tat %s line %i32\n", file, (int32_t)line);
+ CB_catf(buf, "\tat %s line %i32\n", file, (int32_t)line);
}
+
+ DECREF(self->mess);
+ self->mess = CB_Yield_String(buf);
+ DECREF(buf);
}
void
@@ -168,13 +183,13 @@ void
Err_throw_at(VTable *vtable, const char *file, int line,
const char *func, const char *pattern, ...) {
va_list args;
- Err *err = (Err*)VTable_Make_Obj(vtable);
- err = Err_init(err, Str_new(0));
va_start(args, pattern);
- S_vcat_mess(err->mess, file, line, func, pattern, args);
+ String *message = S_vmake_mess(file, line, func, pattern, args);
va_end(args);
+ Err *err = (Err*)VTable_Make_Obj(vtable);
+ err = Err_init(err, message);
Err_do_throw(err);
}