@@ -347,7 +347,7 @@ defmodule EEx.Compiler do
347347 state . parser_options
348348
349349 expr = Code . string_to_quoted! ( chars , options )
350- buffer = state . engine . handle_expr ( buffer , IO . chardata_to_string ( mark ) , expr )
350+ buffer = handle_expr ( buffer , mark , expr , meta , state )
351351 generate_buffer ( rest , buffer , scope , state )
352352 end
353353
@@ -376,7 +376,7 @@ defmodule EEx.Compiler do
376376 IO . warn ( message , file: state . file , line: meta . line , column: meta . column )
377377 end
378378
379- buffer = state . engine . handle_expr ( buffer , IO . chardata_to_string ( mark ) , contents )
379+ buffer = handle_expr ( buffer , mark , contents , meta , state )
380380 generate_buffer ( rest , buffer , scope , state )
381381 end
382382
@@ -513,6 +513,20 @@ defmodule EEx.Compiler do
513513 column: meta . column
514514 end
515515
516+ defp handle_expr ( buffer , mark , expr , meta , state ) do
517+ state . engine . handle_expr ( buffer , IO . chardata_to_string ( mark ) , expr )
518+ rescue
519+ e in EEx.SyntaxError ->
520+ reraise % {
521+ e
522+ | file: e . file || state . file ,
523+ line: e . line || meta . line ,
524+ column: e . column || meta . column ,
525+ snippet: e . snippet || code_snippet ( state . source , state . indentation , meta )
526+ } ,
527+ __STACKTRACE__
528+ end
529+
516530 defp code_snippet ( source , indentation , meta ) do
517531 line_start = max ( meta . line - 3 , 1 )
518532 line_end = meta . line
0 commit comments