我们阅读了每一条反馈,并非常认真地对待您的意见。
要查看所有可用的限定符,请参阅我们的文档.
对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。
单击“注册GitHub”,表示您同意我们的服务条款和隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。
已经在GitHub上了?登录到您的帐户
绑定
110.99.4(最新)
无响应
核心系统
次要
阐述者提出了一个绑定处理具有类型错误和不透明签名的结构时发生异常。
%sml错误.sml新泽西州标准ML(64位)v110.99.4[建造日期:2023年8月1日星期二16:07:38][打开bug.sml][自动加载][库$SMLNJ-BASIS/BASIS.cm稳定][库$SMLNJ-BASIS/(BASIS.cm):BASIS-common.cm稳定][自动加载完成]bug.sml:41.32-43.37错误:规则类型不一致[循环性]早期规则:('Z->'Y)结果->'Y结果此规则:('Z->'Y)结果->('Z->'Y)在规则中:err=>错误bug.sml:1.2-52.6错误:结构中的值类型与签名规范不匹配名称:字段规范:字符串->“a?”?。JSON解码.decoder->('a->'b)?。JSONDecode.decoder->“b”?。JSON解码.decoder实际:字符串->“a?”?。JSON解码.decoder->('a->'a)?。JSONDecode.decoder->'a?。JSON解码器未捕获异常绑定[非穷尽绑定失败]提出时间:/compiler/Elaborator/extensiol/elabmod.sml:624.13-624.67../compiler/Elaborator/expective/elabmod.sml:1363.32../compiler/Basics/stats/stats.sml:198.40../compiler/TopLevel/interact/evalloop.sml:45.54../compiler/TopLevel/interact/evalloop.sml:306.20-306.23
不应该有未捕获的绑定例外。
以下是重现该错误的源代码:
结构JSON解码:>信号发生器datatype“a result=exn的错误| Ok of”a键入“a解码器”(*解码必填字段*) val值字段:字符串->“a解码器->('a->'b)解码器->”b解码器结束=结构 数据类型价值=对象属于(字符串*值)列表|阵列属于价值清单|空|BOOL公司属于布尔|内部属于国际信息网|浮动属于真实的|字符串属于一串例外未找到字段属于value*字符串例外无对象属于价值乐趣 查找字段(五)作为OBJECT字段)=让 乐趣 找到实验室=(案例列表.find(fn公司(l,v)=>(l=实验室)字段属于 无=>提升未找到字段(v,concat["字段没有定义\"",实验室,"\""])|一些(_,v)=>v(*终端盒*))在里面找到结束|查找字段v=提升无对象v数据类型'a result=错误属于exn |确定属于“a数据类型'解码器=D属于value->'结果(*解码必填字段*) 乐趣 领域键(D值解码器)(D对象解码器)=让 乐趣 解码器jv=(案例值解码器(lookupField jv键)属于好的fld=>(案例obj解码器jv属于确定mkObj=>确定(mkObj fld)|err=>错误(*终端盒*))|err=>错误(*终端盒*))手柄ex=>错误ex在里面D解码器结束 结束
请注意,更改:>到:因为签名归属导致错误消失。
:>
:
jhr@cs.uchicago.edu
文本已成功更新,但遇到以下错误:
此问题(bug)似乎与问题285(静态签名匹配错误后的绑定异常)密切相关。下面是一个生成绑定异常行为的简单得多的测试用例。
签名S=信号发生器val f:'a->'b结束;结构A:>S=(*需要不透明的归属*)结构乐趣f x=x结束;
对不起,出了点问题。
对elabmod.sml和sigmatch.sml有一个相当温和的修复,其中涉及让sigmatch.matchStr返回一个选项结果,如果签名匹配失败,该结果将为NONE,而不是“伪”记录。此修复程序消除了问题$285和#289,但它有一个意外的副作用,即在编译dummy.sml时,不允许旧编译器在初始化阶段使用未绑定的lambda var异常引导。因此,在提交修复之前,需要修复这个奇怪的副作用。
尝试修复 #285 和 #289,引导程序在初始化编译du时失败…
92d591亿
…我的.sml
修复问题 #285, #289 (sigmatch失败后未捕获绑定
7cb5dc1型
提交了第二次成功修复#285和#289。此修复程序为ErrorMsg.severity引入了另一个严重性构造函数“TERMINAL”。当此严重性传递给ErrorMsg.error函数时,会打印错误消息并显示ErrorMs。出现错误,正在终止编译。因此,对于由#285(规格不匹配)和#289(val-spec-type不匹配),则不会尝试通过从sigMatch返回虚假结果来恢复错误。警告:还有几个其他的签名匹配失败模式,其处理方式没有改变,因此在其他情况下,可能会在签名匹配失败后尝试恢复,导致ElabMod中的constrStr函数出现未捕获的BIND异常。完整的修复需要处理Elaborator/modules/sigmatch.sml中的所有签名匹配故障模式。
德马奎恩
没有分支或拉请求