You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/05/07 00:18:43 UTC
[17/23] lucy-clownfish git commit: Final classes mean final methods.
Final classes mean final methods.
All dynamic methods in a final class must be final.
Prior to this commit, CFCClass_fresh_methods would return non-finalized
methods, though CFCClass_methods would return methods which had been
properly finalized.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/cb8d91b9
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/cb8d91b9
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/cb8d91b9
Branch: refs/heads/master
Commit: cb8d91b9cc44096a77cfe8744ea5ef1eaf561326
Parents: 3acdc85
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sun May 3 16:36:59 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Wed May 6 14:28:16 2015 -0700
----------------------------------------------------------------------
compiler/src/CFCParseHeader.y | 4 ++++
compiler/src/CFCParser.c | 11 +++++++++++
compiler/src/CFCParser.h | 6 ++++++
3 files changed, 21 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb8d91b9/compiler/src/CFCParseHeader.y
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParseHeader.y b/compiler/src/CFCParseHeader.y
index 56b2629..bff080e 100644
--- a/compiler/src/CFCParseHeader.y
+++ b/compiler/src/CFCParseHeader.y
@@ -51,6 +51,7 @@ S_start_class(CFCParser *state, CFCDocuComment *docucomment, char *exposure,
}
CFCParser_set_class_name(state, class_name);
CFCParser_set_class_nickname(state, class_nickname);
+ CFCParser_set_class_final(state, is_final);
CFCClass *klass = CFCClass_create(CFCParser_get_parcel(state), exposure,
class_name, class_nickname, NULL,
docucomment, file_spec, inheritance,
@@ -105,6 +106,9 @@ S_new_sub(CFCParser *state, CFCDocuComment *docucomment,
is_inline = !!strstr(modifiers, "inline");
is_inert = !!strstr(modifiers, "inert");
}
+ if (CFCParser_get_class_final(state) && !is_inert) {
+ is_final = true;
+ }
/* If "inert", it's a function, otherwise it's a method. */
CFCBase *sub;
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb8d91b9/compiler/src/CFCParser.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParser.c b/compiler/src/CFCParser.c
index 4ce3f28..01bf47b 100644
--- a/compiler/src/CFCParser.c
+++ b/compiler/src/CFCParser.c
@@ -41,6 +41,7 @@ struct CFCParser {
int lineno;
char *class_name;
char *class_nickname;
+ int class_is_final;
CFCFileSpec *file_spec;
CFCMemPool *pool;
CFCParcel *parcel;
@@ -210,6 +211,16 @@ CFCParser_get_class_nickname(CFCParser *self) {
}
void
+CFCParser_set_class_final(CFCParser *self, int is_final) {
+ self->class_is_final = is_final;
+}
+
+int
+CFCParser_get_class_final(CFCParser *self) {
+ return self->class_is_final;
+}
+
+void
CFCParser_set_file_spec(CFCParser *self, CFCFileSpec *file_spec) {
CFCBase_decref((CFCBase*)self->file_spec);
self->file_spec = (CFCFileSpec*)CFCBase_incref((CFCBase*)file_spec);
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb8d91b9/compiler/src/CFCParser.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCParser.h b/compiler/src/CFCParser.h
index 51b0f44..cf23153 100644
--- a/compiler/src/CFCParser.h
+++ b/compiler/src/CFCParser.h
@@ -95,6 +95,12 @@ const char*
CFCParser_get_class_nickname(CFCParser *self);
void
+CFCParser_set_class_final(CFCParser *self, int is_final);
+
+int
+CFCParser_get_class_final(CFCParser *self);
+
+void
CFCParser_set_file_spec(CFCParser *self, struct CFCFileSpec *file_spec);
struct CFCFileSpec*