Author: cesar
Date: 2005-04-18 14:16:17 -0400 (Mon, 18 Apr 2005)
New Revision: 43229

Modified:
   trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog
   trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/CodeGenerator.cs
   trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/Parser.cs
   trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/StrictEquality.cs
Log:
2005-04-18  Cesar Lopez Nataren  <[EMAIL PROTECTED]>

        * Parser.cs: Build a StrictEquality object instead of a Equality
        object, when we have === and !=== as operator.
        * CodeGenerator.cs: (ft_emit_equality, fall_true) Take into account the
        strict cases of equality. 
        * StrictEquality.cs: Add parent, left and right params to default
        ctr. Implement Resolve and Emit.

Modified: trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog
===================================================================
--- trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog       
2005-04-18 17:13:22 UTC (rev 43228)
+++ trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/ChangeLog       
2005-04-18 18:16:17 UTC (rev 43229)
@@ -1,3 +1,12 @@
+2005-04-18  Cesar Lopez Nataren  <[EMAIL PROTECTED]>
+
+       * Parser.cs: Build a StrictEquality object instead of a Equality
+       object, when we have === and !=== as operator.
+       * CodeGenerator.cs: (ft_emit_equality, fall_true) Take into account the
+       strict cases of equality. 
+       * StrictEquality.cs: Add parent, left and right params to default
+       ctr. Implement Resolve and Emit.
+
 2005-04-15  Cesar Lopez Nataren  <[EMAIL PROTECTED]>
 
        * Statement.cs: make internal the builders.

Modified: trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/CodeGenerator.cs
===================================================================
--- trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/CodeGenerator.cs        
2005-04-18 17:13:22 UTC (rev 43228)
+++ trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/CodeGenerator.cs        
2005-04-18 18:16:17 UTC (rev 43229)
@@ -5,6 +5,7 @@
 //     Cesar Lopez Nataren ([EMAIL PROTECTED])
 //
 // (C) 2003, 2004 Cesar Lopez Nataren
+// (C) 2005, Novell, Inc. (http://novell.com)
 //
 
 //
@@ -324,14 +325,21 @@
                static void ft_emit_equality (EmitContext ec, AST ast, Label 
lbl)
                {
                        ILGenerator ig = ec.ig;
-                       Equality eq = ast as Equality;
+                       BinaryOp eq = null;
 
+                       if (ast is Equality)
+                               eq = (Equality) ast;
+                       else if (ast is StrictEquality)
+                               eq = (StrictEquality) ast;
+
                        eq.Emit (ec);
                        switch (eq.op) {
                        case JSToken.NotEqual:
+                       case JSToken.StrictNotEqual:
                                ig.Emit (OpCodes.Brtrue, lbl);
                                break;
                        case JSToken.Equal:
+                       case JSToken.StrictEqual:
                                ig.Emit (OpCodes.Brfalse, lbl);
                                break;
                        }
@@ -349,7 +357,7 @@
                                fall_true (ec, last_exp, lbl);
                        } else if (type == typeof (Binary))
                                ft_binary_recursion (ec, ast, lbl);
-                       else if (type == typeof (Equality))
+                       else if (type == typeof (Equality) || type == typeof 
(StrictEquality))
                                ft_emit_equality (ec, ast, lbl);
                        else
                                emit_default_case (ec, ast, OpCodes.Brfalse, 
lbl);

Modified: trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/Parser.cs
===================================================================
--- trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/Parser.cs       
2005-04-18 17:13:22 UTC (rev 43228)
+++ trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/Parser.cs       
2005-04-18 18:16:17 UTC (rev 43229)
@@ -749,11 +749,15 @@
                        AST pn = RelExpr (parent, in_for_init);
                        for (;;) {
                                int tt = ts.PeekToken ();
-                               if (tt == Token.EQ || tt == Token.NE || tt == 
Token.SHEQ || tt == Token.SHNE) {
+                               if (tt == Token.EQ || tt == Token.NE) {
                                        ts.GetToken ();
                                        pn = new Equality (parent, pn, RelExpr 
(parent, in_for_init), ToJSToken (tt));
                                        continue;
-                               }
+                               } else if (tt == Token.SHEQ || tt == 
Token.SHNE) {
+                                       ts.GetToken ();
+                                       pn = new StrictEquality (parent, pn, 
RelExpr (parent, in_for_init), ToJSToken (tt));
+                                       continue;
+                               }                               
                                break;
                        }
                        return pn;

Modified: trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/StrictEquality.cs
===================================================================
--- trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/StrictEquality.cs       
2005-04-18 17:13:22 UTC (rev 43228)
+++ trunk/mcs/class/Microsoft.JScript/Microsoft.JScript/StrictEquality.cs       
2005-04-18 18:16:17 UTC (rev 43229)
@@ -5,6 +5,7 @@
 //     Cesar Lopez Nataren ([EMAIL PROTECTED])
 //
 // (C) 2003, Cesar Lopez Nataren
+// (C) 2005, Novell Inc. (http://novell.com)
 //
 
 //
@@ -29,13 +30,14 @@
 //
 
 using System;
+using System.Reflection.Emit;
 
 namespace Microsoft.JScript {
 
        public class StrictEquality : BinaryOp {
 
-               internal StrictEquality ()
-                       : base (null, null, JSToken.StrictEqual)
+               internal StrictEquality (AST parent, AST left, AST right, 
JSToken op)
+                       : base (left, right, op)
                {
                }
 
@@ -46,7 +48,12 @@
 
                internal override bool Resolve (IdentificationTable context)
                {
-                       throw new NotImplementedException ();
+                       bool r = true;
+                       if (left != null)
+                               r &= left.Resolve (context);
+                       if (right != null)
+                               r &= right.Resolve (context);
+                       return r;
                }
                
                internal override bool Resolve (IdentificationTable context, 
bool no_effect)
@@ -57,7 +64,11 @@
 
                internal override void Emit (EmitContext ec)
                {
-                       throw new NotImplementedException ();
+                       if (left != null)
+                               left.Emit (ec);
+                       if (right != null)
+                               right.Emit (ec);
+                       ec.ig.Emit (OpCodes.Call, typeof 
(StrictEquality).GetMethod ("JScriptStrictEquals"));
                }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to