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/07/21 15:35:13 UTC
[lucy-commits] [04/10] git commit: refs/heads/charmonizer-decoupling - Port more
macros from CHY to CFISH namespace
Port more macros from CHY to CFISH namespace
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/281679df
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/281679df
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/281679df
Branch: refs/heads/charmonizer-decoupling
Commit: 281679dfaee6ca8e7fa985c18fed15debf4f114f
Parents: 814c070
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sun Jul 21 11:58:31 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Jul 21 15:04:04 2013 +0200
----------------------------------------------------------------------
clownfish/compiler/common/charmonizer.main | 3 +
clownfish/compiler/src/CFCBindCore.c | 116 +++++++++++++++++++++---
devel/bin/regen_charmonizer.pl | 10 +-
3 files changed, 111 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/281679df/clownfish/compiler/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.main b/clownfish/compiler/common/charmonizer.main
index eeae5fe..1803a3b 100644
--- a/clownfish/compiler/common/charmonizer.main
+++ b/clownfish/compiler/common/charmonizer.main
@@ -263,12 +263,15 @@ int main(int argc, const char **argv) {
chaz_BuildEnv_run();
chaz_DirManip_run();
chaz_Headers_run();
+ chaz_AtomicOps_run();
chaz_FuncMacro_run();
chaz_Booleans_run();
chaz_Integers_run();
chaz_Strings_run();
+ chaz_Memory_run();
chaz_SymbolVisibility_run();
chaz_UnusedVars_run();
+ chaz_VariadicMacros_run();
if (args.write_makefile) {
S_write_makefile(&args);
http://git-wip-us.apache.org/repos/asf/lucy/blob/281679df/clownfish/compiler/src/CFCBindCore.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCBindCore.c b/clownfish/compiler/src/CFCBindCore.c
index 5a7c94a..430c608 100644
--- a/clownfish/compiler/src/CFCBindCore.c
+++ b/clownfish/compiler/src/CFCBindCore.c
@@ -55,11 +55,20 @@ static char*
S_charmony_defines();
static char*
+S_charmony_feature_defines();
+
+static char*
+S_charmony_string_defines();
+
+static char*
S_charmony_stdbool_defines();
-char*
+static char*
S_charmony_stdint_defines();
+static char*
+S_charmony_alloca_defines();
+
static const CFCMeta CFCBINDCORE_META = {
"Clownfish::CFC::Binding::Core",
sizeof(CFCBindCore),
@@ -140,8 +149,6 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
const char *PREFIX = CFCParcel_get_PREFIX(parcel);
const char *privacy_sym = CFCParcel_get_privacy_sym(parcel);
- char *charmony_defines = S_charmony_defines();
-
// Declare object structs for all instantiable classes.
char *typedefs = CFCUtil_strdup("");
CFCClass **ordered = CFCHierarchy_ordered_classes(hierarchy);
@@ -158,13 +165,16 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
}
FREEMEM(ordered);
- // Special includes for Clownfish parcel.
+ // Special includes and macros for Clownfish parcel.
const char *cfish_includes_pattern =
"#include <stdarg.h>\n"
"#include <stddef.h>\n"
"\n"
"%s"
"\n"
+ "#define CFISH_UNUSED_VAR(var) ((void)var)\n"
+ "#define CFISH_UNREACHABLE_RETURN(type) return (type)0\n"
+ "\n"
"#include \"cfish_hostdefs.h\"\n";
// Special definitions for Clownfish parcel.
@@ -270,8 +280,10 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
char *extra_includes;
if (strcmp(prefix, "cfish_") == 0) {
extra_defs = cfish_defs;
+ char *charmony_defines = S_charmony_defines();
extra_includes = CFCUtil_sprintf(cfish_includes_pattern,
charmony_defines);
+ FREEMEM(charmony_defines);
}
else {
extra_defs = "";
@@ -339,7 +351,6 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
CFCUtil_write_file(filepath, file_content, strlen(file_content));
FREEMEM(filepath);
- FREEMEM(charmony_defines);
FREEMEM(typedefs);
FREEMEM(extra_includes);
FREEMEM(file_content);
@@ -553,22 +564,87 @@ CFCBindCore_write_callbacks_h(CFCBindCore *self) {
static char*
S_charmony_defines() {
+ char *feature_defs = S_charmony_feature_defines();
+ char *string_defs = S_charmony_string_defines();
char *stdbool_defs = S_charmony_stdbool_defines();
char *stdint_defs = S_charmony_stdint_defines();
+ char *alloca_defs = S_charmony_alloca_defines();
const char *pattern =
- "#define CFISH_INLINE %s\n"
- "#define CFISH_EXPORT %s\n"
- "#define CFISH_IMPORT %s\n"
+ "%s"
+ "%s"
"\n"
"%s"
+ "%s"
+ "\n"
"%s";
char *defines
- = CFCUtil_sprintf(pattern, XSTRING(CHY_INLINE), XSTRING(CHY_EXPORT),
- XSTRING(CHY_IMPORT), stdbool_defs, stdint_defs);
+ = CFCUtil_sprintf(pattern, feature_defs, string_defs, stdbool_defs,
+ stdint_defs, alloca_defs);
+ FREEMEM(feature_defs);
+ FREEMEM(string_defs);
FREEMEM(stdbool_defs);
FREEMEM(stdint_defs);
+ FREEMEM(alloca_defs);
+ return defines;
+}
+
+static char*
+S_charmony_feature_defines() {
+ char *defines = CFCUtil_strdup("");
+
+#ifdef CHY_HAS_WINDOWS_H
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_WINDOWS_H\n", NULL);
+#endif
+#ifdef CHY_HAS_SYS_ATOMIC_H
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_SYS_ATOMIC_H\n", NULL);
+#endif
+#ifdef CHY_HAS_PTHREAD_H
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_PTHREAD_H\n", NULL);
+#endif
+#ifdef CHY_LITTLE_END
+ defines = CFCUtil_cat(defines, "#define CFISH_LITTLE_END\n", NULL);
+#endif
+#ifdef CHY_BIG_END
+ defines = CFCUtil_cat(defines, "#define CFISH_BIG_END\n", NULL);
+#endif
+#ifdef CHY_HAS_FUNC_MACRO
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_FUNC_MACRO\n", NULL);
+#endif
+#ifdef CHY_HAS_VARIADIC_MACROS
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_VARIADIC_MACROS\n",
+ NULL);
+#endif
+#ifdef CHY_HAS_ISO_VARIADIC_MACROS
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_ISO_VARIADIC_MACROS\n",
+ NULL);
+#endif
+#ifdef CHY_HAS_GNUC_VARIADIC_MACROS
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_GNUC_VARIADIC_MACROS\n",
+ NULL);
+#endif
+#ifdef CHY_HAS_OSATOMIC_CAS_PTR
+ defines = CFCUtil_cat(defines, "#define CFISH_HAS_OSATOMIC_CAS_PTR\n",
+ NULL);
+#endif
+
+ return defines;
+}
+
+static char*
+S_charmony_string_defines() {
+ const char *pattern =
+ "#define CFISH_INLINE %s\n"
+ "#define CFISH_EXPORT %s\n"
+ "#define CFISH_IMPORT %s\n"
+ "#define CFISH_FUNC_MACRO %s\n"
+ "#define CFISH_U64_TO_DOUBLE(x) %s\n";
+ char *defines
+ = CFCUtil_sprintf(pattern, XSTRING(CHY_INLINE), XSTRING(CHY_EXPORT),
+ XSTRING(CHY_IMPORT), XSTRING(CHY_FUNC_MACRO),
+ XSTRING(CHY_U64_TO_DOUBLE(x)));
+
return defines;
}
@@ -592,7 +668,7 @@ S_charmony_stdbool_defines() {
return CFCUtil_strdup(defines);
}
-char*
+static char*
S_charmony_stdint_defines() {
#ifdef CHY_HAS_STDINT_H
return CFCUtil_strdup("#include <stdint.h>\n");
@@ -616,4 +692,22 @@ S_charmony_stdint_defines() {
#endif
}
+static char*
+S_charmony_alloca_defines() {
+ char *defines = CFCUtil_strdup("");
+
+#if defined(CHY_HAS_ALLOCA_H)
+ defines = CFCUtil_cat(defines, "#include <alloca.h>\n", NULL);
+#elif defined(CHY_HAS_MALLOC_H)
+ defines = CFCUtil_cat(defines, "#include <malloc.h>\n", NULL);
+#elif defined(CHY_ALLOCA_IN_STDLIB_H)
+ defines = CFCUtil_cat(defines, "#include <stdlib.h>\n", NULL);
+#endif
+
+ defines = CFCUtil_cat(defines, "#define cfish_alloca ",
+ XSTRING(chy_alloca), "\n", NULL);
+
+ return defines;
+}
+
http://git-wip-us.apache.org/repos/asf/lucy/blob/281679df/devel/bin/regen_charmonizer.pl
----------------------------------------------------------------------
diff --git a/devel/bin/regen_charmonizer.pl b/devel/bin/regen_charmonizer.pl
index 1fda312..1e42dd3 100755
--- a/devel/bin/regen_charmonizer.pl
+++ b/devel/bin/regen_charmonizer.pl
@@ -29,15 +29,11 @@ my $MELD_EXE = catfile( $CHAZ_DIR, 'buildbin', 'meld.pl' );
# Clownfish compiler.
{
- my $probes = join( ',', qw(
- Booleans BuildEnv DirManip FuncMacro Headers Integers Strings
- SymbolVisibility UnusedVars
- ) );
- my $main = catfile(qw( clownfish compiler common charmonizer.main ));
- my $out = $main;
+ my $main = catfile(qw( clownfish compiler common charmonizer.main ));
+ my $out = $main;
$out =~ s/\.main/.c/ or die "no match";
unlink $out;
- system( $MELD_EXE, "--probes=$probes", "--files=$main", "--out=$out" );
+ system( $MELD_EXE, "--probes=", "--files=$main", "--out=$out" );
}
# Clownfish runtime.