Skip to content

Commit 52c3ec6

Browse files
author
Alexander Dreyer
committed
fix: newstruct's string operator may be overloaded
1 parent ebe8042 commit 52c3ec6

File tree

4 files changed

+81
-22
lines changed

4 files changed

+81
-22
lines changed

Singular/newstruct.cc

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,36 @@ char * newstruct_String(blackbox *b, void *d)
4848
else
4949
{
5050
newstruct_desc ad=(newstruct_desc)(b->data);
51+
52+
newstruct_proc p=ad->procs;
53+
while((p!=NULL)&&(p->t!=STRING_CMD))
54+
p=p->next;
55+
56+
if (p!=NULL)
57+
{
58+
leftv sl;
59+
sleftv tmp;
60+
memset(&tmp,0,sizeof(tmp));
61+
tmp.rtyp=ad->id;
62+
void * newstruct_Copy(blackbox*, void *); //forward declaration
63+
tmp.data=(void*)newstruct_Copy(b,d);
64+
idrec hh;
65+
memset(&hh,0,sizeof(hh));
66+
hh.id=Tok2Cmdname(p->t);
67+
hh.typ=PROC_CMD;
68+
hh.data.pinf=p->p;
69+
sl=iiMake_proc(&hh,NULL,&tmp);
70+
71+
if (sl->Typ() == STRING_CMD)
72+
{
73+
char *res = omStrDup((char*)sl->Data());
74+
sl->CleanUp();
75+
return res;
76+
}
77+
else
78+
sl->CleanUp();
79+
}
80+
5181
lists l=(lists)d;
5282
newstruct_member a=ad->member;
5383
StringSetS("");

Tst/Short/bug_newstruct2.res.gz.uu

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
begin 644 bug_newstruct2.res.gz
2-
M'XL(",4UX$\``V)U9U]N97=S=')U8W0R+G)E<P"=5DUOVS`,O>=7$,8.]JJZ
3-
MD;^#H#XLN108=NGN01H[A0#'-FQY2U#TOX^R'8D.TJR;D0])Y"/YI"<FSS_7
4-
M3S\`@*?P_>D;6+*5;B%>K.7L>;1X*>#B1I1"VLYRIKXA3>&E>]V4^>]6-MU.
5-
M>BX.W59NI8;Y*>AQX$+=5#O(Q"_15LVF;D0I[7$&:T<[ABZ\Z4GD@K4>?1[!
6-
MMNXPERA?[;6;Y:5S9SEP/UDMNX-:):4G+KSKR2*=%J&J[=HK5?`YJ8)S%[%-
7-
M+KNFQ&P#R')T#NZ3'#RXR"'S]AI/3GGR:))!06A\RH%?<GC=928\`SWT="J/
8-
MDO&F9!!-,GF4B7?))#_*3R2CO+PIKR$`S4>9>9?,,K'?_R6;3ZGY4VH*3G+Y
9-
ME)L?&&GZ6+%6L8+U62QFB2S?%H!"8\,(Q47C12F%[:OFL"T,N!"MA+8['+9E
10-
M1L7BQQ-8_0&"P:XJ<Y!;45!P0LI>N-">6ID?;$N4*,JBP"`FW"A3-M4Z@\"$
11-
M"^;IS1"]#AD5,J-H?ANMCIH1E3*/8+W;V%$I;"J]20327`)L+GH<WMZ6ON^8
12-
MP/V4<1(W(G%C%U1C@>9QSNPC.SDLJXTG.8P`#^,LSY7V"'%_5ZHG8>_J)60?
13-
M3:*0*R.J2QM/Q.B9V"$*%V.2-GCJV][1F6D7E'/?9U880@VT(<1]'IJ<,@U#
14-
M;42JZD*OF++A2!M0H^-E'VS#1)N1^,,#W/_?HZ,L)M?N<.I*4946`ZNNBA/4
15-
M#`\&!!%_-!_[@ZPVRL4>(8"?#I!'`[`?O,$G'@WP:`/!L&[M+&\"4'CO_Y0A
16-
M-.<:1:[FHWX+*1WM$W],0?LDEU4+7?79)YY_7*CVX::VV"/*/_:JQQ/_^A73
17-
M9/D>?_^5">?:G]S&&#>%<-'G%R/W?D]1PL<[;M:C85W@.H^7)DY,8B97;C5<
18-
MB@:_1VTP(%<Z7EQI-A-PWQ+&<^BA9E>2N:DB04'URE-'M.SO0*JHS-3[[(,W
19-
C5YWFX`*C$X]G^#J[D,U*<+/47ZOQDF+J+[,_:0DK!Y`)````
2+
M'XL(",(;[$\``V)U9U]N97=S=')U8W0R+G)E<P"=5\MNVSH0W?LK!L)=2`VK
3+
MBI+U@A$M;K(I4'33[@W%D@.BLF1(<F.CZ+_?(2630]=Q<R,D,<5Y'LZ9H?/M
4+
M^^/GKP#`"_CR^5]PQF'T&_'DK!;?9DE8`&ZN12M&UULMY"<4!3P=GM=M_3*,
5+
M_6$SACXN_6$L1VT6%:#72Q_V?;>!2OP40]>O][UH1W=^@T=/*\8^_-(OB0_.
6+
MXZQS#ZYSA[%$^^P^^E7=>G>.!Q^MW?:PD[LD]<R'W_HE+^PD9+:'X4H6/"!9
7+
M<.ZC;5^/A[[%:).1X^D8/"(Q^/(BQE@/UW!RBI,G5@1I0OU3#/P2P_.F,NX9
8+
MZ&6H0X443&B#06L2*:1(PDLD]7%\0S"**[1Q30YH/(HLO$16B>WV+]$B"BVR
9+
MH4ES$BNBV**EH6:$&6L62S,5Q6&.J.JR`20:FU9(+NHO*:C9MNMW96.,&S&,
10+
M,!QVN[*M*%FBU#+;OV+!8-.U-8RE:*AQ1M+.?1A.PUCO7$>T2,JF02?&W4Q3
11+
M9G.=P=*X6P;%31>*AXP2F5%K?MM:EIH1EK*0V(:W;6>F,)MZE@<R7)8X7/0Z
12+
MOGTL:NX8Q^J5<>(W(7Y3'^1@@?X^8.Z1G3Q6[8TF*<82BW&FYX/6B/%\'^1,
13+
MPMFE*.0>3:"82R&R2PM/1!@:WS$2%WV2,7A28^_H+;0*TEG-F0=T(1=:$.,Y
14+
M3T-.BJ:E%B)4V=`/3,IPI07(T;G9)]GTHL4(_-,G^/B^1WO)K;;;G0ZMZ%J'
15+
M@;/OFA/L&18&!"%_$LSS8>S64L6=30#_>D`>;8#SX!>\X=$&(1T@Z-;?>ZN;
16+
M!DB\W_\K0FSJFB2^QB/O0@I'ZZ2O0]`ZV6760F=]UDF#UQ/5.MSDEH:$^4?%
17+
M>JSXAP\8IJJW>/]+$;YK?=*-*1X*P:+KER)V=:9(X>,=-_O)M"]PGZ<KXR<E
18+
M/K,K70V7I,'/F1L,2$NG^95A8QFKD3#709F:4\D"DT6&A%+,DR5:J1XH))2%
19+
M_#WK8.?*:DXJ,"OQ=($_9Q5R6!D>UOM[R713%IL1F"569TU?CL16E$]-/:.U
20+
M&BM+Y9`@2O+M9,19,6^(^T!OYF<;5\H\2YB3,\NY83EJND@?*/MG#VFM;VJW
21+
M^UGW35=6=>5A7N::SJ]=$_`GHFEC*B&NZ3S/HSE[50HU[F&+?@9X*C<_T&"&
22+
ML:!):./E)<JK6J2I\\2"NW[I.S2^`IJG%M#T74`G]Q;<C,(5[:;K^WHSXD#%
23+
M[Q.8^EA73.'7\#&W\M",5OUN%)<'IK@\.!=7G:NPD;Y>5QZ\L:[S9:W=$Z0\
24+
MB$@>V$4&==N]0-?*.T15^Z7K?PR@#\(NH?807T!^__'Q("&9X0"7_SK-ES#F
25+
,_\_B/X+A?Q!P#0``
2026
`
2127
end

Tst/Short/bug_newstruct2.stat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1 >> tst_memory_0 :: 1340093893:3144- exported :3-1-4:ix86-Linux:mamawutz:184060
2-
1 >> tst_memory_1 :: 1340093893:3144- exported :3-1-4:ix86-Linux:mamawutz:2805760
3-
1 >> tst_memory_2 :: 1340093893:3144- exported :3-1-4:ix86-Linux:mamawutz:2805760
4-
1 >> tst_timer_1 :: 1340093893:3144- exported :3-1-4:ix86-Linux:mamawutz:11
1+
1 >> tst_memory_0 :: 1340873666:3144- exported :3-1-4:x86_64-Linux:lts035:204848
2+
1 >> tst_memory_1 :: 1340873666:3144- exported :3-1-4:x86_64-Linux:lts035:3100672
3+
1 >> tst_memory_2 :: 1340873666:3144- exported :3-1-4:x86_64-Linux:lts035:3100672
4+
1 >> tst_timer_1 :: 1340873666:3144- exported :3-1-4:x86_64-Linux:lts035:10

Tst/Short/bug_newstruct2.tst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,27 @@ system("install", "myunion", "int", to_int, 1);
7373
poly(uni); // -> x+1
7474
int(uni); // -> 17
7575

76+
// ---------------------------------------------------------
77+
78+
newstruct("stringifiable", "int i");
79+
stringifiable stry;
80+
stry;
81+
string(stry);
82+
83+
proc to_str(def arg) { return ("(overloaded)"); }
84+
system("install", "stringifiable", "string", to_str,1);
85+
stry; // print falls back to string
86+
string(stry);
87+
88+
proc to_str_wrong(def arg) { return (17); }
89+
system("install", "stringifiable", "string", to_str_wrong,1);
90+
stry; // incorrectly converted, fall back to default
91+
string(stry);
92+
93+
proc printing(def arg) { ("(overloaded)"); }
94+
system("install", "stringifiable", "print", printing,1);
95+
96+
stry; // now only print works correctly
97+
string(stry); // incorrectly converted, fall back to default
98+
7699
tst_status(1);$

0 commit comments

Comments
 (0)