2015-02-22 2 views
1

на этапе компиляции (макро) времени, вызываяHaxe макро ловли Context.parse() ошибки

Context.parse("a bad expression", somePos) 

выдает ошибку, что не может быть пойман в примерочных поймать блок (Edit: это неправильно, см. ниже). Есть ли способ уловить эту ошибку? Context.parseInlineString() тоже не работает.

Другие функции, такие как Context.typeExpr(), имеют аналогичную проблему.

Edit: типа улова было неправильно. Я сделал:

try {...} 
catch (err:String) {...} 

Что вы должны сделать:

try {...} 
catch (err:Dynamic) {...} 

Внимательное чтение документации объясняет это. Это отличается от Java, для которого существует один тип исключения для каждой ошибки. В Haxe, самые ошибки являются строками, но есть и другие, похожие на здесь.

ответ

3

следующие работы для меня:

import haxe.macro.*; 

class Test { 
    macro static function test() { 
     try { 
      Context.parse("a bad expression", Context.currentPos()); 
     } catch(e:Dynamic) { 
      trace(e); //Test.hx:8: Missing ; 
     } 
     return macro {}; 
    } 
    static function main() { 
     test(); 
    } 
} 
Смежные вопросы