xform: accomodate unusual #pragma
placement
The Mac OS 10.15 headers include a `#pragma` just before the closing `;` of a `struct` declaration. That confuses poor xform. Handle this special case by detecting it and swapping the order of the `#pragma` and `;`.
This commit is contained in:
parent
fa1c2219ab
commit
27c1847ce8
|
@ -495,7 +495,7 @@
|
|||
(and precompiled-header
|
||||
(open-input-file (change-extension precompiled-header #".e"))))
|
||||
(define re:boring #rx#"^(?:(?:[ \t]*)|(?:# .*)|(?:#line .*)|(?:#pragma implementation.*)|(?:#pragma interface.*)|(?:#pragma once)|(?:#pragma warning.*)|(?:#ident.*))$")
|
||||
(define re:uninteresting #rx#"^(?:(?:[ \t]*)|(?:# .*)|(?:#line .*)|(?:#pragma implementation.*)|(?:#pragma interface.*)|(?:#pragma once)|(?:#pragma GCC diagnostic.*)|(?:#pragma warning.*)|(?:#ident.*))$")
|
||||
(define re:uninteresting #rx#"^(?:(?:[ \t]*)|(?:# .*)|(?:#line .*)|(?:#pragma implementation.*)|(?:#pragma interface.*)|(?:#pragma once)|(?:#pragma (?:GCC|clang) diagnostic.*)|(?:#pragma warning.*)|(?:#ident.*))$")
|
||||
(define (skip-to-interesting-line p)
|
||||
(let ([l (read-bytes-line p 'any)])
|
||||
(cond
|
||||
|
@ -506,7 +506,7 @@
|
|||
(when recorded-cpp-in
|
||||
;; Skip over common part:
|
||||
(let loop ([lpos 1])
|
||||
(let ([pl (read-bytes-line recorded-cpp-in 'any)])
|
||||
(let ([pl (skip-to-interesting-line recorded-cpp-in)])
|
||||
(unless (eof-object? pl)
|
||||
(let ([l (skip-to-interesting-line (car cpp-process))])
|
||||
(unless (equal? pl l)
|
||||
|
@ -4073,11 +4073,18 @@
|
|||
(cond
|
||||
[(null? e) (values (reverse result) null)]
|
||||
[(pragma? (car e))
|
||||
(unless (null? result)
|
||||
(error 'pragma "unexpected pragma: ~a at: ~a:~a"
|
||||
(pragma-s (car e))
|
||||
(pragma-file (car e)) (pragma-line (car e))))
|
||||
(values (list (car e)) (cdr e))]
|
||||
(cond
|
||||
[(null? result)
|
||||
(values (list (car e)) (cdr e))]
|
||||
[(and (pair? (cdr e))
|
||||
(eq? semi (tok-n (cadr e))))
|
||||
;; Swap order of pragma and terminating semicolon
|
||||
(values (reverse (cons (cadr e) result))
|
||||
(cons (car e) (cddr e)))]
|
||||
[else
|
||||
(error 'pragma "unexpected pragma: ~a at: ~a:~a"
|
||||
(pragma-s (car e))
|
||||
(pragma-file (car e)) (pragma-line (car e)))])]
|
||||
[(compiler-pragma? e)
|
||||
(unless (null? result)
|
||||
(error 'pragma "unexpected MSVC compiler pragma"))
|
||||
|
|
Loading…
Reference in New Issue
Block a user