2009-12-07 10 views
5

Estoy usando el kit de herramientas de plantilla Perl para generar archivos C. Deseo poder incluir directivas #line en mi código C para que los mensajes de error del compilador de C me envíen al lugar correcto (el archivo de plantilla) en lugar del lugar equivocado (el resultado de la plantilla). Sin embargo, no sé cómo hacer esto. El único resultado que obtuve de Google fue un mensaje sin respuesta en la lista de distribución del Toolkit de plantillas.Números de línea con el kit de herramientas de plantilla

Puedo imaginar una solución torturada, como leer el archivo de plantilla yo mismo y agregar números de línea, pero ¿alguien tiene un truco o incluso un método sensato para obtener los números de línea del archivo original en Template Toolkit?

Respuesta

2

Me parece que el método de ubicación de Template :: Parser devuelve una directiva #line adecuada, pero no hay ninguna función incorporada que vea para incluir eso en la salida. Tendría que extender Template Toolkit para que lo haga.

+0

Aceptaré que no hay forma de hacerlo, y solo usaré el método de fuerza bruta para agregar una directiva de línea en todas partes a través de un preprocesador. –

0

Desde número y "nombre de archivo" están totalmente formadas por (lo que quieras) en la directiva #line, Sugiero poner directivas line en la plantilla usando un contexto ligeramente diferente.

En lugar de contar líneas en la plantilla usted mismo, lo que podría hacer, incluso con un pre-procesador de plantillas. Me gustaría 'inventar' nombres de archivo para las diferentes secciones de la plantilla y el número de esas líneas con números pequeños que puede contar.

A continuación, un mensaje de error podría decir "... en la línea 2 del div id =" superior izquierda"

0

No se ve como plantilla :: Kit de herramientas de soporte nativo para esto. Una cosa que podría hacer es hacer que su programa también escriba un mapeo de las líneas generadas en sus líneas en la plantilla adecuada, de modo que pueda ver los errores por encima de los errores con un simple script.

+0

Quiero hacer 'C-x \' ' –

+0

Permita que C-x' salte a su error en el código generado, y trace otra clave para llamar a un script que busque la entrada correspondiente en su línea. Incluso podría hacer una entrada especial en Emacs que haga las dos cosas por usted. –

0

una solución de fuerza bruta:

#!/usr/local/bin/perl 
use warnings; 
use strict; 
my $file = "something.c"; 
open my $input, "<", $file or die $!; 
while (<$input>) { 
    print "#line $. \"$file\"\n"; 
    print; 
} 
close $input or die $!; 

Aún mejor, prueba para [% en la línea y sólo imprimir #line s cuando sea necesario.

Cuestiones relacionadas