📄 flip-flop
字号:
PP(pp_range){ if (GIMME == G_ARRAY) return NORMAL; if (SvTRUEx(PAD_SV(PL_op->op_targ))) return cLOGOP->op_other; else return NORMAL;}pp_range is a LOGOP.In list context, it just returns op_next.In scalar context it checks the truth of targ and returnsop_other if true, op_next if false.flip is an UNOP.It "looks after" its child which is always a pp_range LOGOP.In list context, it just returns the child's op_other.In scalar context, there are three possible outcomes: (1) set child's targ to 1, our targ to 1 and return op_next. (2) set child's targ to 1, our targ to 0, sp-- and return child's op_other. (3) Blank targ and TOPs and return op_next.Case 1 happens for a "..." with a matching lineno... or true TOPs.Case 2 happens for a ".." with a matching lineno... or true TOPs.Case 3 happens for a non-matching lineno or false TOPs. $a = lhs..rhs; ,-------> range ^ / \ | true/ \false | / \ first| lhs rhs | \ first / ^--- flip <----- flop \ / \ / sassign/* range */if (SvTRUE(curpad[op->op_targ])) goto label(op_other);/* op_next */.../* flip *//* For "..." returns op_next. For ".." returns op_next or op_first->op_other *//* end of basic block */goto out;label(range op_other):.../* flop */out:...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -