Le Monday 15 May 2017 20:51:11 Per Bothner, vous avez écrit :
> I checked in a fix, in both the master and kawa-2.4 branches.
>
> The bug only happened when the value of (html:td result) is not used.
> You might say: But it is used in:
> (set! html-literal-table-data-code
> (html:td result))
>
> No, because html-literal-table-data-code is not used, so the assignment
> is ignored (except for possible side-effects).
hello Per,
it seems the bug is still active under some circumstances,
i have made a few modif. in the code and even if the literal is used i have the same error:
mattei@moita Jkawa]$ java -cp /home/mattei/kawa-2.4/lib/kawa.jar:/home/mattei/NetBeansProjects/Sidonie/build/web/WEB-INF/classes kawa.repl --output-format html -C DBtoWebObserversKawa.scm
(compiling DBtoWebObserversKawa.scm to eu.oca.kawafunct.DBtoWebObserversKawa)
Exception in thread "main" java.lang.Error: gnu.kawa.xml.MakeElement does not implement Externalizable
at gnu.expr.LitTable.error(LitTable.java:122)
at gnu.expr.LitTable.writeObject(LitTable.java:282)
at gnu.expr.LitTable.emit(LitTable.java:85)
at gnu.expr.Compilation.generateBytecode(Compilation.java:2210)
at gnu.expr.Compilation.process(Compilation.java:1943)
at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:306)
at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:288)
at kawa.repl.compileFiles(repl.java:780)
at kawa.repl.processArgs(repl.java:441)
at kawa.repl.main(repl.java:820)
i have make some development in the code, and i cannot tell exactly what is the new instructions causing the same error again,
i compiled it with the latest stable kawa-2.4 binary, i suppose your fixs are in the binary too.
i have provided the source code in attachment, it should compile till it reach the error the same way on your host than on mine (i have commeted out some include scheme files from my library
but there is no concern about that to compile)
youn can compile it with your 2.4 kawa version like this:
java -cp kawa-2.4.jar kawa.repl --output-format html -C DBtoWebObserversKawa.scm
i suppose the news instructions causing the trouble are in those part of my code:
in a let i assign option-lst to '(DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs")
and use it here:
;; HTML table with options
;; Kawa offers simple slicing: @ not in Scheme R7RS
(set! html-literal-table
(html:table @option-lst @literal-rows-list))
;; HTML
(set! html-literal
(html:td align: "center" html-literal-table))
(set! html-literal-str (html-literal:toString))
(display-msg-var-nl "DBtoWebObserversKawa : work : html-literal-str = " html-literal-str)
(display-msg-var-nl "DBtoWebObserversKawa : work : res = " res)
(append-string-to-result html-literal-str)
but i also add some change in the literals in the WHILE loop before,
is uppose if i revert all the changes it will compile again at some point...
i had made some test in REPL before coding and all was good exept one time the REPL exit to shell after an error,
i have made a lot of test here is a sample that lead to error in shell (i admit my literal input was strange...):
[mattei@moita bin]$ ./kawa --output-format html
#|kawa:1|# (html:td "foo")
foo |
#|kawa:2|# (define td1 (html:td "foo"))
#|kawa:3|# (define td-lst (list td1 td1 td1))
#|kawa:4|# td-lst
foo | foo | foo |
#|kawa:5|# (car td-lst)
foo |
#|kawa:6|# (eval `(html:table ,td-lst))
java.lang.NullPointerException
at gnu.xml.XMLPrinter.getHtmlTag(XMLPrinter.java:525)
at gnu.xml.XMLPrinter.startElement(XMLPrinter.java:498)
at gnu.lists.TreeList.consumeIRange(TreeList.java:1252)
at gnu.lists.TreeList.consumeNext(TreeList.java:1080)
at gnu.xml.XMLPrinter.writeObject(XMLPrinter.java:723)
at gnu.kawa.xml.NodeConstructor.popNodeContext(NodeConstructor.java:67)
at atEvalLevel-1.run()
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.lang.Eval.evalBody(Eval.java:100)
at kawa.lang.Eval.evalForm$X(Eval.java:27)
at kawa.lib.scheme.eval.eval$X(eval.scm:9)
at kawa.lib.scheme.eval.eval$X(eval.scm)
at atInteractiveLevel-6.run(stdin:6)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
<{null name}
#|kawa:7|# `(html:table td-lst)
#|kawa:8|# `(html:table ,td-lst)
#|kawa:9|# (apply html:table td-lst)
#|kawa:10|# (define bar (apply html:table td-lst))
#|kawa:11|# bar
#|kawa:12|# (display bar)
#|kawa:13|# (define bar2 `(html:table ,td-lst))
#|kawa:14|# bar2
#|kawa:15|# (display bar2)
(html:table
(foo |
foo |
foo | ))
#|kawa:16|# td-lst
#|kawa:17|# (display td-lst)
(foo |
foo |
foo | )
#|kawa:18|# DIR:
/dev/stdin:18:1: warning - keyword should be quoted if not in argument position
java.lang.RuntimeException: attribute 'DIR' follows non-attribute content
at gnu.xml.XMLFilter.error(XMLFilter.java:1474)
at gnu.xml.XMLFilter.startAttribute(XMLFilter.java:963)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:700)
at atInteractiveLevel-18.run(stdin:18)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
#|kawa:19|# (define option-lst '(DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs"))
#|kawa:20|# option-lst
java.lang.RuntimeException: attribute 'DIR' follows non-attribute content
at gnu.xml.XMLFilter.error(XMLFilter.java:1474)
at gnu.xml.XMLFilter.startAttribute(XMLFilter.java:963)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:700)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:695)
at gnu.mapping.Values.writeValues(Values.java:226)
at atInteractiveLevel-20.run(stdin:20)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
#|kawa:21|# td-lst
#|kawa:22|# (display td-lst
#|.....23|# )
(foo |
foo |
foo | )
#|kawa:24|# (append option-lst td-lst)
java.lang.RuntimeException: attribute 'DIR' follows non-attribute content
at gnu.xml.XMLFilter.error(XMLFilter.java:1474)
at gnu.xml.XMLFilter.startAttribute(XMLFilter.java:963)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:700)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:695)
at gnu.mapping.Values.writeValues(Values.java:226)
at atInteractiveLevel-24.run(stdin:24)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
#|kawa:25|# (define option-lst '('DIR: "LTR" 'BORDER: 1 'width: 315 'id: "table_observateurs"))
#|kawa:26|# option-lst
java.lang.RuntimeException: attribute 'DIR' follows non-attribute content
at gnu.xml.XMLFilter.error(XMLFilter.java:1474)
at gnu.xml.XMLFilter.startAttribute(XMLFilter.java:963)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:700)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:695)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:695)
at gnu.mapping.Values.writeValues(Values.java:226)
at atInteractiveLevel-26.run(stdin:26)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
#|kawa:27|# (list DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs")
java.lang.RuntimeException: attribute 'DIR' follows non-attribute content
at gnu.xml.XMLFilter.error(XMLFilter.java:1474)
at gnu.xml.XMLFilter.startAttribute(XMLFilter.java:963)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:700)
at gnu.xml.XMLFilter.writeObject(XMLFilter.java:695)
at gnu.mapping.Values.writeValues(Values.java:226)
at gnu.mapping.CallContext.writeValue(CallContext.java:333)
at gnu.mapping.Procedure.apply(Procedure.java:153)
at gnu.mapping.Procedure.apply(Procedure.java:118)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:227)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:349)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
#|kawa:28|# (define tbl-rows (apply html:tr td-lst))
#|kawa:29|# tbl-rows
#|kawa:30|# (display tbl-rows)
foo | foo | foo |
#|kawa:31|# html:table
#|kawa:32|# list
#|kawa:33|# car
#|kawa:34|#
#|kawa:35|# (define option-lst '(DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs"))
#|kawa:36|# `(html-table ,@option-lst ,@tbl-rows)
Exception in thread "main" java.lang.Error: expected list in quasi-quote splicing
at kawa.lang.Quote.append$V(Quote.java:418)
at atInteractiveLevel-36.run(stdin:36)
at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:292)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211)
at kawa.Shell.run(Shell.java:283)
at kawa.Shell.run(Shell.java:196)
at kawa.Shell.run(Shell.java:183)
at kawa.repl.processArgs(repl.java:714)
at kawa.repl.main(repl.java:820)
shell exit here
another run that does not exit with error to shell:
[mattei@moita bin]$ ./kawa --output-format html
#|kawa:1|# (define option-lst '(DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs"))
#|kawa:2|# (define td1 (html:td "foo"))
#|kawa:3|# (define td-lst (list td1 td1 td1))
#|kawa:4|# td-lst
foo | foo | foo |
#|kawa:5|# (car td-lst)
foo |
#|kawa:6|# (display td-lst)
(foo |
foo |
foo | )
#|kawa:7|# (define tbl-rows (apply html:tr td-lst))
#|kawa:8|# (display tbl-rows)
foo | foo | foo |
#|kawa:9|# (html:tr @td-lst)
foo | foo | foo |
#|kawa:10|# (map html:tr td-lst)
foo |
foo |
foo |
#|kawa:11|# (define tbl-row-lst (map html:tr td-lst))
#|kawa:12|# tbl-row-lst
foo |
foo |
foo |
#|kawa:13|# (html:table DIR: "LTR" BORDER: 1 width: 315 id: "table_observateurs" @tbl-row-lst)
#|kawa:14|# (html:table @option-lst @tbl-row-lst)
#|kawa:15|# (display option-lst)
(DIR: LTR BORDER: 1 width: 315 id: table_observateurs)
#|kawa:16|# `(html-table ,@option-lst ,@tbl-row-lst)
html-table DIR=" LTR " BORDER=" 1 " width=" 315 " id=" table_observateurs
|
#|kawa:17|# (exit)
Vous avez du nouveau courrier dans /var/spool/mail/mattei
[mattei@moita bin]$ pwd
/home/mattei/kawa-2.4/bin
those examples are with kawa-2.4, the last one run well, but when i do similar thing in code i have the error
i also test if first with kawa-2.1 as i expected it to do not make error if the literal was used
regards,
damien
included file: DBtoWebObserversKawa.scm