Странная ошибка компиляции
От: anton_t Россия  
Дата: 26.09.09 17:33
Оценка:
Студия 2008 sp1, немерле версии Dec 2008 CTP build 0.9.4.8198. Создаю немерлевский проект Console application. Если в Main.n пишу такой код:
using System;
using System.Console;
using Nemerle.Utility;

macro und (a, b)
{
    <[
    match ($a)
    {
        | true => $b
        | false => false
    }
    ]>
}

module Program
{
    Main() : void
    {
        WriteLine("Hi!");
    }
}

то получаю ошибки компиляции:

Main.n(6,1):Error: unbound type name 'IMacro'
Main.n(6,1):Error: unbound type name 'Nemerle.Compiler.Location'
Main.n(6,1):Error: unbound type name 'Nemerle.Compiler.Location'
Main.n(6,1):Error: unbound type name 'PExpr'
Main.n(6,1):Error: unbound type name 'SyntaxElement'
Main.n(6,1):Error: unbound type name 'Typer'
Main.n(6,1):Error: unbound type name 'SyntaxElement'
Main.n(6,1):Error: unbound type name 'PExpr'
Main.n(6,1):Error: unbound type name 'GrammarElement'
Main.n(6,1):Error: unbound type name 'SyntaxElement'
Main.n(6,1):Error: unbound type name 'SyntaxElement'
Build failed -- 11 errors, 0 warnings. Build took: 00:00:01.2932733.

Если же комментируем обявление макроса, то всё собирается нормально.

ЗЫ. А если написать так:
using System;
using System.Console;
using Nemerle.Utility;

macro und ($a, $b)
{
    <[
    match ($a)
    {
        | true => $b
        | false => false
    }
    ]>
}

module Program
{
    Main() : void
    {
        WriteLine("Hi!");
    }
}

то получим забавный диалог:

---------------------------
Assertion Failed: Abort=Quit, Retry=Debug, Ignore=Continue
---------------------------
ICE! (Internal Compiler Error)

"wrong spliced in macro parameters"



at MacroClasses.GenerateMacroClass(ManagerClass Manager, Macro decl, Node ns_node)

at ScanTypeHierarchy._N_handle_type71851(_N_closure71841 _N_ProcessDeclaration_cp71850, TypeBuilder parent, Node ns_node, TopDeclaration t)

at ScanTypeHierarchy.ProcessDeclaration(TopDeclaration decl)

at _N__N_method_lambda_35219.apply_void(TopDeclaration _N_35218)

at List.Iter(list`1 l, FunctionVoid`1 f)

at ManagerClass.Run()

at MainClass.main_with_catching()

at ThreadHelper.ThreadStart_Context(Object state)

at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at ThreadHelper.ThreadStart()


---------------------------
Abort Retry Ignore
---------------------------

... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.