[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