跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

未捕获绑定编译器中具有不透明签名匹配的异常 #289

关闭
12项任务中的2项
JohnReppy公司已打开此问题2023年12月27日·3条评论
关闭
12项任务中的2项

未捕获绑定编译器中具有不透明签名匹配的异常 #289

JohnReppy公司已打开此问题2023年12月27日·3条评论
受让人
标签
缺陷 有些东西不起作用了 编译器 编译器问题 固定在110.99.5中 将在110..99.5版本中修复的问题

评论

@JohnReppy公司
复制链接
贡献者

版本

110.99.4(最新)

操作系统

  • 任何
  • Linux操作系统
  • macOS操作系统
  • 窗户
  • 其他Unix

操作系统版本

无响应

处理器

  • 任何
  • 手臂(使用Rosetta)
  • PowerPC公司
  • 斯巴达克
  • x86(32位)
  • x86-64(64位)
  • 其他

系统组件

核心系统

严重程度

次要

描述

阐述者提出了一个绑定处理具有类型错误和不透明签名的结构时发生异常。

成绩单

%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

@JohnReppy公司 JohnReppy公司补充缺陷 有些东西不起作用了 编译器 编译器问题标签2023年12月27日
@JohnReppy公司 JohnReppy公司更改了标题编译器中带有不透明签名匹配的未捕获绑定异常 未捕获绑定编译器中具有不透明签名匹配的异常 2024年1月30日
@德马奎恩
复制链接
贡献者

此问题(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。此修复程序为ErrorMsg.severity引入了另一个严重性构造函数“TERMINAL”。当此严重性传递给ErrorMsg.error函数时,会打印错误消息并显示ErrorMs。出现错误,正在终止编译。因此,对于由#285(规格不匹配)和#289(val-spec-type不匹配),则不会尝试通过从sigMatch返回虚假结果来恢复错误。警告:还有几个其他的签名匹配失败模式,其处理方式没有改变,因此在其他情况下,可能会在签名匹配失败后尝试恢复,导致ElabMod中的constrStr函数出现未捕获的BIND异常。完整的修复需要处理Elaborator/modules/sigmatch.sml中的所有签名匹配故障模式。

@德马奎恩 德马奎恩补充这个固定在110.99.5中 将在110..99.5版本中修复的问题标签2024年3月5日
免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
缺陷 有些东西不起作用了 编译器 编译器问题 固定在110.99.5中 将在110..99.5版本中修复的问题
项目
还没有
开发

没有分支或拉请求

2名参与者