SET_LEX_STATE(EXPR_END); %F fi OFBOFXBDUJPOUPDBMM*OUFHFSTVDD 5IF fi STUXFOFFEUPEPJTUPUFMMUIFTDBOOFSUIBUUIJT FYQSFTTJPOFOETXIFO JTSFBE 5IJTJTOFFEFEUPQSFWFOUUIFTDBOOFSSFBETUIFOFYU UPLFOBGUFS BOEDBVTJOHBTZOUBYFSSPS5PEPTP DBMMUIFNBDSP4&5@-&9@45"5&XJUI&913@&/% 5FSNJOBUFUIJTFYQSFTTJPO /PUFUIFEF fi OJUJPOPGBDUJPOTJTTMJHIUMZTJNQMJ fi FEJOUIJTTMJEF
SET_LEX_STATE(EXPR_END); ??? %F fi OFBOFXBDUJPOUPDBMM*OUFHFSTVDD /FYU MFUT fi OBMMZDBMM*OUFHFSTVDD )PXDBOXFEPUIBU /PUFUIFEF fi OJUJPOPGBDUJPOTJTTMJHIUMZTJNQMJ fi FEJOUIJTTMJEF
Call Integer#succ, then i is still 0 4P JOTUFBEPG*OUFHFSTVDD MFUTDBMMTPNFPUIFS UIBUDBOBTTJHOUIFJODSFNFOUFEWBMVFUPUIFSFDFJWFS i = 0 i++ # => Call some other method, then i becomes 1 $BMMJOHBNFUIPEXJUIA A SFWJTFE NFUIPE
# ... %F fi OF*OUFHFS@@QMVTQMVT@@ *OUFHFS@@QMVTQMVT@@DBOCFDBMMFEMJLFUIJT JOB3VCZTDSJQU *UBTTJHOTBOJODSFNFOUFEWBMVFUPUIFSFDFJWFS # In a Ruby script i = 0 i.__plusplus__("i", binding) i # => 1 1BTTUIFBSHVNFOUT ɾWBSJBCMFOBNF ɾ,FSOFMCJOEJOH
// ... VALUE v = QUOTE_ID($1->u1.id); NODE *receiver = NEW_LIT(v, &NULL_LOC); .PEJGZUIFBDUJPOUPDBMM*OUFHFS@@QMVTQMVT@@ $SFBUFB7"-6&PG4USJOHGSPNUIFWBSJBCMFJE BOEDSFBUFBO3/PEFPGBMJUFSBMGSPNUIJTWBMVF *UDBOCFUIF fi STUBSHVNFOUPG*OUFHFS@@QMVTQMVT@@ "O3/PEFUIBUJTBTUSJOHMJUFSBMGSPNUIF7"-6& 7"-6&PGUIFTUSJOHGSPNUIFWBSJBCMFJE /PUFUIFEF fi OJUJPOPGBDUJPOTJTTMJHIUMZTJNQMJ fi FEJOUIJTTMJEF
# ruby/test.rb i = 0 i++ p i JJTOPXJODSFNFOUFE 5IFOUIFDPNQJMBUJPOTVDDFFEFE BOEUIFWBSJBCMFXBT BTTJHOFEBOJODSFNFOUFEWBMVF 5IFJNQMFNFOUBUJPOPG JTTVDDFTTGVM
{ // ... SET_LEX_STATE(EXPR_END); VALUE v = QUOTE_ID($1->u1.id); 5IFSFBTPOJTUIBUUIJTJNQMFNFOUBUJPOOFFET UIFWBSJBCMFJEPGUIFSFDFJWFS 8FUSZUPHFUUIFWBSJBCMFJEVOEFSUIFBTTVNQUJPO UIBUUIF3/PEFPGUIFSFDFJWFSPCKFDUIBTJU &YQFDUJOHJTBO3/PEF UIBUIBTUIFWBSJBCMFJE /PUFUIFEF fi OJUJPOPGBDUJPOTJTTMJHIUMZTJNQMJ fi FEJOUIJTTMJEF
| var_lhs tOP_ASGN lex_ctxt arg_rhs // ... | ???? %F fi OFBOFXHSBNNBSSVMF /FYU EF fi OFBOFXHSBNNBSSVMFGPSA A 4JODFBHSBNNBSSVMFGPSBTDSJQUTVDIBTAJ AJT EF fi OFEJOQBSTFZ MFUTEF fi OFUIFOFXPOFOFBSIFSF %F fi OFUIFOFXHSBNNBSSVMF "HSBNNBSSVMFGPS 3VCZTDSJQUTMJLFAJ A
5IFNJEEMFPOF MFY@DUYU JTOPUTPSFMFWBOUUIJTUJNF TPTLJQJU WBS@MITJTUIFMFGUTJEFPGA A BOEU*/$01JTA A MFY@DUYUJTOPUTPSFMFWBOU TPXFTLJQJU 5IJTNBLFTFYQSFTTJPOTMJLFAJ AWBMJEBTBTZOUBY 5IFTFTZNCPMTNFBOTʜ J # In a Ruby script i++ OPOF %F fi OFBOFXHSBNNBSSVMF
{ SET_LEX_STATE(EXPR_END); ??? /FYU MFUTEPUIFTBNFUIJOHBTA A )PXDBOXFEPUIBU /PUFUIFEF fi OJUJPOPGBDUJPOTJTTMJHIUMZTJNQMJ fi FEJOUIJTTMJEF %F fi OFBOFXBDUJPOUPEPUIFTBNFUIJOHA AEPFT