From 770145a3613b148d5d195e896ff4ca65a8ea7bfd Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 1 Jan 2014 12:40:54 -0800 Subject: [PATCH] feat(builtin): use namespaces when defining nat, int and real. Signed-off-by: Leonardo de Moura --- src/builtin/int.lean | 110 +++++++++++++++++--------------- src/builtin/nat.lean | 46 +++++++------ src/builtin/obj/int.olean | Bin 1752 -> 1664 bytes src/builtin/obj/kernel.olean | Bin 21583 -> 21579 bytes src/builtin/obj/nat.olean | Bin 788 -> 742 bytes src/builtin/obj/real.olean | Bin 1220 -> 1139 bytes src/builtin/obj/specialfn.olean | Bin 1111 -> 1101 bytes src/builtin/real.lean | 72 ++++++++++----------- src/frontends/lean/parser.cpp | 22 ++++--- 9 files changed, 132 insertions(+), 118 deletions(-) diff --git a/src/builtin/int.lean b/src/builtin/int.lean index 72e81e81c7..41f43455d4 100644 --- a/src/builtin/int.lean +++ b/src/builtin/int.lean @@ -2,63 +2,67 @@ Import nat. Variable Int : Type. Alias ℤ : Int. - -Builtin Int::numeral. - -Builtin Int::add : Int → Int → Int. -Infixl 65 + : Int::add. - -Builtin Int::mul : Int → Int → Int. -Infixl 70 * : Int::mul. - -Builtin Int::div : Int → Int → Int. -Infixl 70 div : Int::div. - -Builtin Int::le : Int → Int → Bool. -Infix 50 <= : Int::le. -Infix 50 ≤ : Int::le. - -Definition Int::ge (a b : Int) : Bool := b ≤ a. -Infix 50 >= : Int::ge. -Infix 50 ≥ : Int::ge. - -Definition Int::lt (a b : Int) : Bool := ¬ (a ≥ b). -Infix 50 < : Int::lt. - -Definition Int::gt (a b : Int) : Bool := ¬ (a ≤ b). -Infix 50 > : Int::gt. - -Definition Int::sub (a b : Int) : Int := a + -1 * b. -Infixl 65 - : Int::sub. - -Definition Int::neg (a : Int) : Int := -1 * a. -Notation 75 - _ : Int::neg. - -Definition Int::mod (a b : Int) : Int := a - b * (a div b). -Infixl 70 mod : Int::mod. - Builtin nat_to_int : Nat → Int. Coercion nat_to_int. -Definition Int::divides (a b : Int) : Bool := (b mod a) = 0. -Infix 50 | : Int::divides. +Namespace Int. +Builtin numeral. -Definition Int::abs (a : Int) : Int := if (0 ≤ a) a (- a). -Notation 55 | _ | : Int::abs. +Builtin add : Int → Int → Int. +Infixl 65 + : add. -Definition Nat::sub (a b : Nat) : Int := nat_to_int a - nat_to_int b. -Infixl 65 - : Nat::sub. +Builtin mul : Int → Int → Int. +Infixl 70 * : mul. -Definition Nat::neg (a : Nat) : Int := - (nat_to_int a). -Notation 75 - _ : Nat::neg. +Builtin div : Int → Int → Int. +Infixl 70 div : div. -SetOpaque Int::sub true. -SetOpaque Int::neg true. -SetOpaque Int::mod true. -SetOpaque Int::divides true. -SetOpaque Int::abs true. -SetOpaque Int::ge true. -SetOpaque Int::lt true. -SetOpaque Int::gt true. -SetOpaque Nat::sub true. -SetOpaque Nat::neg true. +Builtin le : Int → Int → Bool. +Infix 50 <= : le. +Infix 50 ≤ : le. + +Definition ge (a b : Int) : Bool := b ≤ a. +Infix 50 >= : ge. +Infix 50 ≥ : ge. + +Definition lt (a b : Int) : Bool := ¬ (a ≥ b). +Infix 50 < : lt. + +Definition gt (a b : Int) : Bool := ¬ (a ≤ b). +Infix 50 > : gt. + +Definition sub (a b : Int) : Int := a + -1 * b. +Infixl 65 - : sub. + +Definition neg (a : Int) : Int := -1 * a. +Notation 75 - _ : neg. + +Definition mod (a b : Int) : Int := a - b * (a div b). +Infixl 70 mod : mod. + +Definition divides (a b : Int) : Bool := (b mod a) = 0. +Infix 50 | : divides. + +Definition abs (a : Int) : Int := if (0 ≤ a) a (- a). +Notation 55 | _ | : abs. + +SetOpaque sub true. +SetOpaque neg true. +SetOpaque mod true. +SetOpaque divides true. +SetOpaque abs true. +SetOpaque ge true. +SetOpaque lt true. +SetOpaque gt true. +EndNamespace. + +Namespace Nat. +Definition sub (a b : Nat) : Int := nat_to_int a - nat_to_int b. +Infixl 65 - : sub. + +Definition neg (a : Nat) : Int := - (nat_to_int a). +Notation 75 - _ : neg. + +SetOpaque sub true. +SetOpaque neg true. +EndNamespace. \ No newline at end of file diff --git a/src/builtin/nat.lean b/src/builtin/nat.lean index e72e34c012..e4959bd426 100644 --- a/src/builtin/nat.lean +++ b/src/builtin/nat.lean @@ -3,32 +3,36 @@ Import kernel. Variable Nat : Type. Alias ℕ : Nat. -Builtin Nat::numeral. +Namespace Nat. -Builtin Nat::add : Nat → Nat → Nat. -Infixl 65 + : Nat::add. +Builtin numeral. -Builtin Nat::mul : Nat → Nat → Nat. -Infixl 70 * : Nat::mul. +Builtin add : Nat → Nat → Nat. +Infixl 65 + : add. -Builtin Nat::le : Nat → Nat → Bool. -Infix 50 <= : Nat::le. -Infix 50 ≤ : Nat::le. +Builtin mul : Nat → Nat → Nat. +Infixl 70 * : mul. -Definition Nat::ge (a b : Nat) := b ≤ a. -Infix 50 >= : Nat::ge. -Infix 50 ≥ : Nat::ge. +Builtin le : Nat → Nat → Bool. +Infix 50 <= : le. +Infix 50 ≤ : le. -Definition Nat::lt (a b : Nat) := ¬ (a ≥ b). -Infix 50 < : Nat::lt. +Definition ge (a b : Nat) := b ≤ a. +Infix 50 >= : ge. +Infix 50 ≥ : ge. -Definition Nat::gt (a b : Nat) := ¬ (a ≤ b). -Infix 50 > : Nat::gt. +Definition lt (a b : Nat) := ¬ (a ≥ b). +Infix 50 < : lt. -Definition Nat::id (a : Nat) := a. -Notation 55 | _ | : Nat::id. +Definition gt (a b : Nat) := ¬ (a ≤ b). +Infix 50 > : gt. -SetOpaque Nat::ge true. -SetOpaque Nat::lt true. -SetOpaque Nat::gt true. -SetOpaque Nat::id true. \ No newline at end of file +Definition id (a : Nat) := a. +Notation 55 | _ | : id. + +SetOpaque ge true. +SetOpaque lt true. +SetOpaque gt true. +SetOpaque id true. + +EndNamespace. \ No newline at end of file diff --git a/src/builtin/obj/int.olean b/src/builtin/obj/int.olean index 9af0cddce7e7b4684b84af33b131617545179b26..0260a3fd6e00f93c3f6222a0b41482672ed8d8ca 100644 GIT binary patch literal 1664 zcma)7O>fgc5FKyQBz#DGly89o3PlhU2~g7_XoFfHQq`y&kT~=b*?1Ey9J?eNPCatz z|0sVfzl5D2Jy-M91JzMXZ_So_H!iZ$hrcQ86h$A*6DaiU|&v&1*_%^#CG zNDNgyQbB5HFOK{Pso9@%QrYVLX%w3%p_0Y-P1=tv`eUlc-=j1ELgk3B+E9sSU(sTX zP5XWr(ot%BlP~bpOVr-u)nx}dn#N1eCZJu0t~t;!`n?3@5!MWF#Q|F@Tm?J3rJ@2}OEsnT(=@i~IJ=A?gjWzg<+t_LKK$}rs!px~ zPG4G*I6M2B>BwiHgbUSTvr5T2a91-S*BQ7DAvX{qm!w(z{(t#Juar~?l4LG1hmld#MG GI{yHAVbzuZ literal 1752 zcma)-O>fgc5QfK_k|LEOv z$5}y}9;srdV$E1 z+Q7p6-i=6CNh9JpB93eXzjq^|_-7-6M_6AK!@e71vUg<-Kagi4URw%R$DMHf=W1=n zfu2#B$6Qlag;i0yYRbvd9i{v{H+pZecNar2@4>vnVw6!guY?Y zyZ>08=Y6uB$LopZ(>#*PSDocc&U=pck=zg_kb5FI>>@^QV-&u-s|?~rt24uXeP+yU z5EOa9Cw!di#W#DL>8x%zbI9UIFWb~kpw@Ps&k`q4JBImKDgA>jqA@g{LLP*oH_keI z8SOT9<QH^t$kg``w5hYl|d#Y~B3MSZ2TYj!CCUCwo=U16k&1qD( z&y&!Uyf~Wj^dhvk9Vh11F25BncaCtYoe@L4Gr~0&m+;JmB0O`{tyd)}T!0U==!m~& F{{Uql5{&== diff --git a/src/builtin/obj/kernel.olean b/src/builtin/obj/kernel.olean index 82eff1ff67b6851fb23f8f644856648a7716b176..ad444dd349b5ae6d581aa37ac6149c6115b025a7 100644 GIT binary patch delta 6121 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 delta 6246 zcmZ`-33yXg7Jm07X_~evrD>X^O_ww&ZByE`=}OZb+R}|KR6sy!Wf>St>jF4~I0f;; zL5m0n0Ua2XWfTQLMPyX4U=@L36|A6upF83*&VVb(+;eVTUvY%*{Xzw9`mr9)&oOU^L8>z43DA9g;Mvb5`4|8J!*2 z$>fP1t}RKiGWNk9*`_6MPIiYlQNv5-E--8I6XdpzDZjP%OeA}!Or6lF;Ve-NmT2-r zhN6d3@{k6{G>x&DD5xia7hxlf;c^k{R4CClW#po~l~nQ&wh_!ncuOGTEyG5to_QPo zk#e9%8?BY6-Y&t1+AK>U$~wrT2w^9|VsPtXnGdRUF*>;eb#K*;WM!~j*UTzGAMhY+ z0tmR1wSZnfyXGb|e2olmM!1XMB!s&Owj$g^@D>VSFAClu!DNK{k}04TcuSwlCc+i{ zbT$>H1x{n_a44{W&4Cz06}ug#8pgA^&|~-un-3*H4o;#i$YnB1f#`#xl*!LxSRIsZ zT!O;-Atb4VcY+cF7fYghd9XL_VeGw`C@e#B*{>++c zZ%A8@E_RZO4JzE|;#dkt!9THig%th)rJ>$XAYU3K1@l7_*g9ArdXwcD)a)b8XH~cv zEQ4z0b$pwK+u0^qFsPwyEB5}E6t^L~Nbq@tmk7R~hVi}F0ZVC6S!`l}!C_YR9Js@( zE!(-397I+xsc;885N6juE{x!Ls|k9-^7u^s7}mn=>IaW!FT&G<8!fxgq=c+@tMGLg z6rM}k^#I|O>@_$YUYGDDD*SPyOdwhsI+1AKYv!R}MhU!!paxCoaAI173rLEM=DvZ{bVLOk89SvZ0MQBTD(r~P zYh-#K`M+l6a2XTHixcfA3 zlb#vj5rUBjkBi_Z!s(a_e)Gh~x>zVw#NMBURfComAB#p9KsGT5X&tgygn=ZDqXFaL zYOLAlKyjGj)e)D=y^f1>F&o?y*UXaPXxz52hz^V|5W9e2B3f8Fft;z{Ac%yRC|4cqup5jBhgZF9=VY6SH zJX1NAv8;{joV3MpU{B$&V&SJ7??0|=%AM~{#t=$L$9-jWxya;UNx3^ z+Aq+W6(PJp5U&jFR|HFGe!fNl9-CTuPZweTe339iH4Fw6h@+jn_xA zrTDm~11YH!`zRSwCI+d+hQif}OdaRnlI|T8<3HUAojh_f#pJ)U2U?3fkso2*2Tkq? ze6TIP*sOw$-H;kz2;e|F*@b|+j- zD=^MO$wIO94N#e$9Dy?}1$3j1q*Ur~Z+d~T3+0a}PWPvyQzdH>6Hf02qo>%o05zXd zoR0Iv@SAy#r_Q<%4?uc`$0XE6r;s0p z+cF|~g?4{NsqwGq{u9Ohi3~TFU(N9FI?t1Nx3e32uMiJ>o%rEH1QnY@nQpHAW2W77 zfM|%BR~RID9f`eMU()04rVsNo_#MreUI(xDmU;`gx24`l_|O}`xuX%5OnR^4@h7jt zKhm`^rDZux0~4Xd+LqO5T#g>bDvWn$m12}x1r~oQaTM{Y5R(aw*||nM_Vu%sS%mCN z)4ixi%=PocEG~n->_Q_xn)Hhl@9{Y~JdQCr9=^~P<H{7newQ76(RP zV-{XkLEErlQR~Su#un(JrKp_ln_&B}iPq<^Ba2vWC8#h+E4 zmPX%ndNl>ovzEPt-UQqM-99^81)F@sqPD1X?zx7}i*VUjXWfZb-9!g3(ZFtnPHSNn zr?aBadmTFO7kX7H=Av;ayU~0Pd3s%iJ^j~BV6T#;l|?D+W#}ogvR!bhXsmTFs-Gpx zHwY>mMiv)w4vUHlufw6QxKQN~T{1cQZEkK5leS-l2L?qud!ZyNYEOTb z49;t^v=6S9G<&efG-MJ(ECT%SFv4tF*UZK-|BVS%cwIfe)D~tI3rv~)gRrTzgrB+R zOYca=m!P4F+#N$$Ll7T%hB|^L=;}TR3(FG5+C)8*j*;p(eR}P%ccG;so?n}@D-xVX(0`Dq35kMC!~_L@ zetN3x@NUH*{m-b&3zgR^EI7$Qc0myjHU6QTYW7My`x=H-4q@LwYo(W$a!|Rc;ycu- zAaegfC@T4j>Uz}qP%NtYO9Zhms0N!_Wxp(_vIKlafxy)fW~0>7AC#00Jyi)&ABokA z;%j~yV*iHARriMch~DNBi=W_uk<;}}T!10XudzXRb*H>Wg3M|YtgN>3*WlLb1kV0= zwU=XEO`}Q65$1ZEdJ_K zHM%Akic9njm=8Q`bx>a$%r3)?wf3kVt`n`SgYTLmVPoyuF-C3@97SA15ylY2CuJ~g zQF$;rCBngR)Q9Ina2$>u9FL8I)*kcGSoEHe!(nw@Du0Id)>ZQ=E403ubw{-JwIg=%o|l`#doz7d_OizDIFql zy>N7t7rt$>LR7=rgedIZOuX^^8oZStzF&j45sZaX4GtCuzck>lBWaCxj%ylgja9@* z;jyl9l2HUm64?o%O+FS6HBAjELX((@ts6iyLcx#||CM|g_BN$MMvE3MHtldGaS9>y z3Xt)w8H1sNUX?J+{(hWtKe>oEd2of0DdfA zg6|p>yCjONcfNP`-r2TV3Nu$)Liw@B<;vy`-ehj1h8K|op9%*l13t43Mp}t?;Kk<` z@NLO>t+Z3-SvqJK&%B0mhr(BpWiYi)IAskMFn&dqBMcf5b-C6%)JvjHkeWnPZ#Zr` zxC7={H%M*9sbcdTuuZVfx$(CFWT%aG7T$X9S%5c_Ib-2PXMj^3ps4_7KETMP`W=B(vt8*!b@Hc z87rMt3>?Oeh){8~i5zi7;mC$MM{R~3iHCCz+Y(+#*hO@7Um&(l*_IM-v8_SGBua_7 zsAYDz`;IBCJHou;-A1}?~)B&DW Xy0}MGWHenVBXTJtoqBM|g#UzJ7zl&y diff --git a/src/builtin/obj/real.olean b/src/builtin/obj/real.olean index a8a66e42dd640972b9b51ea83f6c3a47d39583de..1054b819fd0d2b61ff7f36e84237beb3f52ff06b 100644 GIT binary patch literal 1139 zcma)+Pfy!G5XHx13J011r4p?YMATFWQKA0f&L1Hu&pXmJR+NGX;>eOmO#g$clS|--h zca;)<)5_3VMBHpb&aX#s6oEV>2inE5UcimLvpPWvAB+f#@pY?z^8$H`z zWkt*v8EiV`ktkPWiJP)=GcFp$Mi6lwdF2Zu5x)Yi zCDST1-_qN?8k+^}A+&ALR?FIc@@ql+dam6lYqP-17EV6kY2L})&GOdd_D`@Up{?ZM z4>ch%>7lIb;dhJq%sE4Z>?(3^3uP7MOIbIOoGek9bz0a!mX8-aPHz9^Mv7fnk#XzB zFLP3dZX-9cEy6mCJVn`Lw%N%c7^=YwT$K%-1jHvaCk~eq4?^NI!5o1293@UrV;(@X zgm)V7b^_jL+*|gD#{d>t*M)Kn;4Vs_DtI)M)%-vny#-_;-J|>vVqh>RjZPA+RBo zj}I9w!mnuE3r4Hn=zpV;RcAj=2GUBMJhkZyh2XG2*S;4d^KZ(&Ygy}iU|-M|+i%Ms F%|9>ur%V6< literal 1220 zcma)+!A=4(5Qb+9!alAL|xQb+2+p&@LlqrK)F!f`b!jyz5UoSINq9ZJZ zo;DF)B2QZsx{OJ4;y~Vt=*=O6wzrziHJ~JSxRmQAxw{B+iMvOki{r+;BFm_Cn`$sg z>Uh#yw%tl}V~JHkN`=BIg#^sfHYv=7x4C>os8qen_6BUJ6>p%idos{*Gm!uv9C9;Tlj?Q}H?rTtm+Kb@ C56(FN diff --git a/src/builtin/obj/specialfn.olean b/src/builtin/obj/specialfn.olean index 2f41ac615530eb94607c00f7cc202f9ddb8bf547..3ffd8197c6f8fede317fc3cb27a9e64955079c99 100644 GIT binary patch delta 231 zcmcc4ah7AkOHSsZ)Wn?ll+3b;Uu_uqCmS(3G73#DVRU2@VE_W|$@(mkldmu;vx$MY z9AK^(lM186WNRjMsOH?#oXL4iR;&;W>zLHVr9n&y6%Z+)0oYnsicBs9l46rL14)U=Um2Ykr6yZ2 zsl!$0mgX=_&S0`)gJ_<-oJn0$fdL34R6wMF3e4EVloW=^Pne1nz~WF@WhRg!Nd`s` z1>wj~E@M_!Py-2|D3V83BsqB}vofQ`WCa#EM)}EqfNU)gn;&YDYhH?5W=<*t0C~42 Ad;kCd diff --git a/src/builtin/real.lean b/src/builtin/real.lean index 700fde5393..2fcc1b83fe 100644 --- a/src/builtin/real.lean +++ b/src/builtin/real.lean @@ -2,43 +2,43 @@ Import int. Variable Real : Type. Alias ℝ : Real. - -Builtin Real::numeral. - -Builtin Real::add : Real → Real → Real. -Infixl 65 + : Real::add. - -Builtin Real::mul : Real → Real → Real. -Infixl 70 * : Real::mul. - -Builtin Real::div : Real → Real → Real. -Infixl 70 / : Real::div. - -Builtin Real::le : Real → Real → Bool. -Infix 50 <= : Real::le. -Infix 50 ≤ : Real::le. - -Definition Real::ge (a b : Real) : Bool := b ≤ a. -Infix 50 >= : Real::ge. -Infix 50 ≥ : Real::ge. - -Definition Real::lt (a b : Real) : Bool := ¬ (a ≥ b). -Infix 50 < : Real::lt. - -Definition Real::gt (a b : Real) : Bool := ¬ (a ≤ b). -Infix 50 > : Real::gt. - -Definition Real::sub (a b : Real) : Real := a + -1.0 * b. -Infixl 65 - : Real::sub. - -Definition Real::neg (a : Real) : Real := -1.0 * a. -Notation 75 - _ : Real::neg. - -Definition Real::abs (a : Real) : Real := if (0.0 ≤ a) a (- a). -Notation 55 | _ | : Real::abs. - Builtin int_to_real : Int → Real. Coercion int_to_real. - Definition nat_to_real (a : Nat) : Real := int_to_real (nat_to_int a). Coercion nat_to_real. + +Namespace Real. +Builtin numeral. + +Builtin add : Real → Real → Real. +Infixl 65 + : add. + +Builtin mul : Real → Real → Real. +Infixl 70 * : mul. + +Builtin div : Real → Real → Real. +Infixl 70 / : div. + +Builtin le : Real → Real → Bool. +Infix 50 <= : le. +Infix 50 ≤ : le. + +Definition ge (a b : Real) : Bool := b ≤ a. +Infix 50 >= : ge. +Infix 50 ≥ : ge. + +Definition lt (a b : Real) : Bool := ¬ (a ≥ b). +Infix 50 < : lt. + +Definition gt (a b : Real) : Bool := ¬ (a ≤ b). +Infix 50 > : gt. + +Definition sub (a b : Real) : Real := a + -1.0 * b. +Infixl 65 - : sub. + +Definition neg (a : Real) : Real := -1.0 * a. +Notation 75 - _ : neg. + +Definition abs (a : Real) : Real := if (0.0 ≤ a) a (- a). +Notation 55 | _ | : abs. +EndNamespace. diff --git a/src/frontends/lean/parser.cpp b/src/frontends/lean/parser.cpp index 50e7cd372b..8f5ac400f9 100644 --- a/src/frontends/lean/parser.cpp +++ b/src/frontends/lean/parser.cpp @@ -914,8 +914,11 @@ class parser::imp { \brief Try to find an object (Definition or Postulate) named \c id in the frontend/environment. If there isn't one, then tries to check if \c id is a builtin symbol. If it is not throws an error. + + If \c implicit_args is true, then we also parse explicit arguments until + we have a placeholder forall implicit ones. */ - expr get_name_ref(name const & id, pos_info const & p) { + expr get_name_ref(name const & id, pos_info const & p, bool implicit_args = true) { lean_assert(!m_namespace_prefixes.empty()); auto it = m_namespace_prefixes.end(); auto begin = m_namespace_prefixes.begin(); @@ -926,7 +929,7 @@ class parser::imp { if (obj) { object_kind k = obj->kind(); if (k == object_kind::Definition || k == object_kind::Postulate || k == object_kind::Builtin) { - if (has_implicit_arguments(m_env, obj->get_name())) { + if (implicit_args && has_implicit_arguments(m_env, obj->get_name())) { std::vector const & imp_args = get_implicit_arguments(m_env, obj->get_name()); buffer args; pos_info p = pos(); @@ -2278,8 +2281,9 @@ class parser::imp { unsigned prec = parse_precedence(); name op_id = parse_op_id(); check_colon_next("invalid operator definition, ':' expected"); + auto name_pos = pos(); name name_id = check_identifier_next("invalid operator definition, identifier expected"); - expr d = mk_constant(name_id); + expr d = get_name_ref(name_id, name_pos, false); switch (fx) { case fixity::Infix: add_infix(m_env, m_io_state, op_id, prec, d); break; case fixity::Infixl: add_infixl(m_env, m_io_state, op_id, prec, d); break; @@ -2319,8 +2323,9 @@ class parser::imp { if (parts.size() == 0) { throw parser_error("invalid notation declaration, it must have at least one identifier", p); } + auto id_pos = pos(); name name_id = check_identifier_next("invalid notation declaration, identifier expected"); - expr d = mk_constant(name_id); + expr d = get_name_ref(name_id, id_pos, false); if (parts.size() == 1) { if (first_placeholder && prev_placeholder) { // infix: _ ID _ @@ -2593,9 +2598,10 @@ class parser::imp { next(); auto id_pos = pos(); name id = check_identifier_next("invalid builtin declaration, identifier expected"); - auto d = get_builtin(id); + name full_id = mk_full_name(id); + auto d = get_builtin(full_id); if (!d) - throw parser_error(sstream() << "unknown builtin '" << id << "'", id_pos); + throw parser_error(sstream() << "unknown builtin '" << full_id << "'", id_pos); expr b = d->first; if (d->second) { m_env->add_builtin_set(b); @@ -2623,8 +2629,8 @@ class parser::imp { } m_env->add_builtin(d->first); if (m_verbose) - regular(m_io_state) << " Added: " << id << endl; - register_implicit_arguments(id, bindings); + regular(m_io_state) << " Added: " << full_id << endl; + register_implicit_arguments(full_id, bindings); } void parse_namespace() {