Skip to content

Parser 仍接受 5 类 Python 3 非法参数与字典语法 #367

Description

@pikasTech

目标合并分支: master

问题

批量语法探针确认当前 parser 仍会接受以下 Python 3 非法语法,并返回编译成功:

  • 默认参数后出现必选参数:def f(a=1, b): ...
  • 重复形参:def f(a, a): ...
  • keyword 实参后出现位置实参:f(a=1, 2)
  • 同一次调用重复 keyword:f(a=1, a=2)
  • 字典键值缺少冒号:x = {'a' 1}

期望

  • 编译阶段稳定返回 PIKA_RES_ERR_SYNTAX_ERROR
  • 不进入 VM,不触发断言、越界或崩溃。
  • 不扩大 PikaPython 支持的语法范围,不改变 parser/VM 大架构。

实施边界

  • 先用表驱动测试固定以上 5 项及对应合法反例。
  • 正确性阶段允许有界、量化的临时 RAM/Flash 增量。
  • 性能与资源占用在独立阶段回收,不因当轮尺寸门槛撤销正确性修复。
  • default/minimal 分别记录 text/data/bss,网络、LVGL 和其他非语法依赖可隔离。

R13 后续修复与验证

本地分支 fix/syntax-compat-issues 已完成 R13,提交为 ed6948738

  • 修复 //% 除零崩溃和负数 Python 3 语义。
  • 修复前导一元负号与非幂运算符优先级。
  • 混合位置参数与关键字参数同名时返回 TypeError,覆盖默认参数、必选参数、对象方法和多位置参数后的栈恢复。
  • 对当前子集不支持的比较链和 finally 在 parser 阶段稳定返回语法错误,避免运行期错误执行或静默跳过。
  • Linux default 定向回归 36/36,minimal 全量回归 225/225。
  • 相对 R12 基线,default/minimal 的 text 分别增加 1168/1160 B,data/bss 不变;FunctionArgsInfo 保持 88 B,runtime A/B 未发现可信退化。

该提交尚未合并到 master,因此本 issue 保持打开。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions