[honu] check for definitions before continuing to parse. completely parse the left hand side of an operator
This commit is contained in:
parent
6dc3fbb72c
commit
bb57412242
|
@ -181,7 +181,7 @@
|
||||||
;; instead of x_result. x_result is still there, too
|
;; instead of x_result. x_result is still there, too
|
||||||
(with-syntax ([pattern-variable.name #'pattern-variable.result]
|
(with-syntax ([pattern-variable.name #'pattern-variable.result]
|
||||||
...)
|
...)
|
||||||
(debug "~a = ~a\n" 'pattern-variable.name #'pattern-variable.name) ...
|
(debug "~a = ~a\n" 'pattern-variable.name (syntax->datum #'pattern-variable.name)) ...
|
||||||
(parse-stuff action ...))
|
(parse-stuff action ...))
|
||||||
#'more #t)]
|
#'more #t)]
|
||||||
[else (raise-syntax-error #f "Could not match macro" stx)]
|
[else (raise-syntax-error #f "Could not match macro" stx)]
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
racket/splicing
|
racket/splicing
|
||||||
(only-in "literals.rkt" %racket)
|
(only-in "literals.rkt" %racket)
|
||||||
"compile.rkt"
|
"compile.rkt"
|
||||||
|
"syntax.rkt"
|
||||||
"extra.rkt"))
|
"extra.rkt"))
|
||||||
|
|
||||||
(provide parse parse-all)
|
(provide parse parse-all)
|
||||||
|
@ -227,7 +228,13 @@
|
||||||
body.result)))])
|
body.result)))])
|
||||||
|
|
||||||
(define (definition? code)
|
(define (definition? code)
|
||||||
#f)
|
(define (contains-define? code)
|
||||||
|
(syntax-parse code #:literals (define define-honu-syntax)
|
||||||
|
[(define x ...) #t]
|
||||||
|
[(define-honu-syntax x ...) #t]
|
||||||
|
[else #f]))
|
||||||
|
(and (parsed-syntax? code)
|
||||||
|
(contains-define? code)))
|
||||||
|
|
||||||
;; E = macro
|
;; E = macro
|
||||||
;; | E operator E
|
;; | E operator E
|
||||||
|
@ -310,7 +317,7 @@
|
||||||
(debug "Reparsed output ~a\n" (pretty-format (syntax->datum re-parse)))
|
(debug "Reparsed output ~a\n" (pretty-format (syntax->datum re-parse)))
|
||||||
(define terminate (definition? re-parse))
|
(define terminate (definition? re-parse))
|
||||||
(debug "Terminate? ~a\n" terminate)
|
(debug "Terminate? ~a\n" terminate)
|
||||||
(if terminate?
|
(if terminate
|
||||||
(values (left re-parse)
|
(values (left re-parse)
|
||||||
#'rest)
|
#'rest)
|
||||||
(do-parse #'rest precedence
|
(do-parse #'rest precedence
|
||||||
|
@ -391,7 +398,7 @@
|
||||||
(define output
|
(define output
|
||||||
(if current
|
(if current
|
||||||
(if binary-transformer
|
(if binary-transformer
|
||||||
(binary-transformer current right)
|
(binary-transformer (parse-all current) right)
|
||||||
(error 'binary "cannot be used as a binary operator in ~a" #'head))
|
(error 'binary "cannot be used as a binary operator in ~a" #'head))
|
||||||
(if unary-transformer
|
(if unary-transformer
|
||||||
(unary-transformer right)
|
(unary-transformer right)
|
||||||
|
@ -622,7 +629,7 @@
|
||||||
(debug 2 "[~a] Parsed things ~a\n" context (parsed-things stx unparsed))
|
(debug 2 "[~a] Parsed things ~a\n" context (parsed-things stx unparsed))
|
||||||
(if (parsed-syntax? parsed)
|
(if (parsed-syntax? parsed)
|
||||||
(list (parsed-things stx unparsed)
|
(list (parsed-things stx unparsed)
|
||||||
(parsed-syntax parsed))
|
parsed)
|
||||||
(list (parsed-things stx unparsed)
|
(list (parsed-things stx unparsed)
|
||||||
(parse-all parsed)))))))
|
(parse-all parsed)))))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user