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/06/15 20:45:14 UTC
[lucy-commits] [3/6] git commit: refs/heads/separate-clownfish-wip4 - Generate code
to initialize runtime method metadata
Generate code to initialize runtime method metadata
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/b2d5dce6
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/b2d5dce6
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/b2d5dce6
Branch: refs/heads/separate-clownfish-wip4
Commit: b2d5dce6b49b525623ff3a582763234a970bf631
Parents: 10c599b
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed Jun 12 23:38:39 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Jun 15 20:39:30 2013 +0200
----------------------------------------------------------------------
clownfish/compiler/src/CFCPerl.c | 5 +++++
clownfish/compiler/src/CFCPerlClass.c | 29 +++++++++++++++++++++++++++++
clownfish/compiler/src/CFCPerlClass.h | 5 +++++
3 files changed, 39 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/b2d5dce6/clownfish/compiler/src/CFCPerl.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCPerl.c b/clownfish/compiler/src/CFCPerl.c
index 13dd0ee..d1d0dad 100644
--- a/clownfish/compiler/src/CFCPerl.c
+++ b/clownfish/compiler/src/CFCPerl.c
@@ -249,6 +249,11 @@ S_write_boot_c(CFCPerl *self) {
FREEMEM(alias_adds);
alias_adds = new_alias_adds;
}
+
+ char *metadata_code
+ = CFCPerlClass_method_metadata_code(class_binding);
+ alias_adds = CFCUtil_cat(alias_adds, metadata_code, NULL);
+ FREEMEM(metadata_code);
}
CFCClass *parent = CFCClass_get_parent(klass);
http://git-wip-us.apache.org/repos/asf/lucy/blob/b2d5dce6/clownfish/compiler/src/CFCPerlClass.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCPerlClass.c b/clownfish/compiler/src/CFCPerlClass.c
index c676fb2..f11b7d9 100644
--- a/clownfish/compiler/src/CFCPerlClass.c
+++ b/clownfish/compiler/src/CFCPerlClass.c
@@ -546,3 +546,32 @@ CFCPerlClass_get_class_aliases(CFCPerlClass *self) {
return (const char **)self->class_aliases;
}
+// Generate C code which initializes method metadata.
+char*
+CFCPerlClass_method_metadata_code(CFCPerlClass *self) {
+ const char *vtable_var = CFCClass_full_vtable_var(self->client);
+ CFCMethod **fresh_methods = CFCClass_fresh_methods(self->client);
+ char *code = CFCUtil_strdup("");
+
+ for (int i = 0; fresh_methods[i] != NULL; i++) {
+ CFCMethod *method = fresh_methods[i];
+ if (!CFCMethod_novel(method)) { continue; }
+
+ const char *macro_sym = CFCMethod_get_macro_sym(method);
+ const char *alias = CFCMethod_get_host_alias(method);
+ if (alias) {
+ code = CFCUtil_cat(code, " Cfish_VTable_Add_Host_Method_Alias(",
+ vtable_var, ", \"", alias, "\", \"", macro_sym,
+ "\");\n", NULL);
+ }
+ if (CFCMethod_excluded_from_host(method)) {
+ code = CFCUtil_cat(code, " Cfish_VTable_Exclude_Host_Method(",
+ vtable_var, ", \"", macro_sym, "\");\n", NULL);
+ }
+ }
+
+ FREEMEM(fresh_methods);
+ return code;
+}
+
+
http://git-wip-us.apache.org/repos/asf/lucy/blob/b2d5dce6/clownfish/compiler/src/CFCPerlClass.h
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCPerlClass.h b/clownfish/compiler/src/CFCPerlClass.h
index d5fdda7..89fd1fe 100644
--- a/clownfish/compiler/src/CFCPerlClass.h
+++ b/clownfish/compiler/src/CFCPerlClass.h
@@ -162,6 +162,11 @@ CFCPerlClass_add_class_alias(CFCPerlClass *self, const char *alias);
const char**
CFCPerlClass_get_class_aliases(CFCPerlClass *self);
+/** Return C code which initializes method metadata.
+ */
+char*
+CFCPerlClass_method_metadata_code(CFCPerlClass *self);
+
#ifdef __cplusplus
}
#endif