The Labs \ Source Viewer \ SSCLI \ Microsoft.JScript \ NumberObject

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace Microsoft.JScript
  16. {
  17.    
  18.     using System;
  19.    
  20.     public class NumberObject : JSObject
  21.     {
  22.         internal Type baseType;
  23.         internal object value;
  24.         private bool implicitWrapper;
  25.        
  26.         protected NumberObject(ScriptObject parent, object value) : base(parent)
  27.         {
  28.             this.baseType = Globals.TypeRefs.ToReferenceContext(value.GetType());
  29.             this.value = value;
  30.             this.noExpando = false;
  31.             this.implicitWrapper = false;
  32.         }
  33.        
  34.         internal NumberObject(ScriptObject parent, object value, bool implicitWrapper) : base(parent, typeof(NumberObject))
  35.         {
  36.             this.baseType = Globals.TypeRefs.ToReferenceContext(value.GetType());
  37.             this.value = value;
  38.             this.noExpando = implicitWrapper;
  39.             this.implicitWrapper = implicitWrapper;
  40.         }
  41.        
  42.         internal NumberObject(ScriptObject parent, Type baseType) : base(parent)
  43.         {
  44.             this.baseType = baseType;
  45.             this.value = 0.0;
  46.             this.noExpando = false;
  47.         }
  48.        
  49.         internal override object GetDefaultValue(PreferredType preferred_type)
  50.         {
  51.             if (this.GetParent() is LenientNumberPrototype)
  52.                 return base.GetDefaultValue(preferred_type);
  53.             if (preferred_type == PreferredType.String) {
  54.                 if (!this.noExpando) {
  55.                     object field = this.NameTable["toString"];
  56.                     if (field != null)
  57.                         return base.GetDefaultValue(preferred_type);
  58.                 }
  59.                 return Convert.ToString(this.value);
  60.             }
  61.             else if (preferred_type == PreferredType.LocaleString) {
  62.                 return base.GetDefaultValue(preferred_type);
  63.             }
  64.             else {
  65.                 if (!this.noExpando) {
  66.                     object field = this.NameTable["valueOf"];
  67.                     if (field == null && preferred_type == PreferredType.Either)
  68.                         field = this.NameTable["toString"];
  69.                     if (field != null)
  70.                         return base.GetDefaultValue(preferred_type);
  71.                 }
  72.                 return this.value;
  73.             }
  74.         }
  75.        
  76.         internal override string GetClassName()
  77.         {
  78.             return "Number";
  79.         }
  80.        
  81.         public new Type GetType()
  82.         {
  83.             return this.implicitWrapper ? this.baseType : Typeob.NumberObject;
  84.         }
  85.     }
  86.    
  87. }

Developer Fusion