[svn] r5959: nemerle/trunk/ncc: testsuite/positive/delayed-indexers.n typing/Typer-CallTyper.n typing/Type...

malekith svnadmin at nemerle.org
Tue Nov 22 00:09:23 CET 2005


Log:
Don't SetCallExpr on delayed typing actions, that are not going to use it. Makes testcase from #555 work.

Author: malekith
Date: Tue Nov 22 00:09:20 2005
New Revision: 5959

Modified:
   nemerle/trunk/ncc/testsuite/positive/delayed-indexers.n
   nemerle/trunk/ncc/typing/Typer-CallTyper.n
   nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
   nemerle/trunk/ncc/typing/Typer.n

Modified: nemerle/trunk/ncc/testsuite/positive/delayed-indexers.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/delayed-indexers.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/delayed-indexers.n	Tue Nov 22 00:09:20 2005
@@ -24,11 +24,16 @@
 g (a);
 System.Console.WriteLine (a [0][0]);
 
+def operations = Nemerle.Collections.Hashtable ();
+operations.Add ("+", fun (arr) { assert (arr.Length == 2); arr[0] + arr[1] });
+System.Console.WriteLine ( operations ["+"] (array [1,2]));
+
 /*
 BEGIN-OUTPUT
 12
 42
 bar
 12
+3
 END-OUTPUT
 */

Modified: nemerle/trunk/ncc/typing/Typer-CallTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-CallTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-CallTyper.n	Tue Nov 22 00:09:20 2005
@@ -28,6 +28,7 @@
 
 using Nemerle.Collections;
 using Nemerle.Utility;
+using Nemerle.Logging;
 
 using Nemerle.Compiler;
 using Nemerle.Compiler.Typedtree;
@@ -322,14 +323,14 @@
 
         argument_number = 1;
         
-        // Message.Debug ($"start loop $imethod");
+        log (TYPING, $"start parm loop $imethod");
 
         if (header == null)
           LoopWithoutHeader ()
         else
           LoopWithHeader ();
 
-        // Message.Debug ($"end loop $imethod");
+        log (TYPING, $"end parm loop $imethod, res=$result_type");
 
         unless (messenger.LocalError) {
           _ = typer.Expect (expected_type, result_type, "call result");

Modified: nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-DelayedTyping.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-DelayedTyping.n	Tue Nov 22 00:09:20 2005
@@ -341,13 +341,29 @@
       }
       
 
+      public CanSetCallExpr : bool
+      {
+        get {
+          match (DtKind) {
+            | MemberAccess
+            | Overloaded
+            | Error
+            | Operator => true
+            | Resolved
+            | Macro => false
+          }
+        }
+      }
+      
+
       public SetCallExpr (e : TExpr.Call) : void
       {
         def kind = DtKind;
+        Util.cassert (CanSetCallExpr);
         if (kind.filtering_expression == null)
           kind.filtering_expression = e;
         else
-          assert (kind.filtering_expression : object == e : object);
+          Util.cassert (kind.filtering_expression : object == e : object)
       }
 
 

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Tue Nov 22 00:09:20 2005
@@ -2504,6 +2504,7 @@
     TryTypeCall (fnc : TExpr, parms : list [Parm], expected : TyVar,
                  var_args : bool, final : bool) : TExpr
     {
+      log (TYPING, $ "try type call to $fnc");
       def ct = CallTyper (this, fnc, parms, expected);
       ct.is_final = final;
       ct.is_var_args = var_args;
@@ -2562,6 +2563,7 @@
               expected : TyVar, 
               is_property : bool) : TExpr
     {
+      log (TYPING, $ "type call to $fnc");
       def refout (name, expr) {
         def tv = FreshTyVar ();
         match (expr) {
@@ -2696,7 +2698,8 @@
        
       def res =
         match (fnc) {
-          | TExpr.Delayed (dt) as expr =>
+          | TExpr.Delayed ((CanSetCallExpr = true) as dt) as expr =>
+            log (TYPING, $"result is delayed: $dt");
             def expr = TExpr.Call (expected, expr, parameters, false);
             dt.SetCallExpr (expr);
             dt.Resolve (); // just try



More information about the svn mailing list