HS parser: fix number+comparison keyword collision, eval-hs uses hs-compile
Parser: skip unit suffix when next ident is a comparison keyword (starts, ends, contains, matches, is, does, in, precedes, follows). Fixes "123 starts with '12'" returning "123starts" instead of true. eval-hs: use hs-compile directly instead of hs-to-sx-from-source with "return " prefix, which was causing the parser to consume the comparison as a string suffix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
26
sx/sx/spec-introspect/spec-form-kind.sx
Normal file
26
sx/sx/spec-introspect/spec-form-kind.sx
Normal file
@@ -0,0 +1,26 @@
|
||||
(define spec-form-kind
|
||||
(fn
|
||||
(form)
|
||||
(let
|
||||
((head (symbol-name (first form))))
|
||||
(cond
|
||||
(= head "defcomp")
|
||||
"component"
|
||||
(= head "defisland")
|
||||
"island"
|
||||
(= head "defmacro")
|
||||
"macro"
|
||||
(= head "define")
|
||||
(let
|
||||
((body (last form)))
|
||||
(if
|
||||
(and
|
||||
(list? body)
|
||||
(> (len body) 0)
|
||||
(= (type-of (first body)) "symbol")
|
||||
(or
|
||||
(= (symbol-name (first body)) "fn")
|
||||
(= (symbol-name (first body)) "lambda")))
|
||||
"function"
|
||||
"constant"))
|
||||
:else "unknown"))))
|
||||
Reference in New Issue
Block a user