@@ -804,11 +804,11 @@ impl Parser {
804804 bad ( p, w, fname) ;
805805 }
806806 }
807- // kv. set 成员形(3 读:base, key, val)改写 base 的成员目录,命中读参**或别名**即拒绝。
807+ // kvspace· set 成员形(3 读:base, key, val)改写 base 的成员目录,命中读参**或别名**即拒绝。
808808 // 被写的参数**必须**声明在写参侧(签名诚实原则)——要就地改调用方的对象,
809809 // 就把该参数写到 `-> (p:Point)` 里,而不是留在读参侧靠别名绕。
810810 if let Some ( e) = & inst. expr {
811- if e. op == "kv ·set" && e. args . len ( ) >= 3 {
811+ if e. op == "kvspace ·set" && e. args . len ( ) >= 3 {
812812 let base = & e. args [ 0 ] . val ;
813813 if !base. contains ( '/' ) && ( ro. contains ( base) || tainted. contains_key ( base) ) {
814814 if ro. contains ( base) {
@@ -1274,8 +1274,8 @@ impl Parser {
12741274
12751275 fn parse_pratt ( & mut self , min_prec : i32 ) -> Option < Expr > {
12761276 let mut left = self . parse_primary_expr ( ) ?;
1277- // 成员链:base + 各段收集成单个变参 kv ·get(base, seg1, seg2, ...),runtime 直接拼路径。
1278- // 不在 layout 摊成嵌套 kv ·get(内层返回的是值,丢路径,#110)。每段为静态字面量或
1277+ // 成员链:base + 各段收集成单个变参 kvspace ·get(base, seg1, seg2, ...),runtime 直接拼路径。
1278+ // 不在 layout 摊成嵌套 kvspace ·get(内层返回的是值,丢路径,#110)。每段为静态字面量或
12791279 // 动态键(*k 的变量)。
12801280 let mut chain_base: Option < Expr > = None ;
12811281 let mut chain_segs: Vec < Expr > = Vec :: new ( ) ;
@@ -1327,11 +1327,11 @@ impl Parser {
13271327 continue ;
13281328 }
13291329 }
1330- // 成员链被打断(下标/中缀/循环尾):flush 成单个变参 kv ·get。
1330+ // 成员链被打断(下标/中缀/循环尾):flush 成单个变参 kvspace ·get。
13311331 if let Some ( base) = chain_base. take ( ) {
13321332 let mut args = vec ! [ base] ;
13331333 args. append ( & mut chain_segs) ;
1334- left = ast:: call ( "kv ·get" , args) ;
1334+ left = ast:: call ( "kvspace ·get" , args) ;
13351335 }
13361336 // 后缀索引
13371337 if self . peek ( ) . kind == Kind :: LBrack {
@@ -1349,8 +1349,8 @@ impl Parser {
13491349 let is_path = left. is_leaf ( ) && left. val . starts_with ( '/' ) ;
13501350 let mut args = vec ! [ left] ;
13511351 args. extend ( indices) ;
1352- // 路径字面量 + [idx] → kv. get(KV 路径成员访问);否则 xv.at(compact 数组元素)。
1353- left = ast:: call ( if is_path { "kv ·get" } else { "xv·at" } , args) ;
1352+ // 路径字面量 + [idx] → kvspace· get(KV 路径成员访问);否则 xv.at(compact 数组元素)。
1353+ left = ast:: call ( if is_path { "kvspace ·get" } else { "xv·at" } , args) ;
13541354 continue ;
13551355 }
13561356 let t = self . peek ( ) ;
@@ -1368,7 +1368,7 @@ impl Parser {
13681368 if let Some ( base) = chain_base. take ( ) {
13691369 let mut args = vec ! [ base] ;
13701370 args. append ( & mut chain_segs) ;
1371- left = ast:: call ( "kv ·get" , args) ;
1371+ left = ast:: call ( "kvspace ·get" , args) ;
13721372 }
13731373 Some ( left)
13741374 }
@@ -1407,12 +1407,12 @@ impl Parser {
14071407 if symbol:: lookup ( & t. value ) . word == "add" {
14081408 return self . parse_pratt ( UNARY_PREC ) ;
14091409 }
1410- // 一元前缀 & = 取址:&x ≡ kv ·abs(x)(中缀 & 仍为按位与,走 pratt 中缀路径)。
1411- // & 对成员链 kv ·get(base, segs...) → kv ·abs(base, segs...):取成员路径地址,非读值取址。
1410+ // 一元前缀 & = 取址:&x ≡ kvlang ·abs(x)(中缀 & 仍为按位与,走 pratt 中缀路径)。
1411+ // & 对成员链 kvspace ·get(base, segs...) → kvlang ·abs(base, segs...):取成员路径地址,非读值取址。
14121412 if symbol:: lookup ( & t. value ) . word == "bitand" {
14131413 let arg = self . parse_pratt ( UNARY_PREC ) ?;
1414- let op = format ! ( "kv {}abs" , keytree:: MEMBER_SEP ) ;
1415- let get = format ! ( "kv {}get" , keytree:: MEMBER_SEP ) ;
1414+ let op = format ! ( "kvlang {}abs" , keytree:: MEMBER_SEP ) ;
1415+ let get = format ! ( "kvspace {}get" , keytree:: MEMBER_SEP ) ;
14161416 if arg. op == get && arg. args . len ( ) >= 2 {
14171417 return Some ( ast:: call ( & op, arg. args ) ) ;
14181418 }
@@ -1897,7 +1897,7 @@ impl Parser {
18971897 if ( t. kind == Kind :: Ident || is_path_literal) && self . peek_at ( 1 ) . kind == Kind :: Dot {
18981898 let mut w = self . advance ( ) . value ;
18991899 // 成员链写槽:整段 p·obj·deep 收成单个 write 槽,交给 desugar_member_write
1900- // 拆成 kv ·set(base, "obj·deep", v)。勿在每段 · 处截断(否则 deep 被当独立写槽)。
1900+ // 拆成 kvspace ·set(base, "obj·deep", v)。勿在每段 · 处截断(否则 deep 被当独立写槽)。
19011901 while self . peek ( ) . kind == Kind :: Dot {
19021902 self . advance ( ) ; // .
19031903 w. push_str ( keytree:: MEMBER_SEP ) ;
@@ -2054,7 +2054,7 @@ impl Parser {
20542054 }
20552055
20562056 // 下标写脱糖:arr[i,j] 写槽 + 值 e → xv·set(arr, i, j, e) -> arr(compact 数组,
2057- // 读侧 arr[i,j]→xv·at 的对称)。arr· 前缀坐标或 / 路径 → kv ·set。左右箭头共用:
2057+ // 读侧 arr[i,j]→xv·at 的对称)。arr· 前缀坐标或 / 路径 → kvspace ·set。左右箭头共用:
20582058 // = 时 e 是 pratt 右值,-> 时 e 是箭头左值,语义一致。layout 不判维数,交给 runtime。
20592059 fn desugar_subscript_write ( & mut self , inst : & mut Instruction ) {
20602060 if inst. writes . len ( ) != 1 || !inst. writes [ 0 ] . contains ( '[' ) {
@@ -2068,7 +2068,7 @@ impl Parser {
20682068 let dot_coord = arr. ends_with ( keytree:: MEMBER_SEP ) ;
20692069 let arr = arr. trim_end_matches ( keytree:: MEMBER_SEP ) . to_string ( ) ;
20702070 let op = if dot_coord || arr. starts_with ( '/' ) {
2071- "kv ·set"
2071+ "kvspace ·set"
20722072 } else {
20732073 "xv·set"
20742074 } ;
@@ -2101,13 +2101,13 @@ impl Parser {
21012101 }
21022102 let s = inst. writes [ 0 ] . clone ( ) ;
21032103 // 路径字面量(/ 开头)是完整 key,不是成员写,勿脱糖——**但含动态键段 `·*k` 的除外**:
2104- // 那时 `·` 之后是运行期求值的段,必须脱糖成 kv ·set(base, k, v) 才能取到 k 的值
2104+ // 那时 `·` 之后是运行期求值的段,必须脱糖成 kvspace ·set(base, k, v) 才能取到 k 的值
21052105 // (否则会被当成字面 key `/tmp/ts·*k` 整段写下去)。
21062106 if s. starts_with ( '/' ) && !s. contains ( & format ! ( "{}*" , keytree:: MEMBER_SEP ) ) {
21072107 return ;
21082108 }
2109- // struct 赋值(RHS = struct·new):浅拷 base+一层成员,lower 为 kv ·cplist(struct·new→temp, dst)。
2110- // 不走 kv ·set —— 后者只搬基值,struct 的成员会丢在临时槽。dst 传完整成员槽串,
2109+ // struct 赋值(RHS = struct·new):浅拷 base+一层成员,lower 为 kvspace ·cplist(struct·new→temp, dst)。
2110+ // 不走 kvspace ·set —— 后者只搬基值,struct 的成员会丢在临时槽。dst 传完整成员槽串,
21112111 // runtime ResolveWriteSlot 拼 <frame>+"base·key…" 即成员绝对路径。
21122112 let is_struct_new = inst
21132113 . expr
@@ -2116,13 +2116,13 @@ impl Parser {
21162116 . unwrap_or ( false ) ;
21172117 if is_struct_new && !s. contains ( '*' ) {
21182118 let e = inst. expr . take ( ) . unwrap ( ) ;
2119- inst. expr = Some ( ast:: call ( "kv ·cplist" , vec ! [ e, ast:: leaf( & s) ] ) ) ;
2119+ inst. expr = Some ( ast:: call ( "kvspace ·cplist" , vec ! [ e, ast:: leaf( & s) ] ) ) ;
21202120 inst. writes = Vec :: new ( ) ;
21212121 inst. write_types = Vec :: new ( ) ;
21222122 return ;
21232123 }
2124- // 成员链写槽 p·a·b = v → 变参 kv ·set(p, "a", "b", v),与读侧 #110 一致逐段拼路径。
2125- // 不再按首个 · 压扁成 kv ·set(p, "a·b", v):扁平段把「成员链」与「含 · 的成员名」混为一谈。
2124+ // 成员链写槽 p·a·b = v → 变参 kvspace ·set(p, "a", "b", v),与读侧 #110 一致逐段拼路径。
2125+ // 不再按首个 · 压扁成 kvspace ·set(p, "a·b", v):扁平段把「成员链」与「含 · 的成员名」混为一谈。
21262126 let mut parts = s. split ( keytree:: MEMBER_SEP ) ;
21272127 let base = parts. next ( ) . unwrap_or ( "" ) . to_string ( ) ;
21282128 let mut args = vec ! [ ast:: leaf( & base) ] ;
@@ -2148,8 +2148,8 @@ impl Parser {
21482148 }
21492149 let e = inst. expr . take ( ) ;
21502150 args. push ( e. unwrap_or ( ast:: leaf ( "" ) ) ) ;
2151- // base.a.b = v 脱糖为 kv ·set(base, "a", "b", v):kv ·set 是 void(副作用写成员),无写槽
2152- inst. expr = Some ( ast:: call ( "kv ·set" , args) ) ;
2151+ // base.a.b = v 脱糖为 kvspace ·set(base, "a", "b", v):kvspace ·set 是 void(副作用写成员),无写槽
2152+ inst. expr = Some ( ast:: call ( "kvspace ·set" , args) ) ;
21532153 inst. writes = Vec :: new ( ) ;
21542154 inst. write_types = Vec :: new ( ) ;
21552155 }
0 commit comments