| name | function-docs |
| description | Describe how functions are represented, registered, and executed in Origami (user functions and built-ins). Use when the user asks about function behavior, parameters, returns, generators, or wants to update function-related documentation. |
函数体系文档(用户函数 + 内置函数)
使用时机
当用户:
- 询问「函数是怎么定义/调用的」「生成器函数是怎么实现的」「补充函数」
- 关心函数的「参数绑定 / 默认值 / 引用参数 / 可变参数」「返回值类型校验」
- 想在
docs/ 中补充或统一函数相关文档
就按本 Skill 的思路来回答或写文档。
std/php 目录中的函数实现(例如 empty、isset、各种字符串/数组函数)只是用来帮助理解和举例,不是强制规范;解释语义时可以引用它们,但不用把实现细节写成「必须这样做」的约束。
核心概念速览
回答设计(函数相关问题)
当用户问到函数时,可以按以下顺序组织回答:
- 先区分两类函数
- 用户定义函数:Parser→
FunctionStatement→注册到 VM/TempVM→Call
- 内置函数:
std/php 中的 data.FuncStmt 实现→php.Load(vm) 中注册
- 再讲执行模型
- 调用时如何创建上下文、绑定参数(结合参数节点与
data.Types)
- 如何处理返回值(包括返回值类型校验)
- 如何处理
yield 生成器、异常与错误堆栈
- 最后用
std/php 做例子
- 选一两个函数(如
empty、isset、ReflectionClass::newInstance)简单引用代码片段,说明语义是如何在运行时落地的。
文档编写建议
在项目的 docs/ 中补充函数相关文档时,推荐拆成三个章节,并结合现有 Skill:
- 运行容器与解释器背景(引用
interpreter-docs)
- 简述 VM/TempVM 作为运行容器的角色,以及 Parser/子解析器的作用
- 函数模型
- 用户函数:
FunctionStatement 结构、注册与调用流程、返回值类型检查
- 内置函数:
data.FuncStmt 接口模式、php.Load(vm) 注册点,必要时用 std/php 中的实现做例子
- 参数与类型系统(引用
param-types-docs)
- 参数语法(联合/可空/引用/可变参数)
data.Types 的核心概念与运行时检查
写文档时,把 std/php 当作「现成的、可信的示例代码库」,用于举例或验证理解;真正的规范应当来自 AST、运行容器和类型系统三者如何协同工作这一层。