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