Made JS missionVariables (and script converter) stricter about what they consider to be numbers. Stuff like 2HRS_TO_ZERO are no longer converted to numbers when they shouldn't be. Deleted toos/ScriptCompiler since we no longer support .oos scripts.
git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@1810 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
parent
e58f903a79
commit
2158de017c
@ -26,7 +26,7 @@ endif
|
||||
OBJC_PROGRAM_NAME = oolite
|
||||
|
||||
oolite_C_FILES = legacy_random.c strlcpy.c OOTCPStreamDecoder.c
|
||||
oolite_OBJC_FILES = OOCocoa.m Comparison.m AI.m DustEntity.m Entity.m GameController.m GuiDisplayGen.m HeadUpDisplay.m main.m MyOpenGLView.m OpenGLSprite.m ParticleEntity.m PlanetEntity.m PlayerEntityLegacyScriptEngine.m PlayerEntityContracts.m PlayerEntityControls.m PlayerEntityLoadSave.m PlayerEntitySound.m PlayerEntity.m ResourceManager.m RingEntity.m ShipEntityAI.m ShipEntity.m SkyEntity.m StationEntity.m Universe.m NSFileManagerOOExtensions.m JoystickHandler.m PlayerEntityStickMapper.m OOCharacter.m OOTrumble.m WormholeEntity.m NSScannerOOExtensions.m OOXMLExtensions.m NSMutableDictionaryOOExtensions.m Geometry.m Octree.m CollisionRegion.m OOColor.m OOLogging.m OOCacheManager.m OOCache.m OOStringParsing.m OOCollectionExtractors.m OOVector.m OOMatrix.m OOQuaternion.m OOVoxel.m OOTriangle.m OOPListParsing.m OOFastArithmetic.m OOTextureScaling.m OOConstToString.m OOScript.m OOJSScript.m OOJavaScriptEngine.m OOPListScript.m NSStringOOExtensions.m PlayerEntityScriptMethods.m OOWeakReference.m OOJSEntity.m EntityOOJavaScriptExtensions.m OOJSQuaternion.m OOMaterial.m OOShaderMaterial.m OOShaderProgram.m OOShaderUniform.m OOTexture.m OONullTexture.m OOTextureLoader.m OOPNGTextureLoader.m OOOpenGLExtensionManager.m OOBasicMaterial.m OOSingleTextureMaterial.m OOCPUInfo.m OOSelfDrawingEntity.m OOEntityWithDrawable.m OODrawable.m OOJSVector.m OOMesh.m OOOpenGL.m OOGraphicsResetManager.m OOProbabilisticTextureManager.m OODebugGLDrawing.m OOShaderUniformMethodType.m OOAsyncQueue.m TextureStore.m OOOXPVerifier.m OOOXPVerifierStage.m OOFileScannerVerifierStage.m OOCheckRequiresPListVerifierStage.m OOCheckDemoShipsPListVerifierStage.m OOCheckEquipmentPListVerifierStage.m OOTextureVerifierStage.m OOModelVerifierStage.m OOCheckShipDataPListVerifierStage.m OOPListSchemaVerifier.m OOJSShip.m OOJSPlayer.m OOJSCall.m OOJSStation.m OOJSSystem.m OOLegacyEventHandlerScript.m OOJSOolite.m OORoleSet.m OOJSGlobal.m OOJSMissionVariables.m OOJSMission.m OOPriorityQueue.m OOScriptTimer.m OOJSTimer.m OOJSClock.m OODebugSupport.m OODebugMonitor.m OOJSConsole.m OODebugTCPConsoleClient.m OOTCPStreamDecoderAbstractionLayer.m OOEntityFilterPredicate.m OOJSPlanet.m OOJSWorldScripts.m OOJSSun.m NSThreadOOExtensions.m OOEncodingConverter.m OOJSSound.m OOJSSoundSource.m OOMusicController.m OOLogHeader.m OOJSSpecialFunctions.m OOSpatialReference.m OOSkyDrawable.m OOFilteringEnumerator.m OOSoundSourcePool.m ShipEntityScriptMethods.m OOShipRegistry.m OOProbabilitySet.m OOJSSystemInfo.m NSDictionaryOOExtensions.m OOEquipmentType.m OOCamera.m OOJSPlayerShip.m OOSDLSound.m OOSDLConcreteSound.m OOSoundSource.m OOSDLSoundMixer.m OOSDLSoundChannel.m OOBasicSoundReferencePoint.m SDLMusic.m OOLogOutputHandler.m OOJSEquipmentInfo.m
|
||||
oolite_OBJC_FILES = OOCocoa.m Comparison.m AI.m DustEntity.m Entity.m GameController.m GuiDisplayGen.m HeadUpDisplay.m main.m MyOpenGLView.m OpenGLSprite.m ParticleEntity.m PlanetEntity.m PlayerEntityLegacyScriptEngine.m PlayerEntityContracts.m PlayerEntityControls.m PlayerEntityLoadSave.m PlayerEntitySound.m PlayerEntity.m ResourceManager.m RingEntity.m ShipEntityAI.m ShipEntity.m SkyEntity.m StationEntity.m Universe.m NSFileManagerOOExtensions.m JoystickHandler.m PlayerEntityStickMapper.m OOCharacter.m OOTrumble.m WormholeEntity.m NSScannerOOExtensions.m OOXMLExtensions.m NSMutableDictionaryOOExtensions.m Geometry.m Octree.m CollisionRegion.m OOColor.m OOLogging.m OOCacheManager.m OOCache.m OOStringParsing.m OOCollectionExtractors.m OOVector.m OOMatrix.m OOQuaternion.m OOVoxel.m OOTriangle.m OOPListParsing.m OOFastArithmetic.m OOTextureScaling.m OOConstToString.m OOScript.m OOJSScript.m OOJavaScriptEngine.m OOPListScript.m NSStringOOExtensions.m PlayerEntityScriptMethods.m OOWeakReference.m OOJSEntity.m EntityOOJavaScriptExtensions.m OOJSQuaternion.m OOMaterial.m OOShaderMaterial.m OOShaderProgram.m OOShaderUniform.m OOTexture.m OONullTexture.m OOTextureLoader.m OOPNGTextureLoader.m OOOpenGLExtensionManager.m OOBasicMaterial.m OOSingleTextureMaterial.m OOCPUInfo.m OOSelfDrawingEntity.m OOEntityWithDrawable.m OODrawable.m OOJSVector.m OOMesh.m OOOpenGL.m OOGraphicsResetManager.m OOProbabilisticTextureManager.m OODebugGLDrawing.m OOShaderUniformMethodType.m OOAsyncQueue.m TextureStore.m OOOXPVerifier.m OOOXPVerifierStage.m OOFileScannerVerifierStage.m OOCheckRequiresPListVerifierStage.m OOCheckDemoShipsPListVerifierStage.m OOCheckEquipmentPListVerifierStage.m OOTextureVerifierStage.m OOModelVerifierStage.m OOCheckShipDataPListVerifierStage.m OOPListSchemaVerifier.m OOJSShip.m OOJSPlayer.m OOJSCall.m OOJSStation.m OOJSSystem.m OOLegacyEventHandlerScript.m OOJSOolite.m OORoleSet.m OOJSGlobal.m OOJSMissionVariables.m OOJSMission.m OOPriorityQueue.m OOScriptTimer.m OOJSTimer.m OOJSClock.m OODebugSupport.m OODebugMonitor.m OOJSConsole.m OODebugTCPConsoleClient.m OOTCPStreamDecoderAbstractionLayer.m OOEntityFilterPredicate.m OOJSPlanet.m OOJSWorldScripts.m OOJSSun.m NSThreadOOExtensions.m OOEncodingConverter.m OOJSSound.m OOJSSoundSource.m OOMusicController.m OOLogHeader.m OOJSSpecialFunctions.m OOSpatialReference.m OOSkyDrawable.m OOFilteringEnumerator.m OOSoundSourcePool.m ShipEntityScriptMethods.m OOShipRegistry.m OOProbabilitySet.m OOJSSystemInfo.m NSDictionaryOOExtensions.m OOEquipmentType.m OOCamera.m OOJSPlayerShip.m OOSDLSound.m OOSDLConcreteSound.m OOSoundSource.m OOSDLSoundMixer.m OOSDLSoundChannel.m OOBasicSoundReferencePoint.m SDLMusic.m OOLogOutputHandler.m OOJSEquipmentInfo.m OOIsNumberLiteral.m
|
||||
|
||||
include $(GNUSTEP_MAKEFILES)/objc.make
|
||||
include GNUmakefile.postamble
|
||||
|
@ -528,6 +528,8 @@
|
||||
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB813070E90D8E500A84923 /* OOLogOutputHandler.m */; };
|
||||
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB813080E90D8E500A84923 /* OOLogOutputHandler.h */; };
|
||||
1ABB688C0D044306008BE96D /* OOLoggingExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABB688B0D044306008BE96D /* OOLoggingExtended.h */; };
|
||||
1ABDBA3B0EB365D90086BC3D /* OOIsNumberLiteral.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABDBA390EB365D90086BC3D /* OOIsNumberLiteral.m */; };
|
||||
1ABDBA3C0EB365D90086BC3D /* OOIsNumberLiteral.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABDBA3A0EB365D90086BC3D /* OOIsNumberLiteral.h */; };
|
||||
1AC27A0F0EA7E9940054E5F0 /* OOJSEquipmentInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC27A0D0EA7E9940054E5F0 /* OOJSEquipmentInfo.h */; };
|
||||
1AC27A100EA7E9940054E5F0 /* OOJSEquipmentInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC27A0E0EA7E9940054E5F0 /* OOJSEquipmentInfo.m */; };
|
||||
1AC544FA0D4D217900C90E5B /* oolite-font.png in Copy Textures */ = {isa = PBXBuildFile; fileRef = 1AC544F90D4D217900C90E5B /* oolite-font.png */; };
|
||||
@ -1548,6 +1550,8 @@
|
||||
1AB813070E90D8E500A84923 /* OOLogOutputHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOLogOutputHandler.m; sourceTree = "<group>"; };
|
||||
1AB813080E90D8E500A84923 /* OOLogOutputHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOLogOutputHandler.h; sourceTree = "<group>"; };
|
||||
1ABB688B0D044306008BE96D /* OOLoggingExtended.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOLoggingExtended.h; sourceTree = "<group>"; };
|
||||
1ABDBA390EB365D90086BC3D /* OOIsNumberLiteral.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOIsNumberLiteral.m; sourceTree = "<group>"; };
|
||||
1ABDBA3A0EB365D90086BC3D /* OOIsNumberLiteral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOIsNumberLiteral.h; sourceTree = "<group>"; };
|
||||
1AC0E9460B974DC200C46994 /* GPL.TXT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GPL.TXT; sourceTree = "<group>"; };
|
||||
1AC0E9470B974DC200C46994 /* FAQ.TXT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FAQ.TXT; sourceTree = "<group>"; };
|
||||
1AC0E9480B974DC200C46994 /* ReadMe.rtfd */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; path = ReadMe.rtfd; sourceTree = "<group>"; };
|
||||
@ -2401,6 +2405,8 @@
|
||||
1A8A3BFB0B963F91007D20B8 /* Utilities */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1ABDBA390EB365D90086BC3D /* OOIsNumberLiteral.m */,
|
||||
1ABDBA3A0EB365D90086BC3D /* OOIsNumberLiteral.h */,
|
||||
1AB4AEB60D688AD9003076D6 /* OOLogHeader.h */,
|
||||
1AB4AEB70D688AD9003076D6 /* OOLogHeader.m */,
|
||||
25161107099544390037C2E1 /* OOXMLExtensions.h */,
|
||||
@ -2916,6 +2922,7 @@
|
||||
1AB812900E90179D00A84923 /* TextureStore.h in Headers */,
|
||||
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */,
|
||||
1AC27A0F0EA7E9940054E5F0 /* OOJSEquipmentInfo.h in Headers */,
|
||||
1ABDBA3C0EB365D90086BC3D /* OOIsNumberLiteral.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -3270,6 +3277,7 @@
|
||||
1AB8128F0E90179C00A84923 /* TextureStore.m in Sources */,
|
||||
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */,
|
||||
1AC27A100EA7E9940054E5F0 /* OOJSEquipmentInfo.m in Sources */,
|
||||
1ABDBA3B0EB365D90086BC3D /* OOIsNumberLiteral.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
50
src/Core/OOIsNumberLiteral.h
Normal file
50
src/Core/OOIsNumberLiteral.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
OOISNumberLiteral.h
|
||||
|
||||
Utility function to recognize certain number literals, corresponding to
|
||||
C-style decimal integer literals and floating point literals without
|
||||
trailing type suffixes.
|
||||
|
||||
|
||||
Copyright (C) 2008 Jens Ayton
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
|
||||
/* Recognise C-style decimal integer or float literals, without type suffix.
|
||||
More formally, it tests against the following grammar:
|
||||
|
||||
number ::= [<whitespace>] [<sign>] basicNumber [<exponent>] [<whitespace>]
|
||||
whitespace ::= <whitespaceChar> [<whitespace>]
|
||||
whitespaceChar ::= " " | "\t"
|
||||
sign ::= "+" | "-"
|
||||
basicNumber = integer [decimal] | decimal
|
||||
integer ::= <digit> [<integer>]
|
||||
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
|
||||
decimal ::= <decimalPoint> <integer>
|
||||
decimalPoint ::= "."
|
||||
exponent = <e> [<sign>] <integer>
|
||||
e ::= "e" | "E"
|
||||
|
||||
if allowSpaces = NO, the [<whitespace>] terms are excluded.
|
||||
*/
|
||||
BOOL OOIsNumberLiteral(NSString *string, BOOL allowSpaces);
|
129
src/Core/OOIsNumberLiteral.m
Normal file
129
src/Core/OOIsNumberLiteral.m
Normal file
@ -0,0 +1,129 @@
|
||||
/*
|
||||
OOISNumberLiteral.m
|
||||
|
||||
Copyright (C) 2008 Jens Ayton
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#import "OOIsNumberLiteral.h"
|
||||
|
||||
|
||||
#if 0
|
||||
#define FAIL(s) do { NSLog(@"OOIsNumberLiteral failed for \"%@\": %@.", string, @s); return NO; } while (0)
|
||||
#else
|
||||
#define FAIL(s) do { return NO; } while (0)
|
||||
#endif
|
||||
|
||||
|
||||
BOOL OOIsNumberLiteral(NSString *string, BOOL allowSpaces)
|
||||
{
|
||||
BOOL leadingSpace = allowSpaces,
|
||||
trailingSpace = NO,
|
||||
allowSign = YES,
|
||||
allowE = NO,
|
||||
hadE = NO,
|
||||
hadExp = NO,
|
||||
allowDec = YES,
|
||||
hadNumber = NO;
|
||||
unsigned i, count;
|
||||
|
||||
if (string == nil) return NO;
|
||||
|
||||
count = [string length];
|
||||
for (i = 0; i != count; ++i)
|
||||
{
|
||||
switch ([string characterAtIndex:i])
|
||||
{
|
||||
// <digit>
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
leadingSpace = NO;
|
||||
if (trailingSpace) FAIL("Digit after trailing whitespace");
|
||||
if (!hadE) allowE = YES;
|
||||
else hadExp = YES;
|
||||
allowSign = NO;
|
||||
hadNumber = YES;
|
||||
break;
|
||||
|
||||
// <whitespaceChar>
|
||||
case ' ':
|
||||
case '\t':
|
||||
if (leadingSpace || trailingSpace) break;
|
||||
if (hadNumber && allowSpaces)
|
||||
{
|
||||
trailingSpace = YES;
|
||||
allowSign = allowE = allowDec = NO;
|
||||
break;
|
||||
}
|
||||
FAIL("Space in unpermitted position");
|
||||
|
||||
// <sign>
|
||||
case '-':
|
||||
case '+':
|
||||
leadingSpace = NO;
|
||||
if (allowSign)
|
||||
{
|
||||
allowSign = NO;
|
||||
break;
|
||||
}
|
||||
FAIL("Sign (+ or -) in unpermitted position");
|
||||
|
||||
// <decimalPoint>
|
||||
case '.':
|
||||
leadingSpace = NO;
|
||||
if (allowDec)
|
||||
{
|
||||
allowDec = NO;
|
||||
continue;
|
||||
}
|
||||
FAIL("Sign (+ or -) in unpermitted position");
|
||||
|
||||
// <e>
|
||||
case 'e':
|
||||
case 'E':
|
||||
leadingSpace = NO;
|
||||
if (allowE)
|
||||
{
|
||||
allowE = NO;
|
||||
allowSign = YES;
|
||||
allowDec = NO;
|
||||
hadE = YES;
|
||||
continue;
|
||||
}
|
||||
FAIL("E in unpermitted position");
|
||||
|
||||
default:
|
||||
FAIL ("Unpermitted character");
|
||||
}
|
||||
}
|
||||
|
||||
if (hadE && !hadExp) FAIL("E with no exponent");
|
||||
if (!hadNumber) FAIL("No digits in string");
|
||||
|
||||
return YES;
|
||||
}
|
@ -27,6 +27,7 @@ MA 02110-1301, USA.
|
||||
|
||||
#import "OOJSMissionVariables.h"
|
||||
#import "OOJavaScriptEngine.h"
|
||||
#import "OOIsNumberLiteral.h"
|
||||
|
||||
#import "OOJSPlayer.h"
|
||||
|
||||
@ -89,22 +90,7 @@ static JSBool MissionVariablesGetProperty(JSContext *context, JSObject *this, js
|
||||
*outValue = JSVAL_VOID;
|
||||
if ([value isKindOfClass:[NSString class]]) // Currently there should only be strings, but we may want to change this.
|
||||
{
|
||||
/* The point of this code is to try and tell the JS interpreter to treat numeric strings
|
||||
as numbers where possible so that standard arithmetic works as you'd expect rather than
|
||||
1+1 == "11". So a JSVAL_DOUBLE is returned if possible, otherwise a JSVAL_STRING is returned.
|
||||
*/
|
||||
|
||||
BOOL isNumber = NO;
|
||||
double dVal;
|
||||
|
||||
dVal = [value doubleValue];
|
||||
if (dVal != 0) isNumber = YES;
|
||||
else
|
||||
{
|
||||
NSCharacterSet *notZeroSet = [[NSCharacterSet characterSetWithCharactersInString:@"-0. "] invertedSet];
|
||||
if ([value rangeOfCharacterFromSet:notZeroSet].location == NSNotFound) isNumber = YES;
|
||||
}
|
||||
if (isNumber)
|
||||
if (OOIsNumberLiteral(value, YES))
|
||||
{
|
||||
BOOL OK = JS_NewDoubleValue(context, [value doubleValue], outValue);
|
||||
if (!OK) *outValue = JSVAL_VOID;
|
||||
|
Loading…
x
Reference in New Issue
Block a user