dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnetlib/JScript/Jsc Equality.cs,1.1,1.2 In.c


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnetlib/JScript/Jsc Equality.cs,1.1,1.2 In.cs,1.1,1.2 StrictEquality.cs,1.1,1.2
Date: Fri, 17 Jan 2003 01:34:50 -0500

Update of /cvsroot/dotgnu-pnet/pnetlib/JScript/Jsc
In directory subversions:/tmp/cvs-serv29381/JScript/Jsc

Modified Files:
        Equality.cs In.cs StrictEquality.cs 
Log Message:


Implement evaluation logic for JScript expressions.


Index: Equality.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Jsc/Equality.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** Equality.cs 13 Jan 2003 10:53:19 -0000      1.1
--- Equality.cs 17 Jan 2003 06:34:47 -0000      1.2
***************
*** 39,44 ****
        public bool EvaluateEquality(Object v1, Object v2)
                        {
!                               // TODO
!                               return false;
                        }
  
--- 39,43 ----
        public bool EvaluateEquality(Object v1, Object v2)
                        {
!                               return JScriptEquals(v1, v2);
                        }
  
***************
*** 46,50 ****
        public static bool JScriptEquals(Object v1, Object v2)
                        {
!                               // TODO
                                return false;
                        }
--- 45,111 ----
        public static bool JScriptEquals(Object v1, Object v2)
                        {
!                               // Handle the simple cases first.
!                               if(v1 is String && v2 is String)
!                               {
!                                       return ((String)v1) == ((String)v2);
!                               }
!                               else if(v1 is double && v2 is double)
!                               {
!                                       return ((double)v1) == ((double)v2);
!                               }
!                               else if(v1 is int && v2 is int)
!                               {
!                                       return ((int)v1) == ((int)v2);
!                               }
!                               else if(v1 is bool && v2 is bool)
!                               {
!                                       return ((bool)v1) == ((bool)v2);
!                               }
!                               else if(v1 == v2)
!                               {
!                                       return true;
!                               }
! 
!                               // Is one of the values null?
!                               if(v1 == null || DBNull.IsDBNull(v1) || v1 is 
Missing ||
!                                  v1 is System.Reflection.Missing)
!                               {
!                                       return (v2 == null || 
DBNull.IsDBNull(v2) ||
!                                                       v2 is Missing || v2 is 
System.Reflection.Missing);
!                               }
!                               else if(v2 == null || DBNull.IsDBNull(v2) || v2 
is Missing ||
!                                               v2 is System.Reflection.Missing)
!                               {
!                                       return false;
!                               }
! 
!                               // Convert into primitive values and compare.
!                               v1 = Convert.ToPrimitive(v1, 
DefaultValueHint.None);
!                               if(v1 is bool)
!                               {
!                                       v1 = Convert.ToNumber(v1);
!                               }
!                               v2 = Convert.ToPrimitive(v2, 
DefaultValueHint.None);
!                               if(v2 is bool)
!                               {
!                                       v2 = Convert.ToNumber(v2);
!                               }
!                               if(v1 is String)
!                               {
!                                       if(v2 is String)
!                                       {
!                                               return ((String)v1) == 
((String)v2);
!                                       }
!                                       else
!                                       {
!                                               return Convert.ToNumber(v1) == 
Convert.ToNumber(v2);
!                                       }
!                               }
!                               else if(v1 is double)
!                               {
!                                       return ((double)v1) == 
Convert.ToNumber(v2);
!                               }
! 
!                               // Don't know how to compare the objects.
                                return false;
                        }

Index: In.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Jsc/In.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** In.cs       13 Jan 2003 10:53:20 -0000      1.1
--- In.cs       17 Jan 2003 06:34:47 -0000      1.2
***************
*** 23,26 ****
--- 23,27 ----
  
  using System;
+ using System.Collections;
  
  // Dummy class for backwards-compatibility.
***************
*** 34,39 ****
        public static bool JScriptIn(Object v1, Object v2)
                        {
!                               // TODO
!                               return false;
                        }
  
--- 35,108 ----
        public static bool JScriptIn(Object v1, Object v2)
                        {
!                               if(v2 is ScriptObject)
!                               {
!                                       // This is an ordinary JScript object.
!                                       return ((ScriptObject)v2).HasProperty
!                                               (Convert.ToString(v1));
!                               }
!                               else if(v2 is Array)
!                               {
!                                       // This is an underlying CLI array.
!                                       Array array = (v2 as Array);
!                                       double index = Convert.ToNumber(v1);
!                                       if(index == Math.Round(index) &&
!                                          index >= (double)(Int32.MinValue) &&
!                                          index <= (double)(Int32.MaxValue))
!                                       {
!                                               int indexi = (int)index;
!                                               return (indexi >= 
array.GetLowerBound(0) &&
!                                                       indexi <= 
array.GetUpperBound(0));
!                                       }
!                                       else
!                                       {
!                                               return false;
!                                       }
!                               }
!                               else if(v2 is IDictionary)
!                               {
!                                       // This is an underlying CLI dictionary.
!                                       if(v1 == null)
!                                       {
!                                               return false;
!                                       }
!                                       return ((IDictionary)v2).Contains(v1);
!                               }
!                               else if(v2 is IEnumerable)
!                               {
!                                       // Get the enumerator to search a CLI 
collection.
!                                       if(v1 == null)
!                                       {
!                                               return false;
!                                       }
!                                       foreach(Object obj in ((IEnumerable)v2))
!                                       {
!                                               if(v1.Equals(obj))
!                                               {
!                                                       return true;
!                                               }
!                                       }
!                                       return false;
!                               }
!                               else if(v2 is IEnumerator)
!                               {
!                                       // Use the explicitly-supplied 
enumerator.
!                                       if(v1 == null)
!                                       {
!                                               return false;
!                                       }
!                                       IEnumerator e = (IEnumerator)v2;
!                                       while(e.MoveNext())
!                                       {
!                                               if(v1.Equals(e.Current))
!                                               {
!                                                       return true;
!                                               }
!                                       }
!                                       return false;
!                               }
!                               else
!                               {
!                                       throw new 
JScriptException(JSError.ObjectExpected);
!                               }
                        }
  

Index: StrictEquality.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Jsc/StrictEquality.cs,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** StrictEquality.cs   13 Jan 2003 10:53:20 -0000      1.1
--- StrictEquality.cs   17 Jan 2003 06:34:47 -0000      1.2
***************
*** 35,39 ****
        public static bool JScriptStrictEquals(Object v1, Object v2)
                        {
!                               // TODO
                                return false;
                        }
--- 35,111 ----
        public static bool JScriptStrictEquals(Object v1, Object v2)
                        {
!                               // Handle the simple cases first.
!                               if(v1 is String && v2 is String)
!                               {
!                                       return ((String)v1) == ((String)v2);
!                               }
!                               else if(v1 is double && v2 is double)
!                               {
!                                       return ((double)v1) == ((double)v2);
!                               }
!                               else if(v1 is int && v2 is int)
!                               {
!                                       return ((int)v1) == ((int)v2);
!                               }
!                               else if(v1 is bool && v2 is bool)
!                               {
!                                       return ((bool)v1) == ((bool)v2);
!                               }
!                               else if(v1 == v2)
!                               {
!                                       return true;
!                               }
! 
!                               // Handle the case where one is null or 
undefined.
!                               if(v1 == null || v1 is Missing ||
!                                  v1 is System.Reflection.Missing)
!                               {
!                                       return (v2 == null || v2 is Missing ||
!                                                       v2 is 
System.Reflection.Missing);
!                               }
!                               else if(v2 == null || v2 is Missing ||
!                                               v2 is System.Reflection.Missing)
!                               {
!                                       return false;
!                               }
!                               if(DBNull.IsDBNull(v1))
!                               {
!                                       return DBNull.IsDBNull(v1);
!                               }
!                               else if(DBNull.IsDBNull(v2))
!                               {
!                                       return false;
!                               }
! 
!                               // Normalize primitive values and retry.
!                               v1 = Convert.NormalizePrimitive(v1);
!                               v2 = Convert.NormalizePrimitive(v2);
!                               TypeCode tc1 = Support.TypeCodeForObject(v1);
!                               TypeCode tc2 = Support.TypeCodeForObject(v2);
!                               if(tc1 != tc2)
!                               {
!                                       return false;
!                               }
!                               switch(tc1)
!                               {
!                                       case TypeCode.Boolean:
!                                               return ((bool)v1) == ((bool)v2);
! 
!                                       case TypeCode.Double:
!                                               return ((double)v1) == 
((double)v2);
! 
!                                       case TypeCode.DateTime:
!                                               return ((DateTime)v1) == 
((DateTime)v2);
! 
!                                       case TypeCode.Decimal:
!                                               return ((Decimal)v1) == 
((Decimal)v2);
! 
!                                       case TypeCode.String:
!                                               return ((String)v1) == 
((String)v2);
! 
!                                       default: break;
!                               }
! 
!                               // The values are not strictly equal.
                                return false;
                        }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]