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
|
OBJC_PROGRAM_NAME = oolite
|
||||||
|
|
||||||
oolite_C_FILES = legacy_random.c strlcpy.c OOTCPStreamDecoder.c
|
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 $(GNUSTEP_MAKEFILES)/objc.make
|
||||||
include GNUmakefile.postamble
|
include GNUmakefile.postamble
|
||||||
|
@ -528,6 +528,8 @@
|
|||||||
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB813070E90D8E500A84923 /* OOLogOutputHandler.m */; };
|
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB813070E90D8E500A84923 /* OOLogOutputHandler.m */; };
|
||||||
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB813080E90D8E500A84923 /* OOLogOutputHandler.h */; };
|
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB813080E90D8E500A84923 /* OOLogOutputHandler.h */; };
|
||||||
1ABB688C0D044306008BE96D /* OOLoggingExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABB688B0D044306008BE96D /* OOLoggingExtended.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 */; };
|
1AC27A0F0EA7E9940054E5F0 /* OOJSEquipmentInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC27A0D0EA7E9940054E5F0 /* OOJSEquipmentInfo.h */; };
|
||||||
1AC27A100EA7E9940054E5F0 /* OOJSEquipmentInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC27A0E0EA7E9940054E5F0 /* OOJSEquipmentInfo.m */; };
|
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 */; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
1AC0E9480B974DC200C46994 /* ReadMe.rtfd */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; path = ReadMe.rtfd; sourceTree = "<group>"; };
|
||||||
@ -2401,6 +2405,8 @@
|
|||||||
1A8A3BFB0B963F91007D20B8 /* Utilities */ = {
|
1A8A3BFB0B963F91007D20B8 /* Utilities */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
1ABDBA390EB365D90086BC3D /* OOIsNumberLiteral.m */,
|
||||||
|
1ABDBA3A0EB365D90086BC3D /* OOIsNumberLiteral.h */,
|
||||||
1AB4AEB60D688AD9003076D6 /* OOLogHeader.h */,
|
1AB4AEB60D688AD9003076D6 /* OOLogHeader.h */,
|
||||||
1AB4AEB70D688AD9003076D6 /* OOLogHeader.m */,
|
1AB4AEB70D688AD9003076D6 /* OOLogHeader.m */,
|
||||||
25161107099544390037C2E1 /* OOXMLExtensions.h */,
|
25161107099544390037C2E1 /* OOXMLExtensions.h */,
|
||||||
@ -2916,6 +2922,7 @@
|
|||||||
1AB812900E90179D00A84923 /* TextureStore.h in Headers */,
|
1AB812900E90179D00A84923 /* TextureStore.h in Headers */,
|
||||||
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */,
|
1AB8130A0E90D8E500A84923 /* OOLogOutputHandler.h in Headers */,
|
||||||
1AC27A0F0EA7E9940054E5F0 /* OOJSEquipmentInfo.h in Headers */,
|
1AC27A0F0EA7E9940054E5F0 /* OOJSEquipmentInfo.h in Headers */,
|
||||||
|
1ABDBA3C0EB365D90086BC3D /* OOIsNumberLiteral.h in Headers */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -3270,6 +3277,7 @@
|
|||||||
1AB8128F0E90179C00A84923 /* TextureStore.m in Sources */,
|
1AB8128F0E90179C00A84923 /* TextureStore.m in Sources */,
|
||||||
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */,
|
1AB813090E90D8E500A84923 /* OOLogOutputHandler.m in Sources */,
|
||||||
1AC27A100EA7E9940054E5F0 /* OOJSEquipmentInfo.m in Sources */,
|
1AC27A100EA7E9940054E5F0 /* OOJSEquipmentInfo.m in Sources */,
|
||||||
|
1ABDBA3B0EB365D90086BC3D /* OOIsNumberLiteral.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
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 "OOJSMissionVariables.h"
|
||||||
#import "OOJavaScriptEngine.h"
|
#import "OOJavaScriptEngine.h"
|
||||||
|
#import "OOIsNumberLiteral.h"
|
||||||
|
|
||||||
#import "OOJSPlayer.h"
|
#import "OOJSPlayer.h"
|
||||||
|
|
||||||
@ -89,22 +90,7 @@ static JSBool MissionVariablesGetProperty(JSContext *context, JSObject *this, js
|
|||||||
*outValue = JSVAL_VOID;
|
*outValue = JSVAL_VOID;
|
||||||
if ([value isKindOfClass:[NSString class]]) // Currently there should only be strings, but we may want to change this.
|
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
|
if (OOIsNumberLiteral(value, YES))
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
BOOL OK = JS_NewDoubleValue(context, [value doubleValue], outValue);
|
BOOL OK = JS_NewDoubleValue(context, [value doubleValue], outValue);
|
||||||
if (!OK) *outValue = JSVAL_VOID;
|
if (!OK) *outValue = JSVAL_VOID;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user