context of evaluating syntax transformer

Damien Mattei damien.mattei@gmail.com
Sat Jun 15 11:55:57 GMT 2024


sorry, was one of my 'import' that was inccorect,
all is working now:

#|kawa:1|# (import (bracket-apply))
/Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:103:10:
warning - no use of optimizer-parse-square-brackets-arguments-lister
/Users/mattei/Scheme-PLUS-for-Kawa/array.scm:97:6: warning - void-valued
expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:370:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:375:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:442:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:445:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:447:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:450:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:538:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:544:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:585:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:592:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:647:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:650:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:653:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:656:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:695:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:698:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:702:20: warning - type
gnu.lists.AbstractSequence is incompatible with required type
abstract-string
/Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:705:7: warning -
void-valued expression where value is needed
/Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:
note - skipped 0 errors, 13 warnings, 0 notes
#|kawa:2|# (bracket-apply #(1 2 3 4 5) 2)
optimizer-parse-square-brackets-arguments-lister-syntax : args-brackets=(2)
bracket-apply : #'parsed-args=(#<syntax#1354 list in #2208> 2)
(bracket-apply #(1 2 3 4 5) 2)
3



On Sat, Jun 15, 2024 at 12:55 PM Damien Mattei <damien.mattei@gmail.com>
wrote:

> but i got now the same problem on this macro, and on a procedure binding
> which i can not solve easily without inlining a lot of code in the syntax
> transformer:
>
> (define-library (bracket-apply) ; R7RS
>
>   (import (kawa base)
>  (srfi 1) ; bug in kawa
>  (optimizer-parse-square-brackets)
>  (for_next_step)
>  (array))
>
>   (export bracket-apply)
>
> (define-syntax bracket-apply  ;;  this implements a possible bracket-apply
> as proposed in SRFI-105
>
>   (lambda (stx)
>
>     (syntax-case stx ()
>
>       ;; a version that pre-compil the infix expression, should be faster
>       (($bracket-apply$ container arg-bracket ...) ;  . args-brackets
>
>
>        (with-syntax ((parsed-args
>
>      (cons #'list
>          (optimizer-parse-square-brackets-arguments-lister-syntax
> #'(arg-bracket ...)))))
>
>    (display "$bracket-apply$ : #'parsed-args=") (display #'parsed-args)
> (newline)
>
>    #'($bracket-apply$next4list-args container parsed-args))))))
>
>
> #|kawa:1|# (import (bracket-apply))
> /Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:43:7:
> warning - no use of optimizer-parse-square-brackets-arguments
> /Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:104:10:
> warning - no use of optimizer-parse-square-brackets-arguments-lister
> /Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:111:10:
> warning - no use of optimizer-parse-square-brackets-arguments-lister-syntax
> /Users/mattei/Scheme-PLUS-for-Kawa/array.scm:97:6: warning - void-valued
> expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:369:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:374:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:441:20: warning -
> type gnu.lists.AbstractSequence is incompatible with required type
> abstract-string
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:444:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:446:20: warning -
> type gnu.lists.AbstractSequence is incompatible with required type
> abstract-string
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:449:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:537:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:543:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:584:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:591:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:646:20: warning -
> type gnu.lists.AbstractSequence is incompatible with required type
> abstract-string
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:649:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:652:20: warning -
> type gnu.lists.AbstractSequence is incompatible with required type
> abstract-string
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:655:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:694:20: warning -
> type gnu.lists.AbstractSequence is incompatible with required type
> abstract-string
> /Users/mattei/Scheme-PLUS-for-Kawa/bracket-apply.scm:697:7: warning -
> void-valued expression where value is needed
> /Users/mattei/Scheme-PLUS-for-Kawa/optimizer-parse-square-brackets.scm:
> note - skipped 0 errors, 16 warnings, 0 notes
>
> #|kawa:3|# (bracket-apply #(1 2 3 4 5) 2)
> /dev/tty:3:1: evaluating syntax transformer 'bracket-apply' threw unbound
> location: optimizer-parse-square-brackets-arguments-lister-syntax
>     gnu.mapping.DynamicLocation.get(DynamicLocation.java:36)
>     gnu.expr.ReferenceExp.apply(ReferenceExp.java:171)
>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>     gnu.expr.Expression.eval(Expression.java:52)
>     gnu.expr.ApplyExp.apply(ApplyExp.java:161)
>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>     gnu.expr.Expression.eval(Expression.java:52)
>     gnu.expr.ApplyExp.apply(ApplyExp.java:161)
>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>     gnu.expr.Expression.eval(Expression.java:52)
>     gnu.expr.LetExp.evalVariable(LetExp.java:26)
>     gnu.expr.LetExp.apply(LetExp.java:60)
>     gnu.expr.LetExp.apply(LetExp.java:72)
>     gnu.expr.IfExp.apply(IfExp.java:41)
>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>     gnu.expr.Expression.eval(Expression.java:52)
>     gnu.expr.BlockExp.apply(BlockExp.java:58)
>     gnu.expr.LetExp.apply(LetExp.java:72)
>     gnu.expr.LetExp.apply(LetExp.java:72)
>     gnu.expr.LambdaExp$Closure.applyToConsumer(LambdaExp.java:2144)
>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>     gnu.mapping.CallContext.runUntilValue(CallContext.java:669)
>     gnu.mapping.Procedure.apply1(Procedure.java:154)
>     kawa.lang.Macro.expand(Macro.java:205)
>     kawa.lang.Macro.scanForm(Macro.java:225)
>     kawa.lang.Translator.scanForm(Translator.java:1623)
>     kawa.lang.Translator.scanBody(Translator.java:1680)
>     kawa.standard.begin.scanForm(begin.java:23)
>     kawa.lang.Translator.scanForm(Translator.java:1623)
>     gnu.kawa.lispexpr.LispLanguage.parse(LispLanguage.java:117)
>     gnu.expr.Language.parse(Language.java:765)
>     gnu.expr.Language.parse(Language.java:759)
>     gnu.kawa.io.JLineInPort.parse(JLineInPort.java:97)
>
> org.jline.reader.impl.LineReaderImpl.acceptLine(LineReaderImpl.java:2982)
>     org.jline.reader.impl.LineReaderImpl$1.apply(LineReaderImpl.java:3796)
>     org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:665)
>     org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:454)
>     gnu.kawa.io.JLineInPort$KawaParsedLine.parse(JLineInPort.java:292)
>
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>     java.base/java.lang.reflect.Method.invoke(Method.java:580)
>     kawa.Shell.run(Shell.java:261)
>     kawa.Shell.run(Shell.java:196)
>     kawa.Shell.run(Shell.java:183)
>     kawa.repl.processArgs(repl.java:724)
>     kawa.repl.main(repl.java:830)
>
> optimizer-parse-square-brackets-arguments-lister-syntax is unbound but
> imported in optimizer-parse-square-brackets
>
> regards,
> Damien
>
> On Tue, Jun 11, 2024 at 11:08 AM Damien Mattei <damien.mattei@gmail.com>
> wrote:
>
>> ok i make it works, previous message showed and 'first' unbound
>>
>> no explanation because my module works when i test it but does not works
>> in the syntax transformer
>>
>> tracing and debugging lead to 'first' unbound BUT first is in srfi 1 and
>> i import it in the module that works when i test it outside the syntax
>> transformer use:
>>
>> (define-library (operators) ; R7RS
>>
>>   (import (kawa base)
>>  (srfi 1)
>>  (syntax))
>>
>>   (export definition-operator
>>  assignment-operator
>>
>>  infix-operators-lst-for-parser
>>
>>  definition-operator-syntax
>>  assignment-operator-syntax
>>
>>  infix-operators-lst-for-parser-syntax
>>  get-infix-operators-lst-for-parser-syntax
>>
>>  operators-lst
>>  operators-lst-syntax
>>
>>  operator?
>>  operator-syntax?
>>
>>  operator
>>  arg1
>>  arg2
>>  arg
>>  args
>>
>>  function-without-parameters?
>>  unary-operation?
>>  binary-operation?
>>
>>  AND-op?
>>  OR-op?
>>  XOR-op?
>>  NOT-op?
>>  ADD-op?
>>  IMPLIC-op?
>>  EQUIV-op?
>>  DEFINE-op?
>>  ASSIGNMENT-op?
>>  is-associative-operator?
>>
>>  ;; expression tests
>>  isADD?
>>  MULTIPLY-op?
>>  isMULTIPLY?
>>  isOR?
>>  isAND?
>>  isOR-AND?
>>  isNOT?
>>  isIMPLIC?
>>  isEQUIV?
>>  isXOR?
>>  isDEFINE?
>>  isASSIGNMENT?
>>  isASSOCIATIVE?
>>
>>  )
>>
>>
>> ;;(define first car)
>>
>> (define rest cdr)
>>
>> so why syntax transformer refuse to use 'first' of my well running module?
>>
>> the only solution i found is to comment the (srfi 1) and define myself
>> 'first' in the module operators:
>>
>> (define-library (operators) ; R7RS
>>
>>   (import (kawa base)
>>  ;;(srfi 1)
>>  (syntax))
>>
>>   (export definition-operator
>>  assignment-operator
>>
>>  infix-operators-lst-for-parser
>>
>>  definition-operator-syntax
>>  assignment-operator-syntax
>>
>>  infix-operators-lst-for-parser-syntax
>>  get-infix-operators-lst-for-parser-syntax
>>
>>  operators-lst
>>  operators-lst-syntax
>>
>>  operator?
>>  operator-syntax?
>>
>>  operator
>>  arg1
>>  arg2
>>  arg
>>  args
>>
>>  function-without-parameters?
>>  unary-operation?
>>  binary-operation?
>>
>>  AND-op?
>>  OR-op?
>>  XOR-op?
>>  NOT-op?
>>  ADD-op?
>>  IMPLIC-op?
>>  EQUIV-op?
>>  DEFINE-op?
>>  ASSIGNMENT-op?
>>  is-associative-operator?
>>
>>  ;; expression tests
>>  isADD?
>>  MULTIPLY-op?
>>  isMULTIPLY?
>>  isOR?
>>  isAND?
>>  isOR-AND?
>>  isNOT?
>>  isIMPLIC?
>>  isEQUIV?
>>  isXOR?
>>  isDEFINE?
>>  isASSIGNMENT?
>>  isASSOCIATIVE?
>>
>>  )
>>
>>
>> (define first car)
>>
>>
>> then the syntax transformers works well:
>>
>> #|kawa:1|# (import (nfx))
>> #|kawa:2|# ($nfx$ 3 * 4 + 5)
>> !0-generic : terms=(3 * 4 + 5)
>> !0-generic : operator-precedence=((#<syntax#333 expt in #725>
>>                                    #<syntax#334 ** in #726>)
>>                                   (#<syntax#335 * in #727>
>>                                    #<syntax#336 / in #728>
>>                                    #<syntax#337 % in #729>)
>>                                   (#<syntax#338 + in #730>
>>                                    #<syntax#339 - in #731>)
>>                                   (#<syntax#340 << in #732>
>>                                    #<syntax#341 >> in #733>)
>>                                   (#<syntax#342 & in #734>
>>                                    #<syntax#343 ∣ in #735>)
>>                                   (#<syntax#344 < in #736>
>>                                    #<syntax#345 > in #737>
>>                                    #<syntax#346 = in #738>
>>                                    #<syntax#347 ≠ in #739>
>>                                    #<syntax#348 <= in #740>
>>                                    #<syntax#349 >= in #741>
>>                                    #<syntax#350 <> in #742>)
>>                                   (#<syntax#351 and in #743>)
>>                                   (#<syntax#352 or in #744>)
>>                                   (#<syntax#324 <- in #716>
>>                                    #<syntax#325 -> in #717>
>>                                    #<syntax#326 ← in #718>
>>                                    #<syntax#327 → in #719>
>>                                    #<syntax#328 := in #720>
>>                                    #<syntax#329 <v in #721>
>>                                    #<syntax#330 v> in #722>
>>                                    #<syntax#331 ⇜ in #723>
>>                                    #<syntax#332 ⇝ in #724>)
>>                                   (#<syntax#319 <+ in #711>
>>                                    #<syntax#320 +> in #712>
>>                                    #<syntax#321 ⥆ in #713>
>>                                    #<syntax#322 ⥅ in #714>
>>                                    #<syntax#323 :+ in #715>))
>> !0-generic : rv=(+ (* 3 4) 5)
>>
>> n-arity : expr =(+ (* 3 4) 5)
>> isASSOCIATIVE?
>> make-collect-leaves-operator
>> n-arity : expr =(* 3 4)
>> isASSOCIATIVE?
>> make-collect-leaves-operator
>> ($nfx$ 3 * 4 + 5)
>> 17
>>
>> i got the good result of 3 * 4 + 5 with operator precedence:
>>
>> 17
>>
>>
>>
>> On Tue, Jun 11, 2024 at 9:45 AM Damien Mattei <damien.mattei@gmail.com>
>> wrote:
>>
>>> but i do not modify the bindings,i know it needs accessor for that.
>>> I just use a list (operators list) for computing operator precedence and
>>> it is a bug:
>>>
>>> #|kawa:1|# (import (nfx))
>>> #|kawa:2|# ($nfx$ 3 * 4 + 5)
>>> /dev/tty:2:1: evaluating syntax transformer '$nfx$' threw unbound
>>> location: infix-operators-lst-for-parser-syntax
>>>     gnu.mapping.SharedLocation.get(SharedLocation.java:22)
>>>     gnu.expr.ReferenceExp.apply(ReferenceExp.java:171)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.ApplyExp.apply(ApplyExp.java:161)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.ApplyExp.apply(ApplyExp.java:161)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.LetExp.evalVariable(LetExp.java:26)
>>>     gnu.expr.LetExp.apply(LetExp.java:60)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.IfExp.apply(IfExp.java:41)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.BlockExp.apply(BlockExp.java:58)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.LambdaExp$Closure.applyToConsumer(LambdaExp.java:2144)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.runUntilValue(CallContext.java:669)
>>>     gnu.mapping.Procedure.apply1(Procedure.java:154)
>>>     kawa.lang.Macro.expand(Macro.java:205)
>>>     kawa.lang.Macro.scanForm(Macro.java:225)
>>>     kawa.lang.Translator.scanForm(Translator.java:1623)
>>>     kawa.lang.Translator.scanBody(Translator.java:1680)
>>>     kawa.standard.begin.scanForm(begin.java:23)
>>>     kawa.lang.Translator.scanForm(Translator.java:1623)
>>>     gnu.kawa.lispexpr.LispLanguage.parse(LispLanguage.java:117)
>>>     gnu.expr.Language.parse(Language.java:765)
>>>     gnu.expr.Language.parse(Language.java:759)
>>>     gnu.kawa.io.JLineInPort.parse(JLineInPort.java:97)
>>>
>>> org.jline.reader.impl.LineReaderImpl.acceptLine(LineReaderImpl.java:2982)
>>>
>>> org.jline.reader.impl.LineReaderImpl$1.apply(LineReaderImpl.java:3796)
>>>
>>> org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:665)
>>>
>>> org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:454)
>>>     gnu.kawa.io.JLineInPort$KawaParsedLine.parse(JLineInPort.java:292)
>>>
>>> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>>>     java.base/java.lang.reflect.Method.invoke(Method.java:580)
>>>     kawa.Shell.run(Shell.java:261)
>>>     kawa.Shell.run(Shell.java:196)
>>>     kawa.Shell.run(Shell.java:183)
>>>     kawa.repl.processArgs(repl.java:724)
>>>     kawa.repl.main(repl.java:830)
>>>
>>> if i make an accessor it pass the problem,fail on other thing i'm
>>> investigating, here is after modification and with debug output:
>>>
>>> #|kawa:1|# (import (nfx))
>>> #|kawa:2|# ($nfx$ 3 * 4 + 5)
>>> !0-generic : terms=(3 * 4 + 5)
>>> !0-generic : operator-precedence=((#<syntax#331 expt in #728>
>>>                                    #<syntax#332 ** in #729>)
>>>                                   (#<syntax#333 * in #730>
>>>                                    #<syntax#334 / in #731>
>>>                                    #<syntax#335 % in #732>)
>>>                                   (#<syntax#336 + in #733>
>>>                                    #<syntax#337 - in #734>)
>>>                                   (#<syntax#338 << in #735>
>>>                                    #<syntax#339 >> in #736>)
>>>                                   (#<syntax#340 & in #737>
>>>                                    #<syntax#341 ∣ in #738>)
>>>                                   (#<syntax#342 < in #739>
>>>                                    #<syntax#343 > in #740>
>>>                                    #<syntax#344 = in #741>
>>>                                    #<syntax#345 ≠ in #742>
>>>                                    #<syntax#346 <= in #743>
>>>                                    #<syntax#347 >= in #744>
>>>                                    #<syntax#348 <> in #745>)
>>>                                   (#<syntax#349 and in #746>)
>>>                                   (#<syntax#350 or in #747>)
>>>                                   (#<syntax#322 <- in #718>
>>>                                    #<syntax#323 -> in #719>
>>>                                    #<syntax#324 ← in #720>
>>>                                    #<syntax#325 → in #721>
>>>                                    #<syntax#326 := in #722> =:
>>>                                    #<syntax#327 <v in #724>
>>>                                    #<syntax#328 v> in #725>
>>>                                    #<syntax#329 ⇜ in #726>
>>>                                    #<syntax#330 ⇝ in #727>)
>>>                                   (#<syntax#317 <+ in #712>
>>>                                    #<syntax#318 +> in #713>
>>>                                    #<syntax#319 ⥆ in #714>
>>>                                    #<syntax#320 ⥅ in #715>
>>>                                    #<syntax#321 :+ in #716> +:))
>>> n-arity : expr =(+ (* 3 4) 5)
>>> ($nfx$ 3 * 4 + 5)
>>> /dev/tty:2:1: evaluating syntax transformer '$nfx$' threw unbound
>>> location: first
>>>     gnu.mapping.SharedLocation.get(SharedLocation.java:22)
>>>     gnu.expr.ReferenceExp.apply(ReferenceExp.java:171)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.ApplyExp.apply(ApplyExp.java:157)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.ApplyExp.apply(ApplyExp.java:161)
>>>     gnu.expr.LambdaExp$Closure.applyToConsumer(LambdaExp.java:2144)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.IfExp.apply(IfExp.java:40)
>>>     gnu.expr.IfExp.apply(IfExp.java:43)
>>>     gnu.expr.IfExp.apply(IfExp.java:43)
>>>     gnu.expr.IfExp.apply(IfExp.java:43)
>>>     gnu.expr.IfExp.apply(IfExp.java:43)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.Expression.eval(Expression.java:67)
>>>     gnu.expr.SetExp.apply(SetExp.java:108)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.BeginExp.apply(BeginExp.java:117)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.LambdaExp$Closure.applyToConsumer(LambdaExp.java:2144)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.LetExp.evalVariable(LetExp.java:26)
>>>     gnu.expr.LetExp.apply(LetExp.java:60)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.IfExp.apply(IfExp.java:41)
>>>     gnu.expr.Expression.applyMethodExpression(Expression.java:41)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.getFromContext(CallContext.java:616)
>>>     gnu.expr.Expression.eval(Expression.java:52)
>>>     gnu.expr.BlockExp.apply(BlockExp.java:58)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.LetExp.apply(LetExp.java:72)
>>>     gnu.expr.LambdaExp$Closure.applyToConsumer(LambdaExp.java:2144)
>>>     gnu.mapping.CallContext.runUntilDone(CallContext.java:586)
>>>     gnu.mapping.CallContext.runUntilValue(CallContext.java:669)
>>>     gnu.mapping.Procedure.apply1(Procedure.java:154)
>>>     kawa.lang.Macro.expand(Macro.java:205)
>>>     kawa.lang.Macro.scanForm(Macro.java:225)
>>>     kawa.lang.Translator.scanForm(Translator.java:1623)
>>>     kawa.lang.Translator.scanBody(Translator.java:1680)
>>>     kawa.standard.begin.scanForm(begin.java:23)
>>>     kawa.lang.Translator.scanForm(Translator.java:1623)
>>>     gnu.kawa.lispexpr.LispLanguage.parse(LispLanguage.java:117)
>>>     gnu.expr.Language.parse(Language.java:765)
>>>     gnu.expr.Language.parse(Language.java:759)
>>>     gnu.kawa.io.JLineInPort.parse(JLineInPort.java:97)
>>>
>>> org.jline.reader.impl.LineReaderImpl.acceptLine(LineReaderImpl.java:2982)
>>>
>>> org.jline.reader.impl.LineReaderImpl$1.apply(LineReaderImpl.java:3796)
>>>
>>> org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:665)
>>>
>>> org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:454)
>>>     gnu.kawa.io.JLineInPort$KawaParsedLine.parse(JLineInPort.java:292)
>>>
>>> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>>>     java.base/java.lang.reflect.Method.invoke(Method.java:580)
>>>     kawa.Shell.run(Shell.java:261)
>>>     kawa.Shell.run(Shell.java:196)
>>>     kawa.Shell.run(Shell.java:183)
>>>     kawa.repl.processArgs(repl.java:724)
>>>     kawa.repl.main(repl.java:830)
>>>
>>> it goes further in n-arity and other functions, so the accessor for
>>> reading data solve the problem. That is not a big problem if a single
>>> getter (accessor) have solved it but perheaps fixing this in Kawa require
>>> important time.
>>>
>>> Damien
>>>
>>> On Tue, Jun 11, 2024 at 3:58 AM Per Bothner <per@bothner.com> wrote:
>>>
>>>>
>>>>
>>>> On 6/10/24 4:50 PM, Damien Mattei via Kawa wrote:
>>>> > it seems variable are not allowed to be exported but only a procedure,
>>>>
>>>> That is not quite correct, if I recall correctly:
>>>> What you cannot do is modify an imported binding.
>>>>
>>>> Of course, there might be bugs in the implementation (which I don't
>>>> have time to debug)
>>>> that conflict the intent.
>>>> --
>>>>         --Per Bothner
>>>> per@bothner.com   http://per.bothner.com/
>>>>
>>>


More information about the Kawa mailing list