From ff2fe9ef936016e4562976cb39a5f770c682d4c3 Mon Sep 17 00:00:00 2001 From: Stefan Urbanek Date: Wed, 6 Aug 2003 21:09:41 +0000 Subject: [PATCH] Added som NSCoding git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/steptalk/trunk@17444 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 ++++ Frameworks/StepTalk/.cvsignore | 2 ++ .../StepTalk/Environments/StepTalk.stenv | 2 +- Frameworks/StepTalk/STEnvironment.m | 8 ++++++ .../StepTalk/STEnvironmentDescription.h | 2 ++ .../StepTalk/STEnvironmentDescription.m | 25 +++++++++++++++++++ Frameworks/StepTalk/STScriptObject.h | 2 +- Frameworks/StepTalk/STScriptObject.m | 19 ++++++++++++++ Languages/Smalltalk/STBytecodes.h | 2 +- Languages/Smalltalk/STBytecodes.m | 16 ++++++++++++ Languages/Smalltalk/STCompiledCode.h | 2 +- Languages/Smalltalk/STCompiledCode.m | 25 +++++++++++++++++++ Languages/Smalltalk/STCompiledMethod.m | 18 +++++++++++++ 13 files changed, 124 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d46eb1..3b0af4b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,11 @@ * Modules: Removed StepTalk module as it is no more needed, because we have framework and it can provide scripting capabilities by it self * All GNUMakefiles modified to reflect change to Framework + * Added Framework loading in .stenv description files. + Use: Frameworks = (name1, name2); + + NOTE: You HAVE to remove your previous installation of StepTalk to be + able to install new one. (especially Local/Library/Headers/StepTalk). 2003 Aug 5 Stefan Urbanek diff --git a/Frameworks/StepTalk/.cvsignore b/Frameworks/StepTalk/.cvsignore index 862e5dc..3f533d8 100644 --- a/Frameworks/StepTalk/.cvsignore +++ b/Frameworks/StepTalk/.cvsignore @@ -5,3 +5,5 @@ shared_*obj *.bundle *.stmodule *.stlanguage +*.framework +derived_src diff --git a/Frameworks/StepTalk/Environments/StepTalk.stenv b/Frameworks/StepTalk/Environments/StepTalk.stenv index f7f94aa..c042460 100644 --- a/Frameworks/StepTalk/Environments/StepTalk.stenv +++ b/Frameworks/StepTalk/Environments/StepTalk.stenv @@ -11,7 +11,7 @@ { Name = "StepTalk"; - Modules = (StepTalk); + Frameworks = (StepTalk); Classes = { diff --git a/Frameworks/StepTalk/STEnvironment.m b/Frameworks/StepTalk/STEnvironment.m index ddc29e8..e0d998a 100644 --- a/Frameworks/StepTalk/STEnvironment.m +++ b/Frameworks/StepTalk/STEnvironment.m @@ -133,6 +133,14 @@ [self loadModule:name]; } + /* Load frameworks */ + enumerator = [[description frameworks] objectEnumerator]; + + while( (name = [enumerator nextObject]) ) + { + [self includeFramework:name]; + } + /* Register finders */ enumerator = [[description objectFinders] objectEnumerator]; diff --git a/Frameworks/StepTalk/STEnvironmentDescription.h b/Frameworks/StepTalk/STEnvironmentDescription.h index 8e56126..92df3a4 100644 --- a/Frameworks/StepTalk/STEnvironmentDescription.h +++ b/Frameworks/StepTalk/STEnvironmentDescription.h @@ -44,6 +44,7 @@ enum NSMutableDictionary *behaviours; NSMutableDictionary *aliases; NSMutableArray *modules; + NSMutableArray *frameworks; NSMutableArray *finders; int restriction; @@ -61,6 +62,7 @@ enum - (NSMutableDictionary *)classes; - (NSArray *)modules; +- (NSArray *)frameworks; - (NSArray *)objectFinders; @end diff --git a/Frameworks/StepTalk/STEnvironmentDescription.m b/Frameworks/StepTalk/STEnvironmentDescription.m index 8ddfac2..0e81c9e 100644 --- a/Frameworks/StepTalk/STEnvironmentDescription.m +++ b/Frameworks/StepTalk/STEnvironmentDescription.m @@ -87,6 +87,7 @@ static NSDictionary *dictForDescriptionWithName(NSString *defName) - (void)updateUseList:(NSArray *)array; - (void)updateModuleList:(NSArray *)array; +- (void)updateFrameworkList:(NSArray *)array; - (void)updateFinderList:(NSArray *)array; @end @@ -182,6 +183,7 @@ static NSDictionary *dictForDescriptionWithName(NSString *defName) [self updateUseList:[def objectForKey:@"Use"]]; [self updateModuleList:[def objectForKey:@"Modules"]]; + [self updateFrameworkList:[def objectForKey:@"Frameworks"]]; [self updateFinderList:[def objectForKey:@"Finders"]]; [self updateBehavioursFromDictionary:[def objectForKey:@"Behaviours"]]; [self updateClassesFromDictionary:[def objectForKey:@"Classes"]]; @@ -233,7 +235,30 @@ static NSDictionary *dictForDescriptionWithName(NSString *defName) } } } +- (void)updateFrameworkList:(NSArray *)array +{ + NSEnumerator *enumerator; + NSString *str; + enumerator = [array objectEnumerator]; + + while( (str = [enumerator nextObject]) ) + { + if(!frameworks) + { + frameworks = [[NSMutableArray alloc] init]; + } + + if( ![frameworks containsObject:str] ) + { + [frameworks addObject:str]; + } + } +} +- (NSArray *)frameworks +{ + return [NSArray arrayWithArray:frameworks]; +} - (void)updateFinderList:(NSArray *)array { NSEnumerator *enumerator; diff --git a/Frameworks/StepTalk/STScriptObject.h b/Frameworks/StepTalk/STScriptObject.h index 46d1b28..de539dd 100644 --- a/Frameworks/StepTalk/STScriptObject.h +++ b/Frameworks/StepTalk/STScriptObject.h @@ -9,7 +9,7 @@ @class NSArray; @class STEnvironment; -@interface STScriptObject:NSObject +@interface STScriptObject:NSObject { NSMutableDictionary *ivars; NSMutableDictionary *methodDictionary; diff --git a/Frameworks/StepTalk/STScriptObject.m b/Frameworks/StepTalk/STScriptObject.m index 00154a3..1ecd4ec 100644 --- a/Frameworks/StepTalk/STScriptObject.m +++ b/Frameworks/StepTalk/STScriptObject.m @@ -6,6 +6,7 @@ #import "STFunctions.h" #import +#import #import #import @@ -146,4 +147,22 @@ some other, more clever mechanism. */ [invocation setReturnValue:&retval]; } +- (void)encodeWithCoder:(NSCoder *)coder +{ + // [super encodeWithCoder: coder]; + + [coder encodeObject:methodDictionary]; + [coder encodeObject:ivars]; +} + +- initWithCoder:(NSCoder *)decoder +{ + self = [super init]; //[super initWithCoder: decoder]; + + [decoder decodeValueOfObjCType: @encode(id) at: &methodDictionary]; + [decoder decodeValueOfObjCType: @encode(id) at: &ivars]; + return self; +} + + @end diff --git a/Languages/Smalltalk/STBytecodes.h b/Languages/Smalltalk/STBytecodes.h index 210d08d..f89b361 100644 --- a/Languages/Smalltalk/STBytecodes.h +++ b/Languages/Smalltalk/STBytecodes.h @@ -80,7 +80,7 @@ extern NSArray *STBytecodeNames; extern NSString *STBytecodeName(unsigned short code); extern NSString *STDissasembleBytecode(STBytecode bytecode); -@interface STBytecodes:NSData +@interface STBytecodes:NSData { NSData *bytes; } diff --git a/Languages/Smalltalk/STBytecodes.m b/Languages/Smalltalk/STBytecodes.m index 3f78f51..4facad0 100644 --- a/Languages/Smalltalk/STBytecodes.m +++ b/Languages/Smalltalk/STBytecodes.m @@ -266,5 +266,21 @@ NSString *STDissasembleBytecode(STBytecode bytecode) *pointer,length]; return bytecode; } +- (void)encodeWithCoder:(NSCoder *)coder +{ + // [super encodeWithCoder: coder]; + + [coder encodeObject:bytes]; +} + +- initWithCoder:(NSCoder *)decoder +{ + self = [super init]; // super initWithCoder: decoder]; + + [decoder decodeValueOfObjCType: @encode(id) at: &bytes]; + + return self; +} + @end diff --git a/Languages/Smalltalk/STCompiledCode.h b/Languages/Smalltalk/STCompiledCode.h index 9295503..b97fa59 100644 --- a/Languages/Smalltalk/STCompiledCode.h +++ b/Languages/Smalltalk/STCompiledCode.h @@ -27,7 +27,7 @@ @class NSMutableArray; @class STBytecodes; -@interface STCompiledCode:NSObject +@interface STCompiledCode:NSObject { STBytecodes *bytecodes; NSArray *literals; diff --git a/Languages/Smalltalk/STCompiledCode.m b/Languages/Smalltalk/STCompiledCode.m index 9a09e43..513391e 100644 --- a/Languages/Smalltalk/STCompiledCode.m +++ b/Languages/Smalltalk/STCompiledCode.m @@ -80,4 +80,29 @@ { return externRefs; } + +- (void)encodeWithCoder:(NSCoder *)coder +{ + // [super encodeWithCoder: coder]; + + [coder encodeObject:bytecodes]; + [coder encodeObject:literals]; + [coder encodeObject:externRefs]; + [coder encodeValueOfObjCType: @encode(short) at: &tempCount]; + [coder encodeValueOfObjCType: @encode(short) at: &stackSize]; +} + +- initWithCoder:(NSCoder *)decoder +{ + self = [super init]; // [super initWithCoder: decoder]; + + [decoder decodeValueOfObjCType: @encode(id) at: &bytecodes]; + [decoder decodeValueOfObjCType: @encode(id) at: &literals]; + [decoder decodeValueOfObjCType: @encode(id) at: &externRefs]; + [decoder decodeValueOfObjCType: @encode(short) at: &tempCount]; + [decoder decodeValueOfObjCType: @encode(short) at: &stackSize]; + + return self; +} + @end diff --git a/Languages/Smalltalk/STCompiledMethod.m b/Languages/Smalltalk/STCompiledMethod.m index 698c646..4631d08 100644 --- a/Languages/Smalltalk/STCompiledMethod.m +++ b/Languages/Smalltalk/STCompiledMethod.m @@ -120,4 +120,22 @@ { return @"Smalltalk"; } +- (void)encodeWithCoder:(NSCoder *)coder +{ + [super encodeWithCoder: coder]; + + [coder encodeObject:selector]; + [coder encodeValueOfObjCType: @encode(short) at: &argCount]; +} + +- initWithCoder:(NSCoder *)decoder +{ + self = [super initWithCoder: decoder]; + + [decoder decodeValueOfObjCType: @encode(id) at: &selector]; + [decoder decodeValueOfObjCType: @encode(short) at: &argCount]; + + return self; +} + @end