#lang scheme/base
(require "../base.ss")
(require (only-in (javascript-in ast)
SourceElement?
Property?)
(except-in (javascript-in private/syntax/ast-core)
make-FunctionExpression
FunctionExpression
struct:FunctionExpression
FunctionExpression-name
FunctionExpression-args
FunctionExpression-body
FunctionExpression?)
(javascript-in private/syntax/token))
(define-struct (BeginStatement Statement) (statements) #:prefab)
(define-struct (MirrorsExpression Expression) () #:prefab)
(define-struct (FunctionExpression MirrorsExpression) (name args body) #:prefab)
(define-struct (RawExpression MirrorsExpression) (text) #:prefab)
(define (empty-begin? stmt)
(and (BeginStatement? stmt)
(andmap empty-begin? (BeginStatement-statements stmt))))
(define (javascript? item)
(or (SourceElement? item)
(Expression? item)))
(define javascript-declaration?
Declaration?)
(define javascript-statement?
Statement?)
(define javascript-expression?
Expression?)
(provide (javascript-out ast private/syntax/ast-core))
(provide/contract
[struct (BeginStatement Statement) ([location (or/c region? #f)]
[statements (listof SourceElement?)])]
[struct (FunctionExpression Expression) ([location (or/c region? #f)]
[name (or/c Identifier? #f)]
[args (listof Identifier?)]
[body (listof SourceElement?)])]
[struct (RawExpression MirrorsExpression) ([location (or/c region? #f)]
[text string?])]
[empty-begin? procedure?]
[javascript? procedure?]
[javascript-declaration? procedure?]
[javascript-statement? procedure?]
[javascript-expression? procedure?])