Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions runtime/src/main/fusion/modules/fusion/exception.fusion
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,9 @@ See the [Racket Guide on Exceptions][racket-exn] for more details.
(quote ())
(let [(ph (head phs))]
(if (=== 2 (syntax_size ph))
(pair (sexp (quote_syntax pair) (syntax_get ph 0) (syntax_get ph 1))
(pair (sexp (quote_syntax pair)
(syntax_element ph 0)
(syntax_element ph 1))
(loop (tail phs)))
(wrong_syntax ph
'''Bad syntax. Handler must be a pair of predicate and handler expressions.'''))
Expand Down Expand Up @@ -171,9 +173,9 @@ Returns `true` or `false`.
(lambda (stx)
(lets
[(orig_args (syntax_subseq stx 1)),
(pred_name (syntax_get orig_args 0)),
(exn_name (syntax_get orig_args 1)),
(exn_class (syntax_get orig_args 2)),
(pred_name (syntax_element orig_args 0)),
(exn_name (syntax_element orig_args 1)),
(exn_class (syntax_element orig_args 2)),
(docs (string_append
"\n (" (syntax_unwrap pred_name) " v)\n\n"
"Determines whether a value is an exception of type `"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Defines and provides a procedure named ID with the BODY.
(let_values [((name_or_args) (unsafe_pair_head content))]
(let_values [((name) (if (is_identifier name_or_args)
name_or_args
(syntax_get name_or_args 0)))]
(syntax_element name_or_args 0)))]
(datum_to_syntax
(sexp (quote_syntax begin) // (begin
(pair (quote_syntax define) content) // (define ...)
Expand All @@ -50,20 +50,20 @@ fully-qualified class name string FQCN.
'''
(lambda (stx)
(if (= 4 (syntax_size stx))
(if (is_string (syntax_to_datum (syntax_get stx 2)))
(if (is_string (syntax_to_datum (syntax_element stx 2)))
// We have docs
(datum_to_syntax
(sexp (quote_syntax defpub) (syntax_get stx 1) // (defpub ID
(syntax_get stx 2) // DOC
(sexp (quote_syntax java_new) // (java_new
(syntax_get stx 3))) // FQCN))
(sexp (quote_syntax defpub) (syntax_element stx 1) // (defpub ID
(syntax_element stx 2) // DOC
(sexp (quote_syntax java_new) // (java_new
(syntax_element stx 3))) // FQCN))
ctx
stx)
(wrong_syntax (syntax_get stx 2) "Expected documentation string"))
(wrong_syntax (syntax_element stx 2) "Expected documentation string"))
(datum_to_syntax
(sexp (quote_syntax defpub) (syntax_get stx 1) // (defpub ID
(sexp (quote_syntax java_new) // (java_new
(syntax_get stx 2))) // FQCN))
(sexp (quote_syntax defpub) (syntax_element stx 1) // (defpub ID
(sexp (quote_syntax java_new) // (java_new
(syntax_element stx 2))) // FQCN))
ctx
stx))))

Expand Down Expand Up @@ -97,9 +97,9 @@ given fully-qualified class name string FQCN.
(lambda (stx) // (defpub_j_syntax ID FQCN) -->
(datum_to_syntax
(sexp (quote_syntax defpub_syntax) // (defpub_syntax
(syntax_get stx 1) // ID
(syntax_element stx 1) // ID
(sexp (quote_syntax java_new) // (java_new
(syntax_get stx 2))) // FQCN))
(syntax_element stx 2))) // FQCN))
ctx
stx)))
)
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ significantly simpler to implement and easier to understand.
quote_syntax
syntax_append
syntax_column
syntax_element
syntax_get
syntax_is_original
syntax_line
Expand All @@ -107,6 +108,12 @@ significantly simpler to implement and easier to understand.
wrong_syntax)


(define_values (syntax_get)
"DEPRECATED: Use `syntax_element` instead."
(lambda (stx key)
(syntax_element stx key)))


(define (check_duplicate_identifier ids)
'''
Given a sexp of identifiers `ids`, compares each pair of identifiers with
Expand Down
6 changes: 3 additions & 3 deletions runtime/src/main/fusion/modules/fusion/private/bind.fusion
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
(if (is_sexp v) true (is_list v)))

(define (let_loop_name stx)
(let_values [((first) (syntax_get stx 1))]
(let_values [((first) (syntax_element stx 1))]
(if (is_symbol (syntax_unwrap first))
first
false)))
Expand Down Expand Up @@ -68,8 +68,8 @@ Checks the syntax of a binding initializer form `(ids expr)`; returns
(= 2 (syntax_size binding))
false))
(wrong_syntax stx "bad binding form: " binding)
(let_values [((name) (syntax_get binding 0)),
((expr) (syntax_get binding 1))]
(let_values [((name) (syntax_element binding 0)),
((expr) (syntax_element binding 1))]
(check_ids stx name)
(values name expr))))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,6 @@ The result is zero if there's no column number available.
(java_new "dev.ionfusion.fusion.SyntaxColumnProc"))


(define_values (syntax_get)
'''
(syntax_get container key ...)

Traverses down through syntax objects.
`container` must be syntax container (struct, list, or sexp).
Each `key` must be a string, symbol, or int, to denote either a struct's
field-name or a sequence's index.
'''
(java_new "dev.ionfusion.fusion.SyntaxGetProc"))


(define_values (syntax_is_original)
(java_new "dev.ionfusion.fusion.FusionSyntax$IsOriginalProc"))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,6 @@ layers will shift over time, as intrinsic features are added or ported up to Fus
quote_syntax
syntax_append
syntax_column
syntax_get
syntax_is_original
syntax_line
syntax_property
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
.
element
elt
syntax_element
)
(provide_signature 'sig:layer08:element')

Expand Down Expand Up @@ -147,4 +148,14 @@ be evaluated as a variable reference:
(unsafe_pair_tail rest))))))]
(loop (unsafe_pair_head args) (unsafe_pair_tail args)))
(apply raise_arity_error "." 1 args))))


(define_values (syntax_element)
'''
(syntax_element stx i)

Unwraps the given `stx` then applies `element` to it.
'''
(lambda (stx i)
(element (syntax_unwrap stx) i)))
)
75 changes: 0 additions & 75 deletions runtime/src/main/java/dev/ionfusion/fusion/SyntaxGetProc.java

This file was deleted.

14 changes: 14 additions & 0 deletions runtime/src/test/fusion/scripts/element.test.fusion
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,17 @@
(check_void (. {f:1,g:[2]} "g" 1 1))
(check_void (. [1] 1))
(check_void (. [1, {f:2}] 1 "g" 1))



//==========================================================================
// syntax_element

(check === 0 (syntax_unwrap (syntax_element (quote_syntax [0,1]) 0)))
(check === 1 (syntax_unwrap (syntax_element (quote_syntax [0,1]) 1)))

(check === 0 (syntax_unwrap (syntax_element (quote_syntax (0 1)) 0)))
(check === 1 (syntax_unwrap (syntax_element (quote_syntax (0 1)) 1)))

(check === 0 (syntax_unwrap (syntax_element (quote_syntax {f:0,g:1}) "f")))
(check === 1 (syntax_unwrap (syntax_element (quote_syntax {f:0,g:1}) "g")))
Loading