internal static string AddOperator(ScriptProcessor processor, SObject left, SObject right) { if (left is SString || right is SString) { string strLeft, strRight; if (left is SString) strLeft = ((SString)left).Value; else strLeft = left.ToString(processor).Value; if (right is SString) strRight = ((SString)right).Value; else strRight = right.ToString(processor).Value; return strLeft + strRight; } else { var numbers = GetNumericOperatorParameters(processor, left, right); return SNumber.ConvertToScriptString(numbers.Item1 + numbers.Item2); } }
internal override void SetMember(ScriptProcessor processor, SObject accessor, bool isIndexer, SObject value) { string memberName; if (accessor is SString) memberName = ((SString)accessor).Value; else memberName = accessor.ToString(processor).Value; if (_context.IsVariable(memberName)) { _context.GetVariable(memberName).Data = value; } else { processor.ErrorHandler.ThrowError(ErrorType.ReferenceError, ErrorHandler.MESSAGE_REFERENCE_NOT_DEFINED, new object[] { memberName }); } }
internal override SObject GetMember(ScriptProcessor processor, SObject accessor, bool isIndexer) { if (isIndexer && accessor.TypeOf() == LITERAL_TYPE_NUMBER) { if (IndexerGetFunction != null) { return IndexerGetFunction.Call(processor, this, this, new SObject[] { accessor }); } else { return processor.Undefined; } } string memberName; if (accessor is SString) memberName = ((SString)accessor).Value; else memberName = accessor.ToString(processor).Value; if (Members.ContainsKey(memberName)) { return Members[memberName]; } else if (Prototype != null && Prototype.HasMember(processor, memberName)) { return Prototype.GetMember(processor, accessor, isIndexer); } else if (SuperClass != null) { return SuperClass.GetMember(processor, accessor, isIndexer); } return processor.Undefined; }
internal override void SetMember(ScriptProcessor processor, SObject accessor, bool isIndexer, SObject value) { if (isIndexer && accessor.TypeOf() == LITERAL_TYPE_NUMBER) { if (IndexerSetFunction != null) { IndexerSetFunction.Call(processor, this, this, new SObject[] { accessor, value }); } } string memberName; if (accessor is SString) memberName = ((SString)accessor).Value; else memberName = accessor.ToString(processor).Value; if (Members.ContainsKey(memberName)) { Members[memberName].Data = value; } else if (Prototype != null && Prototype.HasMember(processor, memberName) && !Prototype.IsStaticMember(memberName)) { // This is the case when new members got added to the prototype, and we haven't copied them over to the instance yet. // So we do that now, and then set the value of that member: AddMember(memberName, value); } else if (SuperClass != null) { SuperClass.SetMember(processor, accessor, isIndexer, value); } }