[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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,
Rhys Weatherley <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.641,1.642
- Next by Date:
[Dotgnu-pnet-commits] CVS: pnetlib/JScript/Nodes JExpr.tc,1.3,1.4 JNode.tc,1.1,1.2
- Previous by thread:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.641,1.642
- Next by thread:
[Dotgnu-pnet-commits] CVS: pnetlib/JScript/Nodes JExpr.tc,1.3,1.4 JNode.tc,1.1,1.2
- Index(es):