/* * GDevelop JS Platform * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved. * This project is released under the MIT License. */ /** * A Variable is an object storing a value (number or a string) or children variables. * * @constructor * @namespace gdjs * @class Variable * @param varData optional object used to initialize the variable. */ gdjs.Variable = function(varData) { this._value = 0; this._str = ""; this._numberDirty = false; this._stringDirty = true; this._isStructure = false; this._children = {}; //TODO: Use a hashtable and avoid de/allocations. this._undefinedInContainer = false; if ( varData !== undefined ) { if ( varData.value !== undefined ) { //Variable is a string or a number var initialValue = varData.value; //Try to guess the type of the value, as GD has no way ( for now ) to specify //the type of a variable. var valueWhenConsideredAsNumber = parseFloat(initialValue, 10); if(valueWhenConsideredAsNumber === valueWhenConsideredAsNumber && valueWhenConsideredAsNumber.toString() === initialValue) { //"Since NaN is the only JavaScript value that is treated as unequal to itself, you can always test if a value is NaN by checking it for equality to itself" this._value = parseFloat(initialValue, 10); } else { //We have a string (Maybe empty). if ( initialValue.length === 0 ) this._value = 0; else { this._str = initialValue; this._numberDirty = true; this._stringDirty = false; } } } else { //Variable is a structure this._isStructure = true; if (varData.children !== undefined) { for(var i = 0, len = varData.children.length;i