Oolite
Loading...
Searching...
No Matches
OOJSScript Class Reference

#include <OOJSScript.h>

+ Inheritance diagram for OOJSScript:
+ Collaboration diagram for OOJSScript:

Instance Methods

(id) - initWithPath:properties:
 
(BOOL) - callMethod:inContext:withArguments:count:result:
 
(id) - propertyWithID:inContext:
 
(BOOL) - setProperty:withID:inContext:
 
(BOOL) - defineProperty:withID:inContext:
 
(id) - propertyNamed:
 
(BOOL) - setProperty:named:
 
(BOOL) - defineProperty:named:
 
(void) - dealloc [implementation]
 
(NSString *) - oo_jsClassName [implementation]
 
(NSString *) - descriptionComponents [implementation]
 
(void) - javaScriptEngineWillReset: [implementation]
 
(id) - weakRetain [implementation]
 
(void) - weakRefDied: [implementation]
 
(NSString *) - scriptDescription [implementation]
 
(void) - runWithTarget: [implementation]
 
(jsval) - oo_jsValueInContext: [implementation]
 
(NSString *) - scriptNameFromPath: [implementation]
 
(NSDictionary *) - defaultPropertiesFromPath: [implementation]
 
- Instance Methods inherited from OOScript
(NSString *) - name
 
(NSString *) - version
 
(NSString *) - displayName
 
(BOOL) - requiresTickle
 
- Instance Methods inherited from <OOWeakReferenceSupport>
(id) - OO_RETURNS_RETAINED
 

Class Methods

(id) + scriptWithPath:properties:
 
(OOJSScript *) + currentlyRunningScript
 
(NSArray *) + scriptStack
 
(void) + pushScript:
 
(void) + popScript:
 
- Class Methods inherited from OOScript
(NSArray *) + worldScriptsAtPath:
 
(NSArray *) + scriptsFromFileNamed:
 
(NSArray *) + scriptsFromList:
 
(NSArray *) + scriptsFromFileAtPath:
 
(id) + jsScriptFromFileNamed:properties:
 
(id) + jsAIScriptFromFileNamed:properties:
 

Private Attributes

JSObject * _jsSelf
 
NSString * name
 
NSString * description
 
NSString * version
 
NSString * filePath
 
OOWeakReferenceweakSelf
 

Detailed Description

Definition at line 31 of file OOJSScript.h.

Method Documentation

◆ callMethod:inContext:withArguments:count:result:

- (BOOL) callMethod: (jsid)  methodID
inContext: (JSContext *)  context
withArguments: (jsval *)  argv
count: (intN)  argc
result: (jsval *)  outResult 

Reimplemented from OOScript.

Definition at line 55 of file OOJSScript.m.

394 :(jsid)methodID
395 inContext:(JSContext *)context
396 withArguments:(jsval *)argv count:(intN)argc
397 result:(jsval *)outResult
398{
399 NSParameterAssert(name != NULL && (argv != NULL || argc == 0) && context != NULL && JS_IsInRequest(context));
400 if (_jsSelf == NULL) return NO;
401
402 JSObject *root = NULL;
403 BOOL OK = NO;
404 jsval method;
405 jsval ignoredResult = JSVAL_VOID;
406
407 if (outResult == NULL) outResult = &ignoredResult;
408 OOJSAddGCObjectRoot(context, &root, "OOJSScript method root");
409
410 if (EXPECT(JS_GetMethodById(context, _jsSelf, methodID, &root, &method) && !JSVAL_IS_VOID(method)))
411 {
412#ifndef NDEBUG
413 if (JS_IsExceptionPending(context))
414 {
415 OOLog(@"script.internalBug", @"Exception pending on context before calling method in %s, clearing. This is an internal error, please report it.", __PRETTY_FUNCTION__);
416 JS_ClearPendingException(context);
417 }
418
419 OOLog(@"script.javaScript.call", @"Calling [%@].%@()", [self name], OOStringFromJSID(methodID));
420 OOLogIndentIf(@"script.javaScript.call");
421#endif
422
423 // Push self on stack of running scripts.
424 RunningStack stackElement =
425 {
427 .current = self
428 };
429 sRunningStack = &stackElement;
430
431 // Call the method.
433 OK = JS_CallFunctionValue(context, _jsSelf, method, argc, argv, outResult);
435
436 if (JS_IsExceptionPending(context))
437 {
438 JS_ReportPendingException(context);
439 OK = NO;
440 }
441
442 // Pop running scripts stack
443 sRunningStack = stackElement.back;
444
445#ifndef NDEBUG
446 OOLogOutdentIf(@"script.javaScript.call");
447#endif
448 }
449
450 JS_RemoveObjectRoot(context, &root);
451
452 return OK;
453}
#define EXPECT(x)
#define OOJSStopTimeLimiter()
#define OOJSStartTimeLimiter()
static RunningStack * sRunningStack
Definition OOJSScript.m:60
#define JS_IsInRequest(context)
NSString * OOStringFromJSID(jsid propID)
#define OOJSAddGCObjectRoot(context, root, name)
#define OOLogOutdentIf(class)
Definition OOLogging.h:102
#define OOLog(class, format,...)
Definition OOLogging.h:88
#define OOLogIndentIf(class)
Definition OOLogging.h:101
unsigned count
JSObject * _jsSelf
Definition OOJSScript.h:35
NSString * name
Definition OOJSScript.h:37
RunningStack * back
Definition OOJSScript.m:54
OOJSScript * current
Definition OOJSScript.m:55

◆ currentlyRunningScript

+ (OOJSScript *) currentlyRunningScript

Definition at line 55 of file OOJSScript.m.

339{
340 if (sRunningStack == NULL) return NULL;
341 return sRunningStack->current;
342}

Referenced by OOJSGuiScreenKeyDefinition::callback, OOJSInterfaceDefinition::callback, OOJSPopulatorDefinition::callback, MissionRunScreen(), MissionSetInstructionsInternal(), ReportJSError(), SystemInfoSetPropertyMethod(), SystemInfoStaticSetInterstellarProperty(), and SystemSetProperty().

+ Here is the caller graph for this function:

◆ dealloc

- (void) dealloc
implementation

Definition at line 55 of file OOJSScript.m.

286{
287 [[NSNotificationCenter defaultCenter] removeObserver:self
288 name:kOOJavaScriptEngineWillResetNotification
290
291 DESTROY(name);
295
296 if (_jsSelf != NULL)
297 {
298 JSContext *context = OOJSAcquireContext();
299
300 OOJSObjectWrapperFinalize(context, _jsSelf); // Release weakref to self
301 JS_RemoveObjectRoot(context, &_jsSelf); // Unroot jsSelf
302
303 OOJSRelinquishContext(context);
304 }
305
306 [weakSelf weakRefDrop];
307
308 [super dealloc];
309}
#define DESTROY(x)
Definition OOCocoa.h:75
void OOJSObjectWrapperFinalize(JSContext *context, JSObject *this)
OOINLINE JSContext * OOJSAcquireContext(void)
OOINLINE void OOJSRelinquishContext(JSContext *context)
NSString * version
Definition OOJSScript.h:39
NSString * description
Definition OOJSScript.h:38
NSString * filePath
Definition OOJSScript.h:40
OOJavaScriptEngine * sharedEngine()

◆ defaultPropertiesFromPath:

- (NSDictionary *) defaultPropertiesFromPath: (NSString *)  path
implementation

Provided by category OOJSScript(OOPrivate).

Definition at line 55 of file OOJSScript.m.

615 :(NSString *)path
616{
617 // remove file name, remove OXP subfolder, add manifest.plist
618 NSString *manifestPath = [[[path stringByDeletingLastPathComponent] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"manifest.plist"];
619 NSDictionary *manifest = OODictionaryFromFile(manifestPath);
620 NSMutableDictionary *properties = [NSMutableDictionary dictionaryWithCapacity:3];
621 /* __oolite.tmp.* is allocated for OXPs without manifests. Its
622 * values are meaningless and shouldn't be used here */
623 if (manifest != nil && ![[manifest oo_stringForKey:kOOManifestIdentifier] hasPrefix:@"__oolite.tmp."])
624 {
625 if ([manifest objectForKey:kOOManifestVersion] != nil)
626 {
627 [properties setObject:[manifest oo_stringForKey:kOOManifestVersion] forKey:@"version"];
628 }
629 if ([manifest objectForKey:kOOManifestIdentifier] != nil)
630 {
631 // used for system info
632 [properties setObject:[manifest oo_stringForKey:kOOManifestIdentifier] forKey:kLocalManifestProperty];
633 }
634 if ([manifest objectForKey:kOOManifestAuthor] != nil)
635 {
636 [properties setObject:[manifest oo_stringForKey:kOOManifestAuthor] forKey:@"author"];
637 }
638 if ([manifest objectForKey:kOOManifestLicense] != nil)
639 {
640 [properties setObject:[manifest oo_stringForKey:kOOManifestLicense] forKey:@"license"];
641 }
642 }
643 return properties;
644}
static NSString *const kOOManifestLicense
static NSString *const kOOManifestIdentifier
static NSString *const kOOManifestVersion
static NSString *const kOOManifestAuthor
NSDictionary * OODictionaryFromFile(NSString *path)
return nil

◆ defineProperty:named:

- (BOOL) defineProperty: (id)  value
named: (NSString *)  name 

Definition at line 55 of file OOJSScript.m.

516 :(id)value named:(NSString *)propName
517{
518 if (value == nil || propName == nil) return NO;
519 if (_jsSelf == NULL) return NO;
520
521 JSContext *context = OOJSAcquireContext();
522 BOOL result = [self defineProperty:value withID:OOJSIDFromString(propName) inContext:context];
523 OOJSRelinquishContext(context);
524
525 return result;
526}

◆ defineProperty:withID:inContext:

- (BOOL) defineProperty: (id)  value
withID: (jsid)  propID
inContext: (JSContext *)  context 

Definition at line 55 of file OOJSScript.m.

480 :(id)value withID:(jsid)propID inContext:(JSContext *)context
481{
482 NSParameterAssert(context != NULL && JS_IsInRequest(context));
483 if (_jsSelf == NULL) return NO;
484
485 jsval jsValue = OOJSValueFromNativeObject(context, value);
486 return JS_DefinePropertyById(context, _jsSelf, propID, jsValue, NULL, NULL, OOJS_PROP_READONLY);
487}
OOINLINE jsval OOJSValueFromNativeObject(JSContext *context, id object)
#define OOJS_PROP_READONLY

◆ descriptionComponents

- (NSString *) descriptionComponents
implementation

Reimplemented from OOScript.

Definition at line 55 of file OOJSScript.m.

319{
320 if (_jsSelf != NULL) return [super descriptionComponents];
321 else return @"invalid script";
322}

◆ initWithPath:properties:

- (id) initWithPath: (NSString *)  path
properties: (NSDictionary *)  properties 

Definition at line 55 of file OOJSScript.m.

118 :(NSString *)path properties:(NSDictionary *)properties
119{
120 JSContext *context = NULL;
121 NSString *problem = nil; // Acts as error flag.
122 JSScript *script = NULL;
123 JSObject *scriptObject = NULL;
124 jsval returnValue = JSVAL_VOID;
125 NSString *key = nil;
126 id property = nil;
127
128 self = [super init];
129 if (self == nil) problem = @"allocation failure";
130 else
131 {
132 context = OOJSAcquireContext();
133
134 if (JS_IsExceptionPending(context))
135 {
136 JS_ClearPendingException(context);
137 OOLogERR(@"script.javaScript.load.waitingException", @"Prior to loading script %@, there was a pending JavaScript exception, which has been cleared. This is an internal error, please report it.", path);
138 }
139
140 // Set up JS object
141 if (!problem)
142 {
143 _jsSelf = JS_NewObject(context, &sScriptClass, sScriptPrototype, NULL);
144 if (_jsSelf == NULL) problem = @"allocation failure";
145 }
146
147 if (!problem && !OOJSAddGCObjectRoot(context, &_jsSelf, "Script object"))
148 {
149 problem = @"could not add JavaScript root object";
150 }
151
152 if (!problem && !OOJSAddGCObjectRoot(context, &scriptObject, "Script GC holder"))
153 {
154 problem = @"could not add JavaScript root object";
155 }
156
157 if (!problem)
158 {
159 if (!JS_SetPrivate(context, _jsSelf, OOConsumeReference([self weakRetain])))
160 {
161 problem = @"could not set private backreference";
162 }
163 }
164
165 // Push self on stack of running scripts.
166 RunningStack stackElement =
167 {
169 .current = self
170 };
171 sRunningStack = &stackElement;
172
173 filePath = [path retain];
174
175 if (!problem)
176 {
177 OOLog(@"script.javaScript.willLoad", @"About to load JavaScript %@", path);
178 script = LoadScriptWithName(context, path, _jsSelf, &scriptObject, &problem);
179 }
180 OOLogIndentIf(@"script.javaScript.willLoad");
181
182 // Set default properties from manifest.plist
183 NSDictionary *defaultProperties = [self defaultPropertiesFromPath:path];
184 foreachkey (key, defaultProperties)
185 {
186 if ([key isKindOfClass:[NSString class]])
187 {
188 property = [defaultProperties objectForKey:key];
189 if ([key isEqualToString:kLocalManifestProperty])
190 {
191 // this must not be editable
192 [self defineProperty:property named:key];
193 }
194 else
195 {
196 // can be overwritten by script itself
197 [self setProperty:property named:key];
198 }
199 }
200 }
201
202 // Set properties. (read-only)
203 if (!problem && properties != nil)
204 {
205 foreachkey (key, properties)
206 {
207 if ([key isKindOfClass:[NSString class]])
208 {
209 property = [properties objectForKey:key];
210 [self defineProperty:property named:key];
211 }
212 }
213 }
214
215 /* Set initial name (in case of script error during initial run).
216 The "name" ivar is not set here, so the property can be fetched from JS
217 if we fail during setup. However, the "name" ivar is set later so that
218 the script object can't be renamed after the initial run. This could
219 probably also be achieved by fiddling with JS property attributes.
220 */
221 jsid nameID = OOJSID("name");
222 [self setProperty:[self scriptNameFromPath:path] withID:nameID inContext:context];
223
224 // Run the script (allowing it to set up the properties we need, as well as setting up those event handlers)
225 if (!problem)
226 {
228 if (!JS_ExecuteScript(context, _jsSelf, script, &returnValue))
229 {
230 problem = @"could not run script";
231 }
233
234 // We don't need the script any more - the event handlers hang around as long as the JS object exists.
235 JS_DestroyScript(context, script);
236 }
237
238 JS_RemoveObjectRoot(context, &scriptObject);
239
240 sRunningStack = stackElement.back;
241
242 if (!problem)
243 {
244 // Get display attributes from script
245 DESTROY(name);
246 name = [StrippedName([[self propertyWithID:nameID inContext:context] description]) copy];
247 if (name == nil)
248 {
249 name = [[self scriptNameFromPath:path] retain];
250 [self setProperty:name withID:nameID inContext:context];
251 }
252
253 version = [[[self propertyWithID:OOJSID("version") inContext:context] description] copy];
254 description = [[[self propertyWithID:OOJSID("description") inContext:context] description] copy];
255
256 OOLog(@"script.javaScript.load.success", @"Loaded JavaScript: %@ -- %@", [self displayName], description ? description : (NSString *)@"(no description)");
257 }
258
259 OOLogOutdentIf(@"script.javaScript.willLoad");
260
261 DESTROY(filePath); // Only used for error reporting during startup.
262 }
263
264 if (problem)
265 {
266 OOLog(@"script.javaScript.load.failed", @"***** Error loading JavaScript script %@ -- %@", path, problem);
267 JS_ReportPendingException(context);
268 DESTROY(self);
269 }
270
271 OOJSRelinquishContext(context);
272
273 if (self != nil)
274 {
275 [[NSNotificationCenter defaultCenter] addObserver:self
276 selector:@selector(javaScriptEngineWillReset:)
277 name:kOOJavaScriptEngineWillResetNotification
279 }
280
281 return self;
282}
#define foreachkey(VAR, DICT)
Definition OOCocoa.h:353
id OOConsumeReference(id OO_NS_CONSUMED value)
Definition OOCocoa.m:93
#define kOOJSLongTimeLimit
#define OOJSStartTimeLimiterWithTimeLimit(limit)
#define OOJSID(str)
Definition OOJSPropID.h:38
static NSString *const kLocalManifestProperty
Definition OOJSScript.h:29
static JSObject * sScriptPrototype
Definition OOJSScript.m:59
static JSClass sScriptClass
Definition OOJSScript.m:78
static JSScript * LoadScriptWithName(JSContext *context, NSString *path, JSObject *object, JSObject **outScriptObject, NSString **outErrorMessage)
Definition OOJSScript.m:697
#define OOLogERR(class, format,...)
Definition OOLogging.h:112
NSString * displayName()
Definition OOScript.m:276

◆ javaScriptEngineWillReset:

- (void) javaScriptEngineWillReset: (NSNotification *)  notification
implementation

Definition at line 55 of file OOJSScript.m.

325 :(NSNotification *)notification
326{
327 // All scripts become invalid when the JS engine resets.
328 if (_jsSelf != NULL)
329 {
330 _jsSelf = NULL;
331 JSContext *context = OOJSAcquireContext();
332 JS_RemoveObjectRoot(context, &_jsSelf);
333 OOJSRelinquishContext(context);
334 }
335}

◆ oo_jsClassName

- (NSString *) oo_jsClassName
implementation

Definition at line 55 of file OOJSScript.m.

313{
314 return @"Script";
315}

◆ oo_jsValueInContext:

- (jsval) oo_jsValueInContext: (JSContext *)  context
implementation

Definition at line 55 of file OOJSScript.m.

529 :(JSContext *)context
530{
531 if (_jsSelf == NULL) return JSVAL_VOID;
532 return OBJECT_TO_JSVAL(_jsSelf);
533}

◆ popScript:

+ (void) popScript: (OOJSScript *)  script

Definition at line 55 of file OOJSScript.m.

549 :(OOJSScript *)script
550{
551 RunningStack *element = NULL;
552
553 assert(sRunningStack->current == script);
554
555 element = sRunningStack;
557 free(element);
558}

Referenced by MissionRunCallback().

+ Here is the caller graph for this function:

◆ propertyNamed:

- (id) propertyNamed: (NSString *)  name

Definition at line 55 of file OOJSScript.m.

490 :(NSString *)propName
491{
492 if (propName == nil) return nil;
493 if (_jsSelf == NULL) return nil;
494
495 JSContext *context = OOJSAcquireContext();
496 id result = [self propertyWithID:OOJSIDFromString(propName) inContext:context];
497 OOJSRelinquishContext(context);
498
499 return result;
500}

Referenced by SystemInfoSetPropertyMethod(), SystemInfoStaticSetInterstellarProperty(), and SystemSetProperty().

+ Here is the caller graph for this function:

◆ propertyWithID:inContext:

- (id) propertyWithID: (jsid)  propID
inContext: (JSContext *)  context 

Definition at line 55 of file OOJSScript.m.

456 :(jsid)propID inContext:(JSContext *)context
457{
458 NSParameterAssert(context != NULL && JS_IsInRequest(context));
459 if (_jsSelf == NULL) return nil;
460
461 jsval jsValue = JSVAL_VOID;
462 if (JS_GetPropertyById(context, _jsSelf, propID, &jsValue))
463 {
464 return OOJSNativeObjectFromJSValue(context, jsValue);
465 }
466 return nil;
467}
id OOJSNativeObjectFromJSValue(JSContext *context, jsval value)

◆ pushScript:

+ (void) pushScript: (OOJSScript *)  script

Definition at line 55 of file OOJSScript.m.

536 :(OOJSScript *)script
537{
538 RunningStack *element = NULL;
539
540 element = malloc(sizeof *element);
541 if (element == NULL) exit(EXIT_FAILURE);
542
543 element->back = sRunningStack;
544 element->current = script;
545 sRunningStack = element;
546}

Referenced by MissionRunCallback().

+ Here is the caller graph for this function:

◆ runWithTarget:

- (void) runWithTarget: (Entity *)  target
implementation

Reimplemented from OOScript.

Definition at line 55 of file OOJSScript.m.

388 :(Entity *)target
389{
390
391}

◆ scriptDescription

- (NSString *) scriptDescription
implementation

Reimplemented from OOScript.

Definition at line 55 of file OOJSScript.m.

377{
378 return description;
379}

◆ scriptNameFromPath:

- (NSString *) scriptNameFromPath: (NSString *)  path
implementation

Provided by category OOJSScript(OOPrivate).

Definition at line 55 of file OOJSScript.m.

581 :(NSString *)path
582{
583 NSString *lastComponent = nil;
584 NSString *truncatedPath = nil;
585 NSString *theName = nil;
586
587 if (path == nil) theName = [NSString stringWithFormat:@"%p", self];
588 else
589 {
590 lastComponent = [path lastPathComponent];
591 if (![lastComponent hasPrefix:@"script."]) theName = lastComponent;
592 else
593 {
594 truncatedPath = [path stringByDeletingLastPathComponent];
595 if (NSOrderedSame == [[truncatedPath lastPathComponent] caseInsensitiveCompare:@"Config"])
596 {
597 truncatedPath = [truncatedPath stringByDeletingLastPathComponent];
598 }
599 if (NSOrderedSame == [[truncatedPath pathExtension] caseInsensitiveCompare:@"oxp"])
600 {
601 truncatedPath = [truncatedPath stringByDeletingPathExtension];
602 }
603
604 lastComponent = [truncatedPath lastPathComponent];
605 theName = lastComponent;
606 }
607 }
608
609 if (0 == [theName length]) theName = path;
610
611 return StrippedName([theName stringByAppendingString:@".anon-script"]);
612}
static NSString * StrippedName(NSString *string)
Definition OOJSScript.m:816

◆ scriptStack

+ (NSArray *) scriptStack

Definition at line 55 of file OOJSScript.m.

346{
347 NSMutableArray *result = nil;
348
349 result = [NSMutableArray array];
351 return result;
352}
static void AddStackToArrayReversed(NSMutableArray *array, RunningStack *stack)
Definition OOJSScript.m:687

◆ scriptWithPath:properties:

+ (id) scriptWithPath: (NSString *)  path
properties: (NSDictionary *)  properties 

Definition at line 55 of file OOJSScript.m.

112 :(NSString *)path properties:(NSDictionary *)properties
113{
114 return [[[self alloc] initWithPath:path properties:properties] autorelease];
115}

Referenced by OOScript::descriptionComponents.

+ Here is the caller graph for this function:

◆ setProperty:named:

- (BOOL) setProperty: (id)  value
named: (NSString *)  name 

Definition at line 55 of file OOJSScript.m.

503 :(id)value named:(NSString *)propName
504{
505 if (value == nil || propName == nil) return NO;
506 if (_jsSelf == NULL) return NO;
507
508 JSContext *context = OOJSAcquireContext();
509 BOOL result = [self setProperty:value withID:OOJSIDFromString(propName) inContext:context];
510 OOJSRelinquishContext(context);
511
512 return result;
513}

◆ setProperty:withID:inContext:

- (BOOL) setProperty: (id)  value
withID: (jsid)  propID
inContext: (JSContext *)  context 

Definition at line 55 of file OOJSScript.m.

470 :(id)value withID:(jsid)propID inContext:(JSContext *)context
471{
472 NSParameterAssert(context != NULL && JS_IsInRequest(context));
473 if (_jsSelf == NULL) return NO;
474
475 jsval jsValue = OOJSValueFromNativeObject(context, value);
476 return JS_SetPropertyById(context, _jsSelf, propID, &jsValue);
477}

◆ weakRefDied:

- (void) weakRefDied: (OOWeakReference *)  weakRef
implementation

Reimplemented from <OOWeakReferenceSupport>.

Definition at line 55 of file OOJSScript.m.

362 :(OOWeakReference *)weakRef
363{
364 if (weakRef == weakSelf) weakSelf = nil;
365}
OOWeakReference * weakSelf
Definition OOJSScript.h:42

◆ weakRetain

- (id) weakRetain
implementation

Definition at line 55 of file OOJSScript.m.

356{
358 return [weakSelf retain];
359}
id weakRefWithObject:(id< OOWeakReferenceSupport > object)

Referenced by OOJSGuiScreenKeyDefinition::callback, OOJSInterfaceDefinition::callback, OOJSPopulatorDefinition::callback, and ReportJSError().

+ Here is the caller graph for this function:

Member Data Documentation

◆ _jsSelf

- (JSObject*) _jsSelf
private

Definition at line 35 of file OOJSScript.h.

◆ description

- (NSString*) description
private

Definition at line 38 of file OOJSScript.h.

◆ filePath

- (NSString*) filePath
private

Definition at line 40 of file OOJSScript.h.

◆ name

- (NSString *) name
private

Definition at line 37 of file OOJSScript.h.

Referenced by MissionSetInstructionsInternal().

◆ version

- (NSString *) version
private

Definition at line 39 of file OOJSScript.h.

◆ weakSelf

- (OOWeakReference*) weakSelf
private

Definition at line 42 of file OOJSScript.h.


The documentation for this class was generated from the following files: