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