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 2016/03/19 18:27:21 UTC
[11/14] lucy-clownfish git commit: Introduce struct cfish_ParcelSpec
Introduce struct cfish_ParcelSpec
Change Class_bootstrap to take a single pointer to struct
cfish_ParcelSpec.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/8b71db60
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/8b71db60
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/8b71db60
Branch: refs/heads/master
Commit: 8b71db60c361fde4135e7b16b4e018a48bae1d2f
Parents: 70f2562
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Mar 10 21:15:12 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Mar 10 21:49:25 2016 +0100
----------------------------------------------------------------------
compiler/src/CFCBindSpecs.c | 24 ++++++++++++++++++++----
runtime/core/Clownfish/Class.c | 17 ++++++++++-------
runtime/core/Clownfish/Class.cfh | 5 +----
3 files changed, 31 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/8b71db60/compiler/src/CFCBindSpecs.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindSpecs.c b/compiler/src/CFCBindSpecs.c
index d9aecca..ee10a50 100644
--- a/compiler/src/CFCBindSpecs.c
+++ b/compiler/src/CFCBindSpecs.c
@@ -131,6 +131,14 @@ CFCBindSpecs_get_typedefs() {
" uint32_t num_inherited_meths;\n"
" uint32_t flags;\n"
"} cfish_ClassSpec;\n"
+ "\n"
+ "typedef struct cfish_ParcelSpec {\n"
+ " const cfish_ClassSpec *class_specs;\n"
+ " const cfish_NovelMethSpec *novel_specs;\n"
+ " const cfish_OverriddenMethSpec *overridden_specs;\n"
+ " const cfish_InheritedMethSpec *inherited_specs;\n"
+ " uint32_t num_classes;\n"
+ "} cfish_ParcelSpec;\n"
"\n";
}
@@ -267,9 +275,18 @@ CFCBindSpecs_defs(CFCBindSpecs *self) {
"%s"
"static cfish_ClassSpec class_specs[] = {\n"
"%s\n"
+ "};\n"
+ "\n"
+ "static const cfish_ParcelSpec parcel_spec = {\n"
+ " class_specs,\n"
+ " novel_specs,\n"
+ " overridden_specs,\n"
+ " inherited_specs,\n"
+ " %d\n" // num_classes
"};\n";
char *defs = CFCUtil_sprintf(pattern, novel_specs, overridden_specs,
- inherited_specs, self->class_specs);
+ inherited_specs, self->class_specs,
+ self->num_specs);
FREEMEM(inherited_specs);
FREEMEM(overridden_specs);
@@ -284,10 +301,9 @@ CFCBindSpecs_init_func_def(CFCBindSpecs *self) {
"S_bootstrap_specs() {\n"
"%s"
"\n"
- " cfish_Class_bootstrap(class_specs, %d, novel_specs,\n"
- " overridden_specs, inherited_specs);\n"
+ " cfish_Class_bootstrap(&parcel_spec);\n"
"}\n";
- return CFCUtil_sprintf(pattern, self->init_code, self->num_specs);
+ return CFCUtil_sprintf(pattern, self->init_code);
}
static char*
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/8b71db60/runtime/core/Clownfish/Class.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Class.c b/runtime/core/Clownfish/Class.c
index 86fe7c1..15cde2c 100644
--- a/runtime/core/Clownfish/Class.c
+++ b/runtime/core/Clownfish/Class.c
@@ -57,17 +57,20 @@ static LockFreeRegistry *Class_registry;
cfish_Class_bootstrap_hook1_t cfish_Class_bootstrap_hook1;
void
-Class_bootstrap(const cfish_ClassSpec *specs, size_t num_specs,
- const cfish_NovelMethSpec *novel_specs,
- const cfish_OverriddenMethSpec *overridden_specs,
- const cfish_InheritedMethSpec *inherited_specs) {
+Class_bootstrap(const cfish_ParcelSpec *parcel_spec) {
+ const ClassSpec *specs = parcel_spec->class_specs;
+ const NovelMethSpec *novel_specs = parcel_spec->novel_specs;
+ const OverriddenMethSpec *overridden_specs = parcel_spec->overridden_specs;
+ const InheritedMethSpec *inherited_specs = parcel_spec->inherited_specs;
+ uint32_t num_classes = parcel_spec->num_classes;
+
int32_t parcel_id = S_claim_parcel_id();
/* Pass 1:
* - Allocate memory.
* - Initialize global Class pointers.
*/
- for (size_t i = 0; i < num_specs; ++i) {
+ for (uint32_t i = 0; i < num_classes; ++i) {
const ClassSpec *spec = &specs[i];
Class *parent = NULL;
@@ -110,7 +113,7 @@ Class_bootstrap(const cfish_ClassSpec *specs, size_t num_specs,
uint32_t num_novel = 0;
uint32_t num_overridden = 0;
uint32_t num_inherited = 0;
- for (size_t i = 0; i < num_specs; ++i) {
+ for (uint32_t i = 0; i < num_classes; ++i) {
const ClassSpec *spec = &specs[i];
Class *klass = *spec->klass;
Class *parent = spec->parent ? *spec->parent : NULL;
@@ -197,7 +200,7 @@ Class_bootstrap(const cfish_ClassSpec *specs, size_t num_specs,
num_novel = 0;
num_overridden = 0;
num_inherited = 0;
- for (size_t i = 0; i < num_specs; ++i) {
+ for (uint32_t i = 0; i < num_classes; ++i) {
const ClassSpec *spec = &specs[i];
Class *klass = *spec->klass;
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/8b71db60/runtime/core/Clownfish/Class.cfh
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Class.cfh b/runtime/core/Clownfish/Class.cfh
index bdef4fb..ab6e2b8 100644
--- a/runtime/core/Clownfish/Class.cfh
+++ b/runtime/core/Clownfish/Class.cfh
@@ -38,10 +38,7 @@ public final class Clownfish::Class inherits Clownfish::Obj {
inert uint32_t offset_of_parent;
inert void
- bootstrap(const cfish_ClassSpec *specs, size_t num_specs,
- const cfish_NovelMethSpec *novel_specs,
- const cfish_OverriddenMethSpec *overridden_specs,
- const cfish_InheritedMethSpec *inherited_specs);
+ bootstrap(const cfish_ParcelSpec *parcel_spec);
/** Return a singleton. If a Class can be found in the registry based on
* the supplied class name, it will be returned. Otherwise, a new Class