1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992 |
- SWIG (Simplified Wrapper and Interface Generator)
- See the CHANGES.current file for changes in the current version.
- See the RELEASENOTES file for a summary of changes in each release.
- Issue # numbers mentioned below can be found on Github. For more details, add
- the issue number to the end of the URL: https://github.com/swig/swig/issues/
- Version 4.1.0 (24 Oct 2022)
- ===========================
- 2022-10-24: wsfulton, AndLLA
- [R] #2386 Fix problems in shared_ptr wrappers where the class names
- were not consistent when using the shared_ptr template or the actual
- underlying type.
- 2022-10-24: wsfulton
- [R] Add support for special variable replacement in the $typemap()
- special variable macro for R specific typemaps (rtype, rtypecheck,
- scoercein, scoereout).
- 2022-10-24: wsfulton
- [R] Polymorphism in the wrappers was only working for C++ classes,
- now this works for C++ structs too.
- 2022-10-19: olly
- [Lua] #2126 Fix type resolution between multiple SWIG-wrapped
- modules.
- 2022-10-17: wsfulton
- [R] #2385 Add support for std::vector<std::vector<std::string>>.
- 2022-10-14: murillo128
- [Javascript] #2109 Tweak unsigned long and unsigned long long typemaps
- to create a v8::Number instead of v8::Integer if the value exceeds
- the size of v8::Integer. Note that the v8::Number value will be
- imprecise if the value is > MAX_SAFE_INTEGER.
- 2022-10-14: olly
- [R] Arrange that destructors of local C++ objects in the wrapper
- function get run on SWIG_fail (which calls Rf_error() which calls
- longjmp()).
- 2022-10-14: olly
- [Lua] Arrange that destructors of local C++ objects in the wrapper
- function get run on SWIG_fail (which calls lua_error() which calls
- longjmp()).
- 2022-10-13: wsfulton
- [R] Add missing SWIGTYPE *const& typemaps for supporting pointers
- by const reference.
- 2022-10-10: wsfulton
- #2160 Fix compile error when using templates with more than one template
- parameter and used as an input parameter in a virtual method in a
- director class (problem affecting most of the scripting languages).
- 2022-10-10: treitmayr, wsfulton
- [Python, Ruby] #1811 #1823 Fix invalid code generated in some cases when
- returning a pointer or reference to a director-enabled class instance.
- This previously only worked in very simple cases, now return types are
- resolved to fix. A bug in template instantiations using pointers also
- works now.
- 2022-10-06: wsfulton
- [CFFI] #1966 #2200 Remove code for Common Lisp CFFI. We dropped support
- for it in SWIG 4.0.0 by disabling it as the first stage. This is the
- final stage for complete removal as there has been no meaningful
- progress to revive it to the status of experimental language.
- 2022-10-06: olly
- [Python] #2390 Remove deprecated and apparently useless defarg.swg
- The only documentation is in the file itself and describes a Python
- wrapper around the C function defined here, but digging though the
- git history this Python wrapper doesn't seem to have ever actually
- been generated by SWIG.
- This file was also marked as deprecated in 2005.
- 2022-10-06: wsfulton
- [Java] #2048 Fix quoting for doxygen \image command to quote the output
- file name generated into the html src attribute.
- 2022-10-05: benjamin-sch
- [Python] added an interpreter counter to fix deinitialization
- issues if multiple subinterpreters are used
- 2022-10-05: olly, wsfulton
- #672 Add support for parsing C++11 final classes such as:
- class X final {};
- This no longer gives a syntax error.
- 2022-10-05: wsfulton
- [OCaml] Fix %rename for enum items. Previously the rename had no effect.
- 2022-10-05: olly
- #1465 Report errors in preprocessor expressions by default
- Until now SWIG quietly ignored such errors unless -Wextra (or -Wall
- which implies -Wextra) was passed, but this is unhelpful as it tends
- to hide genuine problems. To illustrate this point, enabling this
- warning by default revealed a typo in the preproc_defined.i
- testcase in SWIG's own testsuite.
- If you really don't want to see this warning, you can suppress it
- with command line option -w202 or by using this in your interface
- file:
- %warnfilter(SWIGWARN_PP_EVALUATION);
- Both will work with older versions of SWIG too.
- 2022-10-04: olly
- #1050 Consistently define SWIG_VERSION both at SWIG-time and in
- the generated wrapper. Best practice remains to check at SWIG-time
- where possible because that results in smaller generated wrapper
- sources.
- SWIGGO and SWIGJAVASCRIPT are now defined in the generated wrappers
- to match behaviour for all other target languages.
- The undocumented SWIGVERSION macro is no longer defined.
- 2022-09-29: olly
- #2303 SWIG's internal hash tables now use a better hash function.
- The old hash function only considerd the last five characters
- plus the least significant bit of the last-but-sixth character,
- which as you might guess generated a lot of many-way collisions.
- This change seems to give about a 4% reduction in wallclock time
- for processing li_std_list_wrap.i from the testsuite for Python.
- The hash collision rate for this example drops from 39% to 0!
- 2022-09-29: wsfulton
- #2303 Type tables are now output in a fixed order whereas previously
- the order may change with any minor input code change. This shouldn't
- affect users except SWIG_TypePrettyName may output a different C/C++
- typedef to a type - it's used mostly for showing errors when the type
- passed to a function is wrong.
- 2022-09-29: olly
- [PHP] Dynamic class properties are no longer supported by default.
- Historically PHP has supported dynamic class properties and SWIG
- has implemented them too (because we implement the magic __get(),
- __set() and __isset() methods we need to include explicit
- handling).
- PHP 8.2 deprecates dynamic class properties - initially they'll
- warn, and apparently they'll not work by default in PHP 9.0:
- https://wiki.php.net/rfc/deprecate_dynamic_properties
- In PHP code dynamic properties can be enabled for a class by
- marking that class with the attribute `#[AllowDynamicProperties]`.
- To follow this PHP change, in SWIG you now need to specify
- `%feature("php:allowdynamicproperties", 1) Foo;` (or
- `%feature("php:allowdynamicproperties", 1)` to enable it for
- all wrapped classes). Unknown features are ignored, so you can add
- it unconditionally and it'll work with older SWIG too.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-09-19: wsfulton
- #1484 Fixes for class inheritance with the same name in different namespaces
- such as:
- namespace A { class Bar {}; }
- namespace B { template<typename T, typename U> class Bar : public A::Bar {}; }
- 2022-09-19: wsfulton
- #2316 Remove swig.spec file and srcrpm makefile target. These are very out of date
- and don't seem to be used by RPM based Linux distributions which have their
- own version of swig.spec.
- 2022-09-17: wsfulton
- [Go, Guile, Racket, Scilab] Add throws typemaps for std::string so that thrown
- string exception messages can be seen.
- 2022-09-17: wsfulton
- [Racket] Add throws typemaps for char * so that thrown string exception
- messages can be seen from Racket.
- 2022-09-17: wsfulton
- [Javascript, Octave, R] Improve exceptions for %catches and exception
- specifications for native types. String exception messages are shown as
- the exception message instead of just the type of the exception.
- 2022-09-17: wsfulton
- Add missing typecheck typemaps for std::auto_ptr and std::unique_ptr to
- fix overloading when using these types.
- 2022-09-17: wsfulton
- [Guile] Add error checking to SWIGTYPE and SWIGTYPE & in typemaps to prevent
- seg faults when passing #nil to these parameter types.
- 2022-09-16: wsfulton
- #999 Provide SWIGTYPE MOVE typemaps in swigmove.i for implementing full
- move semantics when passing parameters by value.
- 2022-08-31: wsfulton
- #999 Improve move semantics when using rvalue references.
- The SWIGTYPE && input typemaps now assume the object has been moved.
- These typemaps have been changed assuming that after the function call,
- the rvalue reference parameter has been moved. The parameter's proxy class
- that owns the C++ object thus has the underlying pointer set to null
- so that the (moved from, but still valid) C++ object cannot be used again
- and the object is additionally deleted.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-08-28: wsfulton
- [Octave] SWIG now marshals a C/C++ NULL pointer into the null matrix, [].
- SWIG has always marshalled the null matrix into a NULL pointer; this remains
- and now we have consistency in representing a NULL pointer.
- 2022-08-26: wsfulton
- [Racket] SWIG now marshals a C/C++ NULL pointer into a null value by calling
- scheme_make_null(), so that scheme's null? is true for a NULL C/C++ pointer value.
- 2022-08-18: wsfulton
- [Racket] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-13: wsfulton
- [Guile] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-11: wsfulton
- [Lua] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-05: wsfulton
- [D] Fix occasional undefined behaviour with inheritance hierarchies, particularly
- when using virtual inheritance as the pointers weren't correctly upcast from derived
- class to base class when stored in the base's proxy class.
- 2022-08-05: wsfulton
- [D] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-03: wsfulton
- [Javascript] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-02: wsfulton
- [Octave] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-08-01: wsfulton
- [Python] Add initialisers for additional members in PyHeapTypeObject
- (builtin mode) for Python-3.11 - _ht_tpname, _spec_cache.
- 2022-07-30: wsfulton
- C++20 has deprecated std::basic_string<>::reserve() and the C++11 method
- std::basic_string<>::shrink_to_fit() is a replacement that can be used.
- std_string.i and std_wstring.i provided wrappers for reserve with the following
- template instantiations:
- %template(string) std::basic_string<char>;
- %template(wstring) std::basic_string<wchar_t>;
- The reserve method is no longer wrapped, however the shrink_to_fit() method
- can be used as an alternative from the target language (the generated wrappers
- call reserve() instead if C++<=20).
- Note that std::basic_string<>::reserve(size_t n) is still wrapped unchanged.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-07-30: wsfulton
- [Tcl] Add support for std::unique_ptr in std_unique_ptr.i.
- Add support for std::auto_ptr in std_auto_ptr.i.
- 2022-07-27: ZackerySpytz, olly
- #1678 Support parsing C++20 templated lambdas.
- 2022-07-27: ZackerySpytz, olly
- #1622 Add support for the C++20 spaceship operator (<=>).
- 2022-07-26: olly
- [Tcl] https://sourceforge.net/p/swig/bugs/977/
- Fix handling of long long on 32-bit platforms. This fix raises
- SWIG's minimum supported Tcl version to 8.4.0 (which was released
- just under 20 years ago).
- 2022-07-26: olly
- Fix incorrect operator precedence in preprocessor expressions.
- 2022-07-25: olly
- Support for C++14 binary integer literals in preprocessor expressions.
- 2022-07-20: wsfulton
- [C#, Java] Ensure the order of interfaces generated in proxy interfaces for the
- %interface family of macros is the same as that parsed from the bases in C++.
- 2022-07-20: jicks, Ingener74, olly
- #422 [Python] Fix mishandling of a Python class inheriting from
- multiple SWIG-wrapped director classes.
- 2022-07-19: wsfulton
- #692 [C#, Java, Perl, Python, Ruby] std::unique_ptr and std::auto_ptr typemaps
- provided for inputs types in std_unique_ptr.i and std_auto_ptr.i.
- Now these smart pointers can be used as input parameters to functions. A proxy
- class instance transfers memory ownership of the underlying C++ object from the
- proxy class to a smart pointer instance passed to the wrapped function.
- 2022-07-19: jschueller
- [Python] #2314 Drop support for Python 3.2.
- 2022-07-19: olly
- Remove remaining support code for classic macos, which has not been
- supported by Apple for over 20 years now.
- 2022-07-12: wsfulton
- #999 Performance optimisation for parameters passed by value that are C++11 movable.
- The C++ wrappers create a temporary variable for a parameter to be passed to a
- function. This is initially default constructed and then copy assigned from the
- instance being passed in from the target language. This is unchanged, however,
- when the temporary variable is passed to the wrapped function, it is now done using
- std::move. If the type is move constructible, the move constructor will be used
- instead of the copy constructor.
- 2022-07-12: wsfulton
- [Perl] Add std::auto_ptr support in std_auto_ptr.i library file.
- 2022-07-12: erezgeva
- [Perl] Add std::unique_ptr support in std_unique_ptr.i library file.
- 2022-07-07: jmarrec
- #1158 #2286 Add basic support for C++11 attributes. These are now
- crudely ignored by SWIG's parser's tokeniser, which is better that
- failing with a parse error.
- 2022-07-05: ianlancetaylor
- [Go] #2245 Handle NULL pointers for string* conversions.
- Rearrange generation of director methods and rename
- receiver argument from p to swig_p.
- 2022-07-03: wsfulton
- #999 Performance optimisation for directors for classes passed by value. The directorin
- typemaps in the director methods now use std::move on the input parameter when
- copying the object from the stack to the heap prior to the callback into the target
- language, thereby taking advantage of move semantics if available.
- 2022-07-02: wsfulton
- #1722 [C#, Java, Python, Ruby] Add std::unique_ptr support. Ported from std::auto_ptr.
- Use the %unique_ptr(T) macro as follows for usage std::unique_ptr<T>. For example, for
- a class called Klass:
- %include "std_unique_ptr.i"
- %unique_ptr(Klass)
- Support is currently limited to only returning a std::unique_ptr from a function.
- 2022-06-29: wsfulton
- #999 #1044 Enhance SWIGTYPE "out" typemaps to use std::move when copying
- objects, thereby making use of move semantics when wrapping a function returning
- by value if the returned type supports move semantics.
- Wrapping functions that return move only types 'by value' now work out the box
- without having to provide custom typemaps.
- The implementation removed all casts in the "out" typemaps to allow the compiler to
- appropriately choose calling a move constructor, where possible, otherwise a copy
- constructor. The implementation also required modifying SwigValueWrapper to
- change a cast operator from:
- SwigValueWrapper::operator T&() const;
- to
- #if __cplusplus >=201103L
- SwigValueWrapper::operator T&&() const;
- #else
- SwigValueWrapper::operator T&() const;
- #endif
- This is not backwards compatible for C++11 and later when using the valuewrapper feature
- if a cast is explicitly being made in user supplied "out" typemaps. Suggested change
- in custom "out" typemaps for C++11 and later code:
- 1. Try remove the cast altogether to let the compiler use an appropriate implicit cast.
- 2. Change the cast, for example, from static_cast<X &> to static_cast<X &&>, using the
- __cplusplus macro if all versions of C++ need to be supported.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-06-15: wsfulton
- #2039 Add move assignment operator to SwigValueWrapper used by the
- valuewrapper feature.
- 2022-06-04: sethrj
- Enhance $typemap to support typemap attributes.
- $typemap(method:attribute, typepattern)
- For example:
- %typemap(cstype, out="object") XClass "XClass"
- %typemap(cscode) BarClass %{
- $typemap(cstype:out, XClass) bar() {
- return null;
- }
- which expands to
- object bar() {
- return null;
- }
- 2022-05-30: wsfulton
- [C#, D] Add new special variable expansion: $imfuncname.
- Expands to the function name called in the intermediary class.
- 2022-05-30: LindleyF
- [Java] #2042 Add new special variable expansion: $imfuncname.
- Expands to the function name called in the intermediary class.
- 2022-05-28: jkuebart
- [Java] On some versions of Android, specifically Android 6,
- detaching the current thread from the JVM after every invocation
- causes a memory leak.
- Offer SWIG_JAVA_DETACH_ON_THREAD_END to configure a behaviour
- where the JVM is only detached in the thread destructor.
- See https://developer.android.com/training/articles/perf-jni#threads.
- 2022-05-27: xypron
- [Python] #2277 Define PY_SSIZE_T_CLEAN macro before #include "Python.h" as
- recommended in Python 3.7 and later.
- To avoid this macro definition, add the following to your interface file so
- that SWIG_NO_PY_SSIZE_T_CLEAN is defined at the beginning of the C++ wrappers:
- %begin %{
- #define SWIG_NO_PY_SSIZE_T_CLEAN
- %}
- 2022-05-26: rokups
- [C#] #1323 Modify SwigDerivedClassHasMethod for a more efficient director
- implementation when calling virtual methods that are not overridden.
- 2022-05-15: erezgeva, eiselekd
- [Lua, Perl, Octave, PHP, Tcl] #2275 #2276 #2283 Add argcargv.i library containing
- (int ARGC, char **ARGV) multi-argument typemaps.
- Document this library in Typemaps.html.
- 2022-05-07: KrisThielemans
- [Python] Fix "too many initializers for 'PyHeapTypeObject'" errors
- using PyPy 3.8 and later.
- 2022-05-04: wsfulton
- [C#] Add C# wchar_t * director typemaps
- 2022-04-20: cminyard
- Fix an issue where newlines were not properly generated
- for godirectorin typemaps. If you have a virtual function
- not assigned to zero, in some cases it won't generate a
- newline and you will see errors:
- example.go:1508:3: expected ';', found swig_r
- when compiling the go code.
- Also add an example of using goin and godirectorin and add
- a test for this situation.
- 2022-04-29: jason-daly, JerryJoyce, wsfulton
- [C#] #1233 Add wchar_t * and std::wstring Unicode string support on Linux.
- 2022-04-11: robinst
- #2257 Fix new Ruby 3.2 warning "undefining the allocator of T_DATA
- class swig_runtime_data".
- 2022-04-07: olly
- #1750 SWIG now recognises and ignores Doxygen group commands `@{` and `@}`.
- 2022-04-06: wsfulton
- ./configure now enables C++11 and later C++ standards testing by default (when
- running: 'make check').
- The options to control this testing are the same:
- ./configure --enable-cpp11-testing
- ./configure --disable-cpp11-testing
- But the former is now the default and the latter can be used to turn off C++11 and
- later C++ standards testing.
- 2022-04-06: wsfulton
- [Python] #1635 The "autodoc" feature no longer overrides Doxygen comments
- in the generated docstring.
- If a "docstring" feature is present it will still override a Doxygen comment.
- If the "autodoc" feature is also present, the combined "autodoc" and "docstring"
- will override the Doxygen comment. If no "docstring" is present then the
- "autodoc" feature will not be generated when there is a Doxygen comment.
- This way the "autodoc" feature can be specified and used to provide documentation
- for 'missing' Doxygen comments.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-04-01: olly
- Remove undocumented and non-functional -browse command line option.
- 2022-03-26: eltoder
- [Python] #1684 Use different capsule names with and without -builtin
- Types generated with and without -builtin are not compatible. Mixing
- them in a common type list leads to crashes. Avoid this by using
- different capsule names: "type_pointer_capsule" without -builtin and
- "type_pointer_capsule_builtin" with.
- 2022-03-25: wsfulton
- The debug command line options that display parse tree nodes
- (-debug-module, -debug-top, -debug-symtabs) now display previously hidden
- linked list pointers which are useful for debugging parse trees.
- Added new command line option -debug-quiet. This suppresses the display
- of most linked list pointers and symbol table pointers in the parse tree nodes.
- The keys in the parse tree node are now shown in alphabetical order.
- 2022-03-24: wsfulton
- #2244 Fix using declaration in derived class bugs when all the base
- class's overloaded methods were overridden in the derived class -
- fixes "multiply defined" errors.
- 2022-03-23: wsfulton
- [Python] #1779 The -py3 option is deprecated and now has no effect on the
- code generated. Use of this option results in a deprecated warning.
- The related SWIGPYTHON_PY3 macro that this option defined is no longer generated.
- Note that %pythonnondynamic feature generates a metaclass that works on both
- Python 2 and Python 3.
- 2022-03-21: wsfulton
- [Python] #1779 pyabc.i for abstract base classes now supports versions of
- Python prior to 3.3 by using the collection module for these older versions.
- Python-3.3 and later continue to use the collections.abc module.
- The -py3 option no longer has any effect on the %pythonabc feature.
- 2022-03-21: jschueller, jim-easterbrook, wsfulton
- [Python] #2137 C++ static member functions no longer generate a "flattened"
- name in the Python module. For example:
- s = example.Spam()
- s.foo() # Spam::foo() via an instance
- example.Spam.foo() # Spam::foo() using class method
- example.Spam_foo() # Spam::foo() "flattened" name
- The "flattened" name is no longer generated, but can be generated
- by using the new -flatstaticmethod option.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-03-18: ianlancetaylor
- [Go] #337 Implement %extend base methods in child classes.
- 2022-03-17: olly
- [Python] #1779 SWIG's Python test-suite and examples are now
- run with Python 3 by default. To run them with Python 2, set
- PY2 to a non-empty value, e.g.:
- make check-python-test-suite PY2=1
- 2022-03-16: olly
- [Go] #683 -intgosize is now optional - if not specified the
- generated C/C++ wrapper code will use ptrdiff_t for intgo and
- size_t for uintgo.
- 2022-03-15: ianlancetaylor
- [Go] Add typemaps for std::string*.
- 2022-03-15: ianlancetaylor
- [Go] Don't convert arrays to pointers if there is a "gotype"
- typemap entry.
- 2022-03-15: ianlancetaylor
- [Go] Add documentation note about Go and C++ exceptions.
- 2022-03-12: wsfulton
- #1524 %interface family of macros no longer contain the getter/setter
- methods for wrapping variables. The interface only contains
- virtual and non-virtual instance methods, that is, no static methods.
- Enums are also no longer added to the interface (affects Java only where
- they were missing from the proxy class, C# never had them in the interface).
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-03-12: wsfulton
- #1277 Fixes for the family of %interface macros, %interface,
- %interface_impl and %interface_custom fixes for overloaded methods
- in an inheritance chain.
- When C++ methods are not able to be overloaded in a derived class,
- such as when they differ by just const, or the target language
- parameters types are identical even when the C++ parameter types
- are different, SWIG will ignore one of the overloaded methods with
- a warning. A %ignore is required to explicitly ignore one of the
- overloaded methods to avoid the warning message. Methods added
- in the derived classes due to one of the %interface macros are now
- similarly ignored/not added to the derived class.
- The methods added to the derived classes can now also be modified
- via %feature and %rename.
- 2022-03-08: ianlancetaylor
- [Go] Treat a nil argument as a NULL pointer.
- 2022-03-08: ianlancetaylor
- [Go] Add documentation notes about thread local storage.
- 2022-03-08: olly
- #1006 SWIG now copes with an interface filename specified on the
- command line which contains a closing parenthesis `)`, and more
- generally with attributes to `%include` and `%import` which
- are quoted and contain parentheses.
- 2022-03-07: Omar Medina
- [Tcl] https://sourceforge.net/p/swig/bugs/1290/
- Fix SWIG_AsWCharPtrAndSize() to actually assign to result
- variable. It looks like SWIG/Tcl wide character handling is
- currently fundamentally broken except on systems which use wide
- characters as the system encoding, but this should fix wrapping
- functions which take a wide string as a parameter on Microsoft
- Windows.
- 2022-03-07: olly
- [Javascript] #682 Fix handling of functions which take void*.
- 2022-03-06: olly
- SWIG should now reliably exit with status 0 if the run was
- successful and status 1 if there was an error (or a warning and
- -Werror was in effect).
- Previously in some situations SWIG would try to exit with the
- status set to the number of errors encountered, but that's
- problematic - for example if there were 256 errors this would
- result in exit status 0 on most platforms. Also some error
- statuses have special meanings e.g. those defined by <sysexits.h>.
- Also SWIG/Javascript tried to exit with status -1 in a few places
- (which typically results in exit status 255).
- 2022-03-05: wsfulton
- #1441 Fix using declaration in derived class incorrectly introducing a method
- from a base class when the using declaration is declared before the method
- declaration. Problem occurred when within a namespace and the parameter types
- in the method signatures were not fully qualified.
- 2022-03-05: ianlancetaylor
- [Go] Treat non-const references as pointers.
- 2022-03-05: ianlancetaylor
- In SWIG Go testsuite, fail test if "go build" fails.
- 2022-03-03: olly
- #1901 #2223 SWIG should now always exit cleanly if memory
- allocation fails, including removing any output files created
- during the current run.
- Previously most places in the code didn't check for a NULL return
- from malloc()/realloc()/calloc() at all, typically resulting in
- undefined behaviour; some places used assert() to check for a NULL
- return (which is a misuse of assert() and such checks disappear if
- built with NDEBUG defined leaving us back with undefined
- behaviour).
- 2022-03-03: olly
- #891 Report errors for typemap attributes without a value
- (previously SWIG segfaulted) and for typemap types with a value
- (previously the value was quietly ignored).
- The old way of specifying a language name in the typemap attributes
- is no longer supported (it has been deprecated for 16 years).
- 2022-03-02: geographika, wsfulton
- [Python] #1951 Add Python variable annotations support.
- Both function annotations and variable annotations are turned on using the
- "python:annotations" feature. Example:
- %feature("python:annotations", "c");
- struct V {
- float val;
- };
- The generated code contains a variable annotation containing the C float type:
- class V(object):
- val: "float" = property(_example.V_val_get, _example.V_val_set)
- ...
- Python 3.5 and earlier do not support variable annotations, so variable
- annotations can be turned off with a "python:annotations:novar" feature flag.
- Example turning on function annotations but not variable annotations globally:
- %feature("python:annotations", "c");
- %feature("python:annotations:novar");
- or via the command line:
- -features python:annotations=c,python:annotations:novar
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-02-27: wsfulton
- [Python] #735 #1561 Function annotations containing C/C++ types are no longer
- generated when using the -py3 option. Function annotations support has been
- moved to a feature to provide finer grained control. It can be turned on
- globally by adding:
- %feature("python:annotations", "c");
- or by using the command line argument:
- -features python:annotations=c
- Also see entry dated 2022-03-02, regarding variable annotations.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-02-26: wsfulton
- #655 #1840 Add new warning WARN_LANG_USING_NAME_DIFFERENT to warn when a
- method introduced by a using declaration in a derived class cannot
- be used due to a conflict in names.
- 2022-02-24: olly
- #1465 An invalid preprocessor expression is reported as a pair of
- warnings with the second giving a more detailed message from the
- expression evaluator. Previously SWIG prefixed the second message
- with "Error:" - that was confusing as it's actually only a warning
- by default so we've now dropped this prefix.
- Before:
- x.i:1: Warning 202: Could not evaluate expression '1.2'
- x.i:1: Warning 202: Error: 'Floating point constant in preprocessor expression'
- Now:
- x.i:1: Warning 202: Could not evaluate expression '1.2'
- x.i:1: Warning 202: Floating point constant in preprocessor expression
- 2022-02-23: olly
- #1384 Fix a preprocessor expression evaluation bug. A
- subexpression in parentheses lost its string/int type flag and
- instead used whatever type was left in the stack entry from
- previous use. In practice we mostly got away with this because
- most preprocessor expressions are integer, but it could have
- resulted in a preprocessor expression incorrectly evaluating as
- zero. If -Wextra was in use you got a warning:
- Warning 202: Error: 'Can't mix strings and integers in expression'
- 2022-02-21: davidcl
- [Scilab] Improve 5.5.2, 6.0.0 and 6.1.0 support.
- For Scilab 5, long names are reduced to small names preserving the
- class prefix and accessor suffix (get or set).
- For Scilab 6, long names with the class prefix and accessor suffix
- should be used on the user code.
- The `-targetversion` option has been removed as the generated code
- now detects the Scilab version in loader.sce or builder.sce.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-02-20: wsfulton
- Fix %warnfilter warning suppress for warning 315 SWIGWARN_PARSE_USING_UNDEF.
- 2022-02-17: olly
- [PHP] https://sourceforge.net/p/swig/bugs/1211/
- Fix to call cleanup code in exception situations and not to invoke
- the freearg typemap twice in certain situations.
- 2022-02-15: olly
- #300 #368 Improve parser handling of % followed immediately by
- an identifier. If it's not a recognised directive the scanner
- now emits MODULO and then rescans what follows, and if the parser
- then gives a syntax error we report it as an unknown directive.
- This means that `a%b` is now allowed in an expression, and that
- things like `%std::vector<std::string>` now give an error rather
- than being quietly ignored.
- 2022-02-11: adr26
- [Python] #2154 Fix memory leak.
- SWIG python objects were being freed after the corresponding SWIG
- module information was destroyed in Python 3, causing leaks when as
- a result the object destructor could not be invoked. To prevent this
- misordering, SWIG python objects now obtain a reference to the
- Python capsule wrapping the module information, so that the module
- information is correctly destroyed after all SWIG python objects
- have been freed (and corresponding destructors invoked).
- 2022-02-10: olly
- [Tcl] https://sourceforge.net/p/swig/bugs/1207/
- https://sourceforge.net/p/swig/bugs/1213/
- Fix Tcl generic input typemap for std::vector.
- 2022-02-07: sethrj
- #2196 Add alternative syntax for specifying fragments in typemaps.
- New syntax:
- %typemap("in", fragment="frag1", fragment="frag2", fragment="frag3") {...}
- which is equivalent to:
- %typemap(in, fragment="frag1,frag2,frag3") {...}
- 2022-02-07: olly
- #1806 Remove support for the "command" encoder, which was mostly
- intended for use in `%rename` - most uses can be achieved using
- the "regex" encoder, so we recommend using that instead.
- The "command" encoder suffers from a number of issues - as the
- documentation for it admitted, "[it] is extremely slow compared to
- all the other [encoders] as it involves spawning a separate process
- and using it for many declarations is not recommended" and that it
- "should generally be avoided because of performance
- considerations".
- But it's also not portable. The design assumes that `/bin/sh`
- supports `<<<` but that's a bash-specific feature so it doesn't
- work on platforms where `/bin/sh` is not bash - it fails on
- Debian, Ubuntu and probably some other Linux distros, plus most
- non-Linux platforms. Microsoft Windows doesn't even have a
- /bin/sh as standard.
- Finally, no escaping of the passed string is done, so it has
- potential security issues (though at least with %rename the input
- is limited to valid C/C++ symbol names).
- 2022-02-06: olly
- #2193 -DFOO on the SWIG command line now sets FOO to 1 for
- consistency with C/C++ compiler preprocessors. Previously
- SWIG set FOO to an empty value.
- Existing invocations of SWIG with `-DFOO` where the empty value
- matters can be updated to `-DFOO=` which should work with both
- old and new releases of SWIG.
- *** POTENTIAL INCOMPATIBILITY ***
- 2022-02-06: sethrj
- #2194 Classes that are non-assignable due to const data or const
- reference members are now automatically detected.
- 2022-02-04: friedrichatgc
- [Octave] #1672 Fix for isobject for Octave 4.4 - 6.0.
- 2022-02-03: olly
- [C#] #283 #998 Fix memory leak in directorin typemap for
- std::string.
- 2022-02-03: olly
- [Python] #967 Make `self` parameter available to user typemaps.
- 2022-02-03: teythoon
- [Python] #801 Fix -Wunused-parameter warnings with builtin,
- 2022-02-03: teythoon
- #801 Fix -Wstrict-prototypes warnings in generated pointer
- functions.
- 2022-02-03: olly
- #660 https://sourceforge.net/p/swig/bugs/1081/
- Default parameter values containing method calls are now parsed and
- handled - e.g. `x->foo(3,4)` and `y.z()`.
- 2022-02-02: olly
- [Ruby] https://sourceforge.net/p/swig/bugs/1136/ Fix remove of prefix
- from method name to only remove it at the start.
- 2022-02-01: olly
- #231 Handle returning an object by reference in a C++ trailing
- return type.
- 2022-02-01: davidcl
- [Scilab] #745 use SWIG_<module>_Init() as a C module init function.
- 2022-02-01: olly
- [OCaml] #2083 Fix to work when CAML_SAFE_STRING is on, which it is
- by default in recent Ocaml releases.
- 2022-01-31: mreeez
- https://sourceforge.net/p/swig/bugs/1147/
- Fix copyToR() generated for a struct in a namespace.
- 2022-01-29: fschlimb
- #655 Better handling of using declarations.
- 2022-01-29: dontpanic92
- [Go] #676 Fix code generated for a C++ class with a non-capitalised
- name.
- 2022-01-26: trex58
- #1919 #1921 #1923 Various fixes for AIX portability.
- 2022-01-26: olly
- #1935 Don't crash on an unclosed HTML tag in a doxygen comment
- when -doxygen is specified.
- 2022-01-25: olly
- Constant expressions now support member access with `.` such as
- `foo.bar`. Previous this only worked in a case like `x->foo.bar`.
- 2022-01-25: olly
- #2091 Support most cases of `sizeof` applied to an expression
- in constant expressions. Previously there was only support for
- `sizeof(<type>)` and expressions which syntactically look like a
- type (such as `sizeof(foo)`).
- 2022-01-25: olly
- #80 #635 https://sourceforge.net/p/swig/bugs/1139/
- Add support for parsing common cases of `<` and `>` comparisons
- in constant expressions. Adding full support for these seems hard
- to do without introducing conflicts into the parser grammar, but in
- fact all reported cases have had parentheses around the comparison
- and we can support that with a few restrictions on the left side of
- `<`.
- 2022-01-25: wsfulton
- New warning 327 for extern templates, eg:
- extern template class std::vector<int>;
- extern template void Func<int>();
- results in warning
- example.i:3: Warning 327: Extern template ignored.
- example.i:4: Warning 327: Extern template ignored.
- Extern template classes previously resulted in warning 320.
- 2022-01-24: romintomasetti
- #2131 #2157 C++11 extern function template parsing error fix.
- 2022-01-21: wsfulton
- #2120 #2138 Replace legacy PCRE dependency with PCRE2.
- This requires changes for building SWIG from source. See updated
- html documentation in Preface.html and Windows.html. Updated
- instructions are also shown when running ./configure if PCRE2 is not
- found. Note that debian based systems can install PCRE2 using:
- apt install libpcre2-dev
- Note that https://github.com/swig/swig/wiki/Getting-Started also has
- updated information for building from source.
- 2022-01-19: olly
- [PHP] #2027 Automatically generate PHP type declarations for PHP 8.
- The generate code still compiles for PHP 7.x, but without type
- declarations since PHP 7.x has much more limited type declaration
- support.
- 2022-01-18: olly
- [Perl] #1629 Perl 5.8.0 is now the oldest version we aim to support.
- 2022-01-14: wsfulton
- [Python] Fix %callback and specifying the callback function as a
- static member function using Python staticmethod syntax, such as
- Klass.memberfunction instead of Klass_memberfunction when using
- -builtin and -fastproxy.
- 2022-01-11: wsfulton
- [Python] Accept keyword arguments accessing static member functions when
- using -builtin and kwargs feature and Python class staticmethod syntax.
- The missing keyword argument support was only when using the
- class staticmethod syntax, such as Klass.memberfunction, and not when
- using the flat static method syntax, such as Klass_memberfunction.
- 2022-01-04: juierror
- [Go] #2045 Add support for std::array in std_array.i.
- 2021-12-18: olly
- [PHP] Add PHP keyword 'readonly' (added in 8.1) to the list SWIG
- knows to automatically rename. This keyword is special in that PHP
- allows it to be used as a function (or method) name.
- 2021-12-07: vstinner
- [Python] #2116 Python 3.11 support: use Py_SET_TYPE()
- 2021-12-05: rwf1
- [Octave] #2020 #1893 Add support for Octave 6 up to and including 6.4.
- Also add support for compiling with -Bsymbolic which is used by default
- by mkoctfile.
- 2021-12-02: jsenn
- [Python] #2102 Fixed crashes when using embedded Python interpreters.
- 2021-11-12: wsfulton
- [Javascript] v8 and node only. Fix mismatched new char[] and free()
- when wrapping C code char arrays. Now calloc is now used instead of
- new char[] in SWIG_AsCharPtrAndSize.
- 2021-10-03: ajrh1
- [Perl] #2074: Avoid -Wmisleading-indentation in generated code
- when using gcc11.
- 2021-10-03: jschueller
- [CMake] #2065: Add option to enable or disable PCRE support.
- 2021-09-16: ianlancetaylor
- [Go] Improved _cgo_panic implementation.
- 2021-09-16: ianlancetaylor
- [Go] Don't use crosscall2 for panicking. Instead rely on documented
- and exported interfaces.
- 2021-09-14: ianlancetaylor
- [Go] Remove -no-cgo option (long unsupported in Go)
- 2021-05-04: olly
- [PHP] #2014 Throw PHP exceptions instead of using PHP errors
- PHP exceptions can be caught and handled if desired, but if they
- aren't caught then PHP exits in much the same way as it does for a
- PHP error.
- In particular this means parameter type errors and some other cases
- in SWIG-generated wrappers now throw a PHP exception, which matches
- how PHP's native parameter handling deals with similar situations.
- `SWIG_ErrorCode()`, `SWIG_ErrorMsg()`, `SWIG_FAIL()` and `goto thrown;`
- are no longer supported (these are really all internal implementation
- details and none are documented aside from brief mentions in CHANGES
- for the first three). I wasn't able to find any uses in user interface
- files at least in FOSS code via code search tools.
- If you are using these:
- Use `SWIG_PHP_Error(code,msg);` instead of `SWIG_ErrorCode(code);
- SWIG_ErrorMsg(msg);` (which will throw a PHP exception in SWIG >= 4.1
- and do the same as the individual calls in older SWIG).
- `SWIG_FAIL();` and `goto thrown;` can typically be replaced with
- `SWIG_fail;`. This will probably also work with older SWIG, but
- please test with your wrappers if this is important to you.
- *** POTENTIAL INCOMPATIBILITY ***
- 2021-05-17: adr26
- [Python] #1985 Fix memory leaks:
- 1. Python object references were being incorrectly retained by
- SwigPyClientData, causing swig_varlink_dealloc() never to run / free
- memory. SwigPyClientData_New() / SwigPyClientData_Del() were updated
- to fix the object reference counting, causing swig_varlink_dealloc()
- to run and the memory swig_varlink owns to be freed.
- 2. SwigPyClientData itself was not freed by SwigPyClientData_Del(),
- causing another heap leak. The required free() was added to
- SwigPyClientData_Del()
- 3. Fix reference counting/leak of python cached type query
- 4. Fix reference counting/leak of SwigPyObject dict (-builtin)
- 5. Python object reference counting fixes for out-of-memory
- scenarios were added to: SWIG_Python_RaiseOrModifyTypeError(),
- SWIG_Python_AppendOutput(), SwigPyClientData_New(),
- SwigPyObject_get___dict__() and SwigPyObject_format()
- 6. Add error handling for PyModule_AddObject() to
- SWIG_Python_SetModule() (failure could be caused by OOM or a name
- clash caused by malicious code)
- 2021-05-13: olly
- [UFFI] #2009 Remove code for Common Lisp UFFI. We dropped support
- for it in SWIG 4.0.0 and nobody has stepped forward to revive it in
- over 2 years.
- 2021-05-13: olly
- [S-EXP] #2009 Remove code for Common Lisp S-Exp. We dropped
- support for it in SWIG 4.0.0 and nobody has stepped forward to
- revive it in over 2 years.
- 2021-05-13: olly
- [Pike] #2009 Remove code for Pike. We dropped support for it in
- SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
- years.
- 2021-05-13: olly
- [Modula3] #2009 Remove code for Modula3. We dropped support for it
- in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
- years.
- 2021-05-13: olly
- [CLISP] #2009 Remove code for GNU Common Lisp. We dropped support
- for it in SWIG 4.0.0 and nobody has stepped forward to revive it in
- over 2 years.
- 2021-05-13: olly
- [Chicken] #2009 Remove code for Chicken. We dropped support for it
- in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
- years.
- 2021-05-13: olly
- [Allegrocl] #2009 Remove code for Allegro Common Lisp. We dropped
- support for it in SWIG 4.0.0 and nobody has stepped forward to
- revive it in over 2 years.
- 2021-05-04: olly
- [PHP] #1982 #1457 https://sourceforge.net/p/swig/bugs/1339/
- SWIG now only use PHP's C API to implement its wrappers, and no
- longer generates PHP code to define classes. The wrappers should
- be almost entirely compatible with those generated before, but
- faster and without some previously hard-to-fix bugs.
- The main notable difference is SWIG no longer generates a .php
- wrapper at all by default (only if %pragma(php) code=... or
- %pragma(php) include=... are specified in the interface file).
- This also means you need to load the module via extension=...
- in php.ini, rather than letting the dl() in the generated
- .php wrapper load it (but dl() has only worked for command-line
- PHP for some years now).
- *** POTENTIAL INCOMPATIBILITY ***
- 2021-04-30: olly
- #1984 Remove support for $source and $target.
- These were officially deprecated in 2001, and attempts to use them have
- resulted in a warning (including a pointer to what to update them to)
- for most if not all of that time.
- 2021-04-27: wsfulton
- #1987 [Java] Fix %interface family of macros for returning by const
- pointer reference.
- 2021-04-19: olly
- Fix use of uninitialised variable in the generated code for an
- empty typecheck typemap, such as the dummy one we include for
- std::initializer_list.
- 2021-04-12: olly
- #1777 [Python] Specifying -py3 now generates a check for Python
- version >= 3.0.
- 2021-03-26: olly
- [PHP] Add PHP keywords 'fn' (added in 7.4) and 'match' (added in
- 8.0) to the list SWIG knows to automatically rename.
- 2021-03-23: wsfulton
- #1942 [Python] Fix compilation error in wrappers when using -builtin
- and wrapping varargs in constructors.
- 2021-03-22: goto40
- #1977 Fix handling of template template parameters.
- 2021-03-21: olly
- #1929, #1978 [PHP] Add support for PHP 8.
- 2021-03-19: wsfulton
- #1610 Remove -ansi from default compilation flags.
- 2021-03-19: dot-asm
- #1934 [Java] Clean up typemaps for long long arrays.
- 2021-03-19: olly
- #1527 [PHP] Improve PHP object creation in directorin case.
- Reportedly the code we were using in this case gave segfaults in
- PHP 7.2 and later - we've been unable to reproduce these, but the
- new approach is also simpler and should be bit faster too.
- 2021-03-18: olly
- #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
- corresponding in typemap does.
- 2021-03-18: olly
- #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
- non-void return.
- 2021-03-11: murillo128
- #1498 [Javascript] Support type conversion.
- 2021-03-06: nshmyrev
- #872 [Javascript] Various typemap issues in arrays_javascript.i fixed.
- 2021-03-03: vaughamhong
- #577 [Javascript] Implemented SetModule/GetModule for JSC to allow type sharing
- across modules.
- 2021-03-01: xantares, Oliver Buchtala, geographika
- #1040 Add support for building SWIG with CMake. See documentation in Windows.html.
- 2021-03-01: vadz
- #1952 Fix incorrect warning "Unknown Doxygen command: ."
- 2021-02-28: p2k
- #969 [Javascript] v8/node - prevent crash calling a constructor without new keyword.
- 2021-02-28: alecmev
- #405 #1121 [Javascript] Fix OUTPUT typemaps on methods that don't return void.
- The output value is appended to the return value.
- 2021-02-26: murillo128, wsfulton
- #1269 [Javascript] Fix handling of large positive unsigned long and
- unsigned long long values.
- 2021-02-24: tomleavy, yegorich, tungntpham
- #1746 [Javascript] Add support for Node v12, v14 and v16.
- SWIG support for Node is now for v6 and later only.
- 2020-02-09: ZackerySpytz
- #1872 Fix typos in attribute2ref macros.
- 2020-10-10: wsfulton
- [Javascript] Fix so that ccomplex.i interface to file can be used.
- 2020-10-10: wsfulton
- #252 complex can now be used as a C identifier and doesn't give a syntax error.
- 2020-10-10: lpsinger
- #1770 Correct C complex support.
- _Complex is now parsed as a keyword rather than complex as per the C99 standard.
- The complex macro is available in the ccomplex.i library file along with other
- complex number handling provided by the complex.h header.
- 2020-10-07: ZackerySpytz
- [Python] #1812 Fix the error handling for the PyObject_GetBuffer() calls in
- pybuffer.i.
- 2020-10-07: treitmayr
- #1824 Add missing space in director method declaration returning
- const pointer.
- 2020-10-07: adelva1984
- #1859 Remove all (two) exceptions from SWIG executable.
- 2020-09-25: wsfulton
- [C#, Java] #1874 Add ability to change the modifiers for the interface
- generated when using the %interface macros.
- For C# use the 'csinterfacemodifiers' typemap.
- For Java use the 'javainterfacemodifiers' typemap.
- For example:
- %typemap(csinterfacemodifiers) X "internal interface"
- 2020-09-24: geefr
- [C#] #1868 Fix wchar_t* csvarout typemap for member variable wrappers.
- 2020-08-28: wsfulton
- [Java] #1862 Fix crashes in swig_connect_director during director class construction
- when using the director class from multiple threads - a race condition initialising
- block scope static variables. The fix is guaranteed when using C++11, but most
- compilers also fix it when using C++03/C++98.
- 2020-08-16: wsfulton
- [Python] Add missing initializer for member '_heaptypeobject::ht_module' when using
- -builtin to complete Python 3.9 support.
- 2020-08-16: wsfulton
- [Python] Remove PyEval_InitThreads() call for Python 3.7 and later as Python calls
- it automatically now. This removes a deprecation warning when using Python 3.9.
- 2020-08-15: wsfulton
- [Python] All Python examples and tests are written to be Python 2 and Python 3
- compatible, removing the need for 2to3 to run the examples or test-suite.
- 2020-08-13: wsfulton
- [C#] Add support for void *VOID_INT_PTR for member variables.
- 2020-07-29: chrisburr
- #1843 [Python] Compilation error fix in SwigPyBuiltin_SetMetaType when using PyPy.
- 2020-06-14: ZackerySpytz
- #1642 #1809 Fix virtual comparison operators in director classes by removing an
- incorrect space in the function name (for example, operator= = is now operator==).
- Version 4.0.2 (8 Jun 2020)
- ==========================
- 2020-06-07 vigsterkr
- [Ruby] #1717 Nil fix mangling strings
- 2020-06-07 vadz
- #1748 Fix doxygen comments quoting issue
- 2020-06-07 munoah
- #1800 Escape spaces in file paths for dependencies (-M -MM etc)
- 2020-06-06 andreas-schwab
- [Ruby] #1801 Fix encoding on big endian systems when wrapping std::wstring.
- 2020-05-31 kwwette
- [Octave] #1789 error handling improvements and return error code on exit for SWIG wrapped modules.
- 2020-05-30 msteinbeck
- [D] #1593 Replace broken imports when using newer versions of D.
- 2020-05-29: ZackerySpytz
- [Python] #1716 Performance improvements when converting strings when using Python >= 3.3.
- 2020-05-28: ZackerySpytz
- #1776 Quite dramatically decrease run times when generating very large interface files by changing
- some internal memory pool sizes.
- 2020-05-28: mcfarljm
- #1788 Fix handling of Doxygen \endlink command.
- 2020-05-24: vapier
- [Javascript] #1796 Fix pkg-config invocation in configure.
- 2020-04-30: kwwette
- [Octave] Fix exception raising for newer Octave versions
- Since (at least) Octave 5.1.0, the Octave error() function now raises a C++ exception,
- which if uncaught immediately exits a SWIG wrapper function, bypassing any cleanup code
- that may appear after a "fail:" label. This patch adds a "try { ... } catch(...) { }"
- block around the contents of SWIG wrapper functions to first execute the cleanup code
- before rethrowing any exception raised. It is backward compatible with earlier versions
- of Octave where error() does not raise an exception, which will still branch to the
- "fail:" block to execute cleanup code if an error is encountered.
- Note that the new "try { ... } catch(...) { }" block will localise any local variables
- used in typemaps that were NOT declared through SWIG's %typemap(...) syntax, so it's
- possible this could break existing SWIG wrappers which were implicitly sharing local
- variables between typemaps. This can be fixed, however, by declaring local variables
- which need to be shared between typemaps through SWIG's %typemap(...) syntax.
- 2020-02-18: ryannevell
- [Lua] #1728 Add support for LUA lightuserdata to SWIG_Lua_ConvertPtr.
- 2020-02-18: dmach
- [Ruby] #1725 Fix gcc -Wcatch-value warnings.
- 2020-02-14: treitmayr
- #1724 Fix wrapping of abstract user-defined conversion operators.
- 2020-02-13: ddurham2
- [Python] #1512 Fix memleak when using STL containers of shared_ptr objects.
- 2020-02-06: wsfulton
- [Python] #1673 #1674 Fix setting 'this' when extending a proxy class with __slots__.
- 2020-01-31: vadz
- [Ruby] #1651 Add std::auto_ptr<> typemaps.
- 2020-01-31: ZackerySpytz
- [Python] #1700 The Python C API functions PyBytes_AsStringAndSize() and
- PyString_AsStringAndSize() are now checked for failure.
- 2020-01-31: vadz
- [Python] #1710 Fix crash parsing empty docstrings.
- 2020-01-30: Alzathar
- [R] #910 #914 Fix R memory leak on exception.
- 2020-01-30: richardbeare
- [R] #1511 Fix bug wrapping functions. These were previously incorrectly wrapped as if
- they were variables. This happened when 'get' or 'set' was in the name of the function
- or method, but sometimes also in some other circumstances. If you were using R
- attribute syntax to access these methods, you'll need to switch to calling them as R
- methods.
- *** POTENTIAL INCOMPATIBILITY ***
- 2020-01-24: etse-dignitas, wsfulton
- [C#, D, Java] #1533 Fix upcasting for shared_ptr's of templated types.
- 2020-01-16: mcfarljm
- #1643 #1654 When using -doxygen, fix segfault when nameless parameters or vararg parameters
- are used.
- 2020-01-16: mcfarljm
- #1632 #1659 Fix newline handling for doxygen "///" comments.
- 2020-01-14: mcfarljm
- #1647 #1656 Fix crash handling empty doxygen comments.
- 2020-01-14: mcfarljm
- #1608 Improve doxygen support.
- - Add support for \param[] commands such as: \param[in].
- - Optional arguments are marked as 'optional' in pydoc.
- - Improve support for \code commands so that other languages are supported as code blocks.
- Support added for java, c and py. For example Python: \code{.py} ... \endcode
- - Fix doxygen handling of \em and \p tags for Python.
- 2020-01-13: wsfulton
- [Python] #1595 Python -builtin constructors silently ignored keyword arguments.
- Instead of silently ignoring them, now a "TypeError: f() takes no keyword arguments"
- exception is thrown if keyword arguments are used. Hence constructors and normal methods/
- functions behave in the same way. Note, -keyword should be used with -builtin to obtain
- keyword argument support.
- 2020-01-05: jschueller shadchin
- [Python] #1670 #1696 Add missing field initializers introduced in python 3.8:
- tp_vectorcall and tp_print.
- 2020-01-05: friedrichatgc
- [Octave] #1688 Change swig_this() to use size_t instead of long for compatibility
- with Windows 64 bit.
- 2020-01-05: treitmayr
- [Ruby] #1692 #1689 Add support for Ruby 2.7
- 2019-12-30: treitmayr
- [Ruby] #1653 #1668 Fix code generated when using -globalmodule option.
- 2019-12-29: ZackerySpytz
- [OCaml] #1686 Fix compilation errors with OCaml 4.09.0.
- 2019-12-10: wsfulton
- #1679 Fix parsing of C++11 identifiers with special meaning (final and override) when
- they are used as part of the scope name of an identifier, such as a namespace name.
- 2019-11-26: wsfulton
- [C#] #1628 'out' or 'ref' used in a cstype typemap was not always stripped out in parts
- of director code generation.
- 2019-11-01: wsfulton
- [Python] #1595 Fix bug in support for keyword arguments (kwargs feature or -keyword)
- when using -builtin. The fix is in the argument error checking when wrapping zero
- argument constructors only.
- Version 4.0.1 (21 Aug 2019)
- ===========================
- 2019-08-20: TekuConcept
- [Javascript] #1535 Add %native support to Javascript.
- 2019-08-20: bkotzz
- [Java] #1616 Add SWIG_JavaIllegalStateException to support throwing
- java.lang.IllegalStateException from JNI code.
- 2019-08-19: sjml
- [Lua] #1596 tostring output changes to show the underlying C/C++ pointer.
- 2019-08-08: rokups
- [C#, Java] #1601 Fix invalid code generated for "%constant enum EnumType.
- 2019-08-07: wsfulton
- [Python] Fix method overloading of methods that take STL containers of different
- types. The following usage (using std::vector) would fail when using -builtin:
- %include <std_string.i>
- %include <std_vector.i>
- %inline %{
- struct X {};
- %}
- %template(VectorX) std::vector<X>;
- %template(VectorInt) std::vector<int>;
- %inline %{
- using namespace std;
- string VectorOverload(vector<X> v);
- string VectorOverload(vector<int> v);
- %}
- The following would incorrectly fail:
- s = VectorOverload([1, 2, 3])
- With:
- Traceback (most recent call last):
- File "runme3.py", line 20, in <module>
- ret = VectorOverload([1, 2, 3])
- TypeError: Wrong number or type of arguments for overloaded function 'VectorOverload'.
- Possible C/C++ prototypes are:
- VectorOverload(std::vector< Number,std::allocator< Number > >)
- VectorOverload(std::vector< int,std::allocator< int > >)
- The problem was due to some error handling that was not cleared during typechecking.
- In this case an error was not cleared when the elements in the list failed the
- typecheck for converting to X. Only occurs in Python 3+.
- In some combinations of overloaded methods, the following type of error message would
- occur:
- RuntimeError: in sequence element 0
- The above exception was the direct cause of the following exception:
- Traceback (most recent call last):
- File "runme3.py", line 23, in <module>
- check(VectorOverload(v), "vector<X>")
- SystemError: <built-in function VectorOverload> returned a result with an error set
- 2019-08-01: wsfulton
- #1602 Fix regression in 4.0.0 where a template function containing a parameter
- with the same name as the function name led to the parameter name used in the
- target language being incorrectly modified.
- 2019-07-29: wsfulton
- Remove all generated files on error. Previously generated files were not removed,
- potentially breaking Makefiles using file dependencies, especially when -Werror
- (warnings as errors) was used.
- 2019-07-23: smithx
- [C#] #1530 #1532 Fix marshalling of std::wstring to C#.
- 2019-07-18: gicmo
- [Python] #1587 Python 3.8 support - remove use of deprecated PyObject_GC_UnTrack.
- 2019-07-18: cher-nov
- [Python] #1573 Generated Python code uses consistent string quoting style - double
- quotes.
- 2019-07-16: geefr
- [C#] #616 #1576 Fix C# bool INPUT[], bool OUTPUT[], bool INOUT[] typemaps to marshall
- as 1-byte.
- 2019-07-12: vadz
- [C#, Java] #1568 #1583 Fix std::set<> typemaps for primitive types.
- 2019-07-12: vadz
- #1566 #1584 Regression in 4.0.0 - fix missing value for first item of enums with
- trailing comma.
- 2019-07-11: mcfarljm
- #1548 #1578 Fix segfault in Doxygen parser parsing empty lines in some commands like
- \code.
- 2019-07-09: IsaacPascual
- [C#, Java] #1570 Fix name of generated C#/Java classes for %interface macros
- in swiginterface.i when wrapping nested C++ classes.
- 2019-07-05: wsfulton
- [Python] #1547 Whitespace fixes in Doxygen translated comments into pydoc comments
- for Sphinx compatibility.
- 2019-06-28: wsfulton
- [MzScheme, OCaml] #1559 $arg and $input were incorrectly substituted in the
- argout typemap when two or more arguments were present.
- 2019-06-24: wsfulton
- [Python, Ruby] #1538 Remove the UnknownExceptionHandler class in order to be
- C++17 compliant as it uses std::unexpected_handler which was removed in C++17.
- This class was intended for director exception handling but was never used by
- SWIG and was never documented.
- *** POTENTIAL INCOMPATIBILITY ***
- 2019-06-06: bkotzz
- [Java] #1552 Improve performance in Java std::vector constructor wrapper that takes
- a native Java array as input.
- 2019-06-03: olly
- [Python] Fix regression in implicit_conv handling of tuples,
- introduced in SWIG 4.0.0. Fixes #1553, reported by Alexandre
- Duret-Lutz.
- 2019-05-24: wsfulton
- [Octave] Fix detection of Octave on MacOS.
- 2019-05-24: opoplawski
- [Octave] #1522 Adapt OCTAVE_LDFLAGS for Octave 5.1.
- 2019-05-22: ferdynator
- [PHP] #1528 Don't add a closing '?>' PHP tag to generated files.
- PSR-2 says it MUST be omitted for files containing only PHP.
- Version 4.0.0 (27 Apr 2019)
- ===========================
- 2019-04-24: vadz
- #1517 Fix crash if "@return" Doxygen tag was used on a node without any return type.
- 2019-04-24: vadz
- #1515 Fix parsing of enums with trailing comma when using -doxygen.
- 2019-04-19: ianlancetaylor
- [Go] #1055 When generating Go code, make -cgo the default. Add new -no-cgo option
- to disable the default.
- 2019-04-19: pbecherer
- [Tcl] #1508 Fix Visual Studio 2015 and later compilation errors due to snprintf macro
- definition.
- 2019-04-09: wsfulton
- [C#] Fix FxCop warning CA2002 in SWIGPendingException - a lock on a reference of
- type 'Type'.
- 2019-03-30: wsfulton
- [Java, D] Add the parameters typemap attribute to the javadestruct,
- javadestruct_derived, ddispose, ddispose_derived typemaps to mirror enhanced
- flexibility in the csdisposing and csdisposing_derived (C#) typemaps. If provided
- the contents are generated as the delete/dispose method's parameters declaration.
- 2019-03-30: wsfulton
- [C#] #421 Fix FxCop warning CA1063 by implementing the recommended Dispose methods for
- the IDisposable interface. Previously just the Dispose() method was generated.
- Now the Dispose() and Dispose(bool disposing) methods are generated.
- Changes are required if custom "csfinalize", "csdestruct" or "csdestruct_derived"
- typemaps are being used. Details in #421 on Github. SWIG will error out if one of
- the "csfinalize, "csdestruct" or "csdestruct_derived" typemaps are found. Example
- error message:
- foo.h:60: Error: A deprecated csfinalize typemap was found for Foo, please remove
- it and replace all csdestruct, csdestruct_derived and csfinalize typemaps by the
- csdispose, csdispose_derived, csdisposing and csdisposing_derived typemaps.
- *** POTENTIAL INCOMPATIBILITY ***
- 2019-03-25: Liryna
- [C#] #1143 Add std_list.i for std::list support.
- The C# std::list<T> wrappers are made to look and feel like a C#
- System.Collections.Generic.LinkedList<> collection.
- The IEnumerable<> interface is implemented in the proxy class.
- The ICollection<> interface can also be implemented to provide enhanced functionality
- whenever a C++ operator== is available. This is the case for when T is a
- primitive type or a pointer. If T does define an operator==, then use the
- SWIG_STD_LIST_ENHANCED macro to obtain this enhanced functionality, for example:
- SWIG_STD_LIST_ENHANCED(SomeNamespace::Klass)
- %template(ListKlass) std::list<SomeNamespace::Klass>;
- 2019-03-18: richardbeare
- [R] #1328 Non-trivial enums are working now. The enum values are now obtained from
- the C/C++ layer. const reference enums and C++11 enum classes are also now working.
- 2019-03-14: mochizk
- [Javascript] #1500 Fix compilation errors due to deprecating V8 API in Node.js.
- New V8 API is used if node.js >= v10.12, or if V8 >= v7.0.
- 2019-03-12: vadz
- [C#] #1495 Add std_set.i for std::set support.
- 2019-03-11: dirteat,opoplawski
- [Octave] Fix compilation errors in Octave 5.1.
- error: format not a string literal and no format arguments [-Werror=format-security]
- 2019-02-28: wsfulton
- [Java] std::vector improvements for types that do not have a default constructor.
- The std::vector wrappers have been changed to work by default for elements that are
- not default insertable, i.e. have no default constructor. This has been achieved by
- not wrapping:
- vector(size_type n);
- Previously the above had to be ignored via %ignore.
- If the above constructor is still required it can be added back in again via %extend:
- %extend std::vector {
- vector(size_type count) { return new std::vector< T >(count); }
- }
- Alternatively, the following wrapped constructor could be used as it provides near-enough
- equivalent functionality:
- vector(jint count, const value_type& value);
- *** POTENTIAL INCOMPATIBILITY ***
- 2019-02-25: wsfulton
- [Python] Fix compile errors wrapping overloaded functions/constructors where a vararg
- function is declared after a non-vararg function.
- 2019-02-23: zphensley42
- Use fully qualified name 'java.lang.Object' instead of 'Object' in generated code to
- avoid clashes with wrapped C++ classes called 'Object'.
- 2019-02-23: gtbX
- [Java] #1035 Add (const char *STRING, size_t LENGTH) typemaps in addition to the non-const
- typemaps (char *STRING, size_t LENGTH) which does not attempt to write back to the const
- string.
- 2019-02-22: tamuratak
- [Ruby] #984 Add support for RTypedData introduced in Ruby 1.9.3.
- 2019-02-22: ZackerySpytz
- #1483 Fix compilation failures when a director class has final methods.
- 2019-02-21: wsfulton
- [Java] #1240 Suppress Java 9 deprecation warnings on finalize method.
- 2019-02-21: ZackerySpytz
- #1480 Fix some rejections of valid floating-point literals.
- 2019-02-19: wsfulton
- #1475 Fix regression parsing gcc preprocessor linemarkers in the form:
- # linenum filename flags
- 2019-02-18: jakecobb
- [Python] #945 #1234 Elements in std::vector memory access fix.
- Accessing an element in a std::vector obtains a reference to the element via an
- iterator pointing to the element in the container. If the vector is garbage collected,
- the SWIG wrapper containing the pointer to the element becomes invalid. The fix is
- to obtain a back-reference to the container by the wrapper to the element in the Python
- layer to prevent the garbage collector from destroying the underlying container.
- 2019-02-17: wsfulton
- Fix typemap matching to expand template parameters when the name contains
- template parameters. In the %typemap below the type is T and the name is X<T>::make
- and the name now expands correctly to X< int >::make
- template<typename T> struct X {
- %typemap(out) T X<T>::make "..."
- T make();
- };
- %template(Xint) X<int>;
- 2019-02-16: wsfulton
- Fix parser error containing multiple #define statements inside an enum.
- The second #define fails to parse:
- enum FooEnum {
- ENUM1 = 0,
- ENUM2 = 1,
- #define MACRO_DEF1 "Hello"
- #define MACRO_DEF2 "World!"
- ENUM3 = 2,
- ENUM4 = 3,
- };
- Bug mentioned at https://sourceforge.net/p/swig/patches/333/
- 2019-02-14: wsfulton
- Add some missing copy constructors into STL containers.
- 2019-02-14: bkotzz
- [Java] #1356 Add STL containers:
- std::unordered_map
- std::unordered_set
- std::set
- 2019-02-14: bkotzz
- [Java] #1356 std::map wrappers have been modified. Now the Java proxy class
- extends java.util.AbstractMap. The std::map container looks and feels much like
- a java.util.HashMap from Java.
- A few members have changed their names. If the old method signatures are needed,
- then copy std_map.i from swig-3.0.12 and use that instead. Alternatively,
- add the old missing methods to the new methods by using the following %proxycode:
- %extend std::map {
- %proxycode %{
- // Old API
- public boolean empty() {
- return isEmpty();
- }
- public void set($typemap(jboxtype, K) key, $typemap(jboxtype, T) x) {
- put(key, x);
- }
- public void del($typemap(jboxtype, K) key) {
- remove(key);
- }
- public boolean has_key($typemap(jboxtype, K) key) {
- return containsKey(key);
- }
- %}
- }
- *** POTENTIAL INCOMPATIBILITY ***
- 2019-02-13: ZackerySpytz
- #1469 Add support for C++17 hexadecimal floating literals.
- 2019-02-11: wsfulton
- [OCaml] #1437 OCaml has been give the 'Experimental' language status. The examples work
- and most of the test-suite is also working, so it is quite close to being a 'Supported' language.
- 2019-02-10: ZackerySpytz
- #1464 Add support for C++14 binary integer literals.
- 2019-02-10: ZackerySpytz
- #1450 Add support for C++11 UCS-2 and UCS-4 character literals. Also, add support for
- C++17 UTF-8 character literals.
- 2019-02-10: wsfulton
- [MzScheme] #1437 MzScheme/Racket is now an 'Experimental' language. The examples work
- and a large portion of the test-suite is also working.
- 2019-02-10: wsfulton
- [MzScheme] Destructor wrappers were not being generated.
- 2019-02-10: wsfulton
- [MzScheme] Static variable wrappers fixed - $argnum was not expanded.
- 2019-02-10: sethrj
- #1452 Fix %apply for anonymous template instantiations
- 2019-02-09: olly
- [PHP] Fix access to already released memory during PHP module
- shutdown, which often didn't cause visible problems, but could
- result in segmentation faults, bus errors, etc. Fixes #1170,
- reported by Jitka Plesníková.
- 2019-02-09: olly
- [PHP] A renamed constructor is now wrapped as a static method in
- PHP.
- 2019-02-08: olly
- [PHP] Don't generate code which references $r when $r hasn't been
- defined. This could happen in overloaded methods which returned
- void and took at least one const std::string& parameter.
- 2019-02-08: olly
- [PHP] The generated code is now compatible with PHP 7.3, and the
- testsuite now runs cleanly with this version too.
- 2019-02-05: wsfulton
- #1437 SWIG now classifies the status of target languages into either 'Experimental' or
- 'Supported'. This status is provided to indicate the level of maturity to expect when using
- a particular target language as not all target languages are fully developed. Details are
- in the Introduction.html chapter of the documentation.
- 2019-02-04: wsfulton
- [CFFI] #1447 Common Lisp CFFI has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [Allegrocl] #1447 Allegro Common Lisp has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [Chicken] #1447 CHICKEN has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [CLISP] #1447 GNU Common Lisp has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [S-EXP] #1447 Common Lisp S-Exp has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [UFFI] #1447 Common Lisp UFFI has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [Pike] #1447 Pike has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-04: wsfulton
- [Modula3] #1447 Modula3 has been disabled as a target language in SWIG as part of a
- clean up to remove target languages that have been neglected/not functional.
- 2019-02-02: ahnolds
- [Python] Documentation enhancements for Python:
- #728 Fixed the handling of autodoc when using -fastproxy.
- #1367 Added documentation to wrapped member variables using the
- property(... doc="...") construct.
- Only show a single documentation entry for functions with default arguments when
- using autodoc.
- Fixed a bug where a cached doxygen docstring could be deleted while still in use,
- causing swig to segfault.
- 2019-01-31: olly
- SWIG now requires a target language to be specified instead of
- defaulting to wrapping for Tcl. Specifying swig --help without
- a target language now just shows the generic help. The -nolang
- option has been removed.
- 2019-01-28: ZackerySpytz
- [OCaml] #1429 Remove support for OCaml versions < 3.12.0.
- *** POTENTIAL INCOMPATIBILITY ***
- 2019-01-22: vadz
- [Ruby, Octave] #1424 Improve autodoc parameter naming.
- 2019-01-22: vadz
- [Python] #1271 #1423 Always include default parameter values in autodoc strings.
- 2019-01-19: vadz
- #1272, #1421 When a function's parameter is a keyword, the name of the paramater is
- no longer simply changed to argN, where N is the argument number. Instead the
- parameter name is changed to the renaming rules for keywords that normally apply to
- symbols such as classes/functions etc. Note that unlike other symbol renaming,
- parameter renaming does not issue a warning when the parameter is renamed. This
- change only affects languages where the parameter names are actually used, for example,
- Java function parameter lists in the proxy class or Python documentation comments.
- 2019-01-18: wsfulton
- #1420 Fix gdb debugger functions 'swigprint' and 'locswigprint' from swig.gdb to
- work with newer versions of gdb-8. Fixes errors when debugging SWIG source with gdb:
- (gdb) swigprint n
- Undefined command: "Printf". Try "help".
- 2019-01-16: wsfulton
- Python static method wrapper changes
- - Static method wrappers were using the 'fastproxy' approach by default.
- This is inconsistent with instance method wrappers. The fastproxy approach
- is now turned off by default to be consistent with instance methods.
- Static method wrappers can now also be controlled using the -fastproxy and
- -olddefs options.
- Example:
- struct Klass {
- static int statmethod(int a = 2);
- };
- generates by default:
- class Klass(object):
- ...
- @staticmethod
- def statmethod(a=2):
- return _example.Klass_statmethod(a)
- instead of the following (which can be restored by using -fastproxy):
- class Klass(object):
- ...
- statmethod = staticmethod(_example.Klass_statmethod)
- - Modernise wrappers for static methods to use decorator syntax - @staticmethod.
- - Add missing runtime test for static class methods and using the actual class method.
- 2019-01-12: ZackerySpytz
- [OCaml] #1403 #1194 Fix compilation problems for OCaml >= 4.03.0 due to OCaml using
- int64_t instead of int64.
- 2019-01-11: ZackerySpytz
- [OCaml] #1400 Fix the getters and setters of non-static member variables.
- 2019-01-07: wsfulton
- #358 Add VOID to windows.i
- 2019-01-05: wsfulton
- #948 #1019 #1273 Fix for C++11 raw strings where the delimiters were mistakenly left
- in the string contents in situations where the string was copied into generated code.
- For example, %constant, the "docstring" feature and for C#/Java/D constants turned on
- with %javaconst/%csconst/%dmanifestconst.
- 2019-01-05: wsfulton
- [Ruby] #538. Fix Ruby support for %feature("docstring").
- 2019-01-03: wsfulton
- #1202 Fix overloading of non-pointer class types in scripting languages when overloaded
- with a pointer and a NULL scripting language equivalent is used, eg None in Python.
- The implementation changes the SWIGTYPE, SWIGTYPE& and SWIGTYPE&& typecheck typemaps to
- prevent accepting a conversion to a NULL pointer.
- 2019-01-03: ZackerySpytz
- [OCaml] #1386 Fix the OCaml examples and test suite for out-of-source builds.
- 2019-01-01: wsfulton
- [Python] #639 remove duplicate proxy method definitions for global function wrappers.
- Global functions previously generated two definitions, eg:
- def foo():
- return _example.foo()
- foo = _example.foo
- The first definition is replaced by the second definition and so the second definition
- is the one used when the method is actually called. Now just the first definition is
- generated by default and if the -fastproxy command line option is used, just the second
- definition is generated. The second definition is faster as it avoids the proxy Python
- method as it calls the low-level C wrapper directly. Using both -fastproxy and -olddefs
- command line options will restore the previously generated code as it will generate both
- method definitions.
- With this change, the wrappers for global C/C++ functions and C++ class methods now work
- in the same way wrt to generating just a proxy method by default and control via
- -fastproxy/-olddefs options.
- 2018-12-20: hasinoff,wsfulton
- [Java] #1334 Set Java thread name to native thread name when using directors.
- Default is to use name "Thread-XXX" and is still works like this by default. However,
- adding the following will turn on the thread name setting (works for more recent
- versions of Linux and MacOS):
- %begin %{
- #define SWIG_JAVA_USE_THREAD_NAME
- %}
- 2018-12-20: chlandsi
- [Python] #1357. Fix overriding __new__ in Python 3.6.
- Fixes SystemError: Objects/tupleobject.c:81: bad argument to internal function"
- 2018-12-16: wsfulton
- [Python] #848 #1343 The module import logic has changed to stop obfuscating real ImportError
- problems. Only one import of the low-level C/C++ module from the pure Python module is
- attempted now. Previously a second import of the low-level C/C++ module was attempted
- after an ImportError occurred and was done to support 'split modules'. A 'split module' is
- a configuration where the pure Python module is a module within a Python package and the
- low-level C/C++ module is a global Python module. Now a 'split module' configuration is
- no longer supported by default. This configuration can be supported with a simple
- customization, such as:
- %module(package="mypackage", moduleimport="import $module") foo
- or if using -builtin:
- %module(package="mypackage", moduleimport="from $module import *") foo
- instead of
- %module(package="mypackage") foo
- See the updated Python chapter titled "Location of modules" in the documentation.
- 2018-12-11: tlby
- [Perl] #1374 repair EXTEND() handling in typemaps
- 2018-12-06: vadz
- #1359 #1364 Add missing nested class destructor wrapper when the nested class is
- inside a template. Removes associated bogus 'Illegal destructor name' warning. Only
- occurred when the nested class' destructor is explicitly specified.
- 2018-12-04: adr26
- [Python] #1368 #1369 Access Violation in tp_print caused by mismatched Python/extension
- CRT usage
- Remove all use of tp_print, as this API uses a FILE*, which can be
- mismatched when modules are built with different C libraries from
- the main python executable.
- This change also brings consistent output between Python 2 and 3 for the 'cvar' SWIG
- object (that contains the global variables) and SWIG packed objects (such as callback
- constants).
- 2018-12-04: wsfulton
- [Python] #1282 Fix running 'python -m' when using 'swig -builtin'
- Similar to the earlier PEP 366 conforming fix for non-builtin.
- 2018-11-29: adr26
- [Python] #1360 Leak of SWIG var link object
- Fix reference counting on _SWIG_globals to allow var link to be freed on module unload.
- 2018-11-28: wsfulton
- [Python] When using -builtin, the two step C-extension module import is now
- one step and the wrapped API is only available once and not in an underlying
- module attribute like it is without -builtin. To understand this, consider a
- module named 'example' (using: %module example). The C-extension is compiled into
- a Python module called '_example' and a pure Python module provides the actual
- API from the module called 'example'. It was previously possible to additionally
- access the API from the module attribute 'example._example'. The latter was an
- implementation detail and is no longer available. It shouldn't have been used, but
- if necessary it can be resurrected using the moduleimport attribute described in the
- Python chapter of the documentation. If both modules are provided in a Python
- package, try:
- %module(moduleimport="from . import _example\nfrom ._example import *") example
- or more generically:
- %module(moduleimport="from . import $module\nfrom .$module import *") example
- and if both are provided as global modules, try:
- %module(moduleimport="import _example\nfrom _example import *") example
- or more generically:
- %module(moduleimport="import $module\nfrom $module import *") example
- The module import code shown will appear in the example.py file.
- 2018-11-24: vadz
- #1358 Fix handling of abstract base classes nested inside templates
- Correct detecting of whether a derived class method overrides a pure virtual
- base class method when both classes are nested inside a template class: this
- notably didn't work correctly for methods taking parameters of the base class
- type.
- 2018-11-22: rupertnash
- [Python] #1282 Make generated module runnable via python -m (PEP 366 conforming)
- Previously any SWIG generated modules in a package would fail with an ImportError
- when using 'python -m' for example 'python -m mypkg.mymodule'.
- This fix also allows the SWIG generated module to be placed into a directory and
- then renamed __init__.py to convert the module into a package again. This ability
- stopped working in swig-3.0.9. However, only Python 2.7 or 3.3 and later work. If
- Python 3.2 support is needed, use moduleimport in %module to customise the import
- code.
- 2018-11-13: wsfulton
- #1340 Remove -cppcast and -nocppcast command line options (this was an option
- available to the scripting language targets).
- The -cppcast option is still turned on by default. The -nocppcast option
- to turn off the use of c++ casts (const_cast, static_cast etc) has been
- removed. However, defining SWIG_NO_CPLUSPLUS_CAST will still generate C casts
- instead of C++ casts for C++ wrappers.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-11-13: wsfulton
- [Python] #1340 Remove -outputtuple and -nooutputtuple command line options.
- Both the command line and %module options of the same name have been
- removed. These were undocumented. The -outputtuple option returned a
- Python tuple instead of a list, mostly typically in the OUTPUT
- typemap implementations.
- It unclear why a tuple instead of a list return type is needed and
- hence this option has been removed as part of the simplification of
- the SWIG Python command line options for SWIG 4.
- 2018-11-13: wsfulton
- [Python] #1340 Remove -noproxyimport command line option.
- This option turned off the insertion of Python import statements
- derived from a %import directive. For example given:
- %module module_b
- %import "module_a.i"
- then module_b.py will contain:
- import module_a
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-10-29: AlexanderGabriel
- [PHP] The following PHP7 reserved keywords are now only renamed by
- SWIG when used as function names in the API being wrapper:
- __halt_compiler array die echo empty eval exit include include_once
- isset list print require require_once return unset
- 2018-10-22: olly,wsfulton
- [Python] #1261 #1340 Turn on many optimisation options by default and rationalise the
- number of command line options.
- There were an unnecessary number of command line options and many of these have now
- been removed in a drive for simplification. Some were needed to support older versions
- of Python (2.6 and earlier).
- Many of the options could be turned on individually and when using -O. Previously -O
- resulted in turning on a set of options:
- -modern -fastdispatch -nosafecstrings -fvirtual -noproxydel
- -fastproxy -fastinit -fastunpack -fastquery -modernargs -nobuildnone
- Now -O results in turning on this reduced set:
- -fastdispatch -fastproxy -fvirtual
- The following options are now on by default, a deprecated warning is displayed if they
- are used:
- -fastinit Class initialisation code done in C/C++ rather than in Python code.
- -fastquery Python dictionary used for lookup of types.
- -fastunpack Faster unpacking of function arguments in C/C++ wrappers.
- -modern Use Python 2.3 features such as object and property.
- -modernargs Use Python 2.3 C APIs for unpacking arguments in tuples.
- -noproxydel Stop generating a proxy __del__ method for backwards compatiblity.
- -safecstrings No discernable difference
- The following options have been removed altogether:
- -aliasobj0
- -buildnone
- -classptr
- -new_repr
- -newrepr
- -noaliasobj0
- -nobuildnone
- -nocastmode
- -nodirvtable
- -noextranative
- -nofastinit
- -nofastproxy
- -nofastquery
- -nomodern
- -nomodernargs
- -nooutputtuple
- -nosafecstrings
- -old_repr
- -oldrepr
- -proxydel
- -new_vwm is no longer supported. Use the -newvwm alias instead.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-10-22: olly
- [Python] #1261 Remove command line option no longer needed as Python 2.3 and earlier
- are no longer supported:
- -classic
- 2018-10-09: wsfulton
- [D, Go, Guile, Lua, Mzscheme, Ocaml, Perl5, Php, Scilab, Tcl]
- Allow wrapping of std::map using non-default comparison function.
- 2018-10-09: vadz
- [Java] #1274 Allow wrapping of std::map using non-default comparison function.
- 2018-10-04: wsfulton
- [Python] #1126 Fix C default arguments with -builtin and -fastunpack and -modernargs.
- Problem occurred when there is just one (defaulted) parameter in the parameter list.
- 2018-09-24: wsfulton
- [Python] #1319 C++11 hash tables implementation is finished now (including for -builtin):
- std::unordered_map
- std::unordered_set
- std::unordered_multimap
- std::unordered_multiset
- 2018-09-21: wsfulton
- [Python] Fix when using -builtin and wrapping std::map, std::set, std::unordered_map or
- std::unordered_set to ensure __contains__ is called. This is a wrapper for the STL
- container's find method. Without it, Python will do its own slower sequence search.
- 2018-09-19: wsfulton
- [Python] Fix functors (wrapped as __call__) when using -builtin -modern -fastunpack.
- 2018-09-02: andreas.gaeer,tkrasnukha
- [Python] #1321 Fix assert in PyTuple_GET_SIZE in debug interpreter builds of python-3.7
- when calling tp_new.
- 2018-09-01: ChristopherHogan
- [Guile] #1288 Fix garbage collection for guile >= 2.0.12.
- 2018-08-31: wsfulton
- [Python] #1319 C++11 hash tables support:
- std::unordered_map
- std::unordered_set
- std::unordered_multimap
- std::unordered_multiset
- is now compiling and working (sorting using -builtin not fully functional yet though).
- 2018-08-20: wkalinin
- #1305 Fix nested structure symbol tables in C mode to fix member name conflicts
- in different structs with the same nested struct member name.
- 2018-08-18: wsfulton
- [Python] #688 Fix makefile recursion when running python test-suite.
- 2018-08-18: wsfulton
- [Python] #1310 Re-implement Python -fastproxy option.
- The previous implementation failed with Python 3 and abstract base clases.
- The new implementation replaces the Python 2 implementation using
- new.instancemethod with the C API PyMethod_New to match the equivalent Python 3
- implementation which uses PyInstanceMethod_New.
- The new approach runs slightly faster. See #1310.
- 2018-08-12: gmazzamuto
- [Python] #1283 Update pybuffer.i library to use new-style Python buffer C API.
- 2018-08-12: brianhatwood,wsfulton
- [Java] #1303 #1304 Fix crash in directors when using OUTPUT and INOUT typemaps in typemaps.i and
- passing NULL pointers in C++ to director method overloaded and implemented in Java.
- 2018-08-10: wsfulton
- [Python] #1293 Improve TypeError message inconsistencies between default and fastdispatch
- mode when handling overloaded C++ functions. Previously the error message did not always
- display the possible C/C++ prototypes in fastdispatch mode.
- 2018-08-02: furylynx,jacobwgillespie,p2k
- [Javascript] #1290, #968. Add support for NodeJS versions 2-10.
- 2018-07-31: wsfulton
- [Python] #1293 Overloaded C++ function wrappers now raise a TypeError instead
- of NotImplementedError when the types passed are incorrect. This change means
- there is now consistency with non-overloaded function wrappers which have always
- raised TypeError when the incorrect types are passed. The error message remains
- the same and is for example now:
- TypeError: Wrong number or type of arguments for overloaded function 'f'.
- Possible C/C++ prototypes are:
- f(int)
- f(char const *)
- instead of:
- NotImplementedError: Wrong number or type of arguments for overloaded function 'f'.
- Possible C/C++ prototypes are:
- f(int)
- f(char const *)
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-06-23: wsfulton
- [Python] #718 Fix pythonnondynamic feature for modern classes
- Fixes nondynamic mode when an instance variable is set with the same
- name as a class variable in a class derived from a SWIG proxy class.
- This corner case set an instance variable instead of raising an AttributeError.
- Also fix %pythonnondynamic in Python 3 with -modern. The metaclass
- containing the implementation was previously not being applied in Python 3.
- 2018-07-17: petrmitrichev,wsfulton
- [Python] #1275 #1279 Initialize function-local statics (singletons) that call Python
- code during Python module initialization in order to avoid deadlocks with subsequent
- multi-threaded usage.
- 2018-06-15: wsfulton
- [Python] Fix seg fault using Python 2 when passing a Python string, containing
- invalid utf-8 content, to a wstring or wchar * parameter. A TypeError is thrown instead, eg:
- %include <std_wstring.i>
- void instring(const std::wstring& s);
- instring(b"h\xe9llooo") # Python
- 2018-06-15: wsfulton
- [Python] Python 3.7 support: Replace use of deprecated PyUnicode_GetSize with
- PyUnicode_GetLength to remove deprecated warnings compiling the C/C++ wrappers.
- 2018-06-12: wsfulton
- [Python] Python 3.7 support: The %pythonabc feature in pyabc.i now uses base classes
- collections.abc.MutableSequence
- collections.abc.MutableMapping
- collections.abc.MutableSet
- instead of
- collections.MutableSequence
- collections.MutableMapping
- collections.MutableSet
- as the latter are deprecated in Python 3.7 and are due to be removed in Python 3.8.
- The classes in collections.abc.* are available from Python 3.3 onwards. If you
- require support for Python 3.2, then copy the pyabc.i file and modify by removing
- the few instances of the .abc sub-module.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-06-12: olly,wsfulton
- [Python] #701 Remove support for Python versions < 2.7 and 3.0 and 3.1.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-06-11: olly
- [Python] Fix new GCC8 warnings in generated code by avoiding casts
- between incompatible function types where possible, and by
- suppressing the warning when it's due to the design of Python's C
- API. Fixes #1259.
- 2018-06-08: philippkraft
- [Python] Stop exposing <CLASS>_swigregister to Python. It's not
- useful for user Python code to call this, and it just clutters the
- API unnecessarily. Fixes #1225.
- 2018-06-07: cmfoil, kabbi, Jamie Kirkpatrick, markok314, vadz, wsfulton, Yann Diorcet
- #170 Doxygen documentation support added. This allows translation of Doxygen comments
- into JavaDoc and PyDoc documentation. It is enabled via the -doxygen command line
- option. See the Doxygen.html chapter in the documentation for further information.
- 2018-06-07: olly
- [PHP] We've finally removed support for %pragma(php4) which was
- deprecated back in 2008. Use %pragma(php) instead, which has been
- supported since at least 2005.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-06-07: olly
- [PHP5] Support for PHP5 has been removed. PHP5 is no longer
- actively supported by the PHP developers and security support for
- it ends completely at the end of 2018, so it doesn't make sense
- to include support for it in the upcoming SWIG 4.0.0 release.
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-06-06: olly
- [Lua] Improve configure probes for Lua headers and libs used in testsuite.
- 2018-05-15: kwwette
- [Octave] add support for version 4.4
- - Should not introduce any user-visible incompatibilities
- 2018-05-15: wsfulton
- [C#, D, Java] Fix lookup of csconstruct, dconstruct and javaconstruct typemaps.
- The C++ namespace was previously ignored when looking up the typemap.
- 2018-05-15: wsfulton
- [Javascript] Fix generated C++ code when using %nspace on namespaces that are more
- than two levels deep.
- 2018-05-14: wsfulton
- Issue #1251 Add support for C++17 nested namespace definitions,
- for example:
- namespace A::B { ... }
- 2018-05-11: wsfulton
- [C#, D, Java] Add support so that the %csmethodmodifiers, %dmethodmodifiers,
- %javamethodmodifiers can modify the method modifiers for the destructor wrappers
- in the proxy class: dispose, Dispose, delete. With this feature, it is now possible
- to make a C# proxy class sealed, eg when wrapping a class X, the virtual method modifiers
- can be removed using:
- %typemap(csclassmodifiers) X "public sealed class"
- %csmethodmodifiers X::~X "public /*virtual*/";
- 2018-04-18: olly
- [Python] Suppress new pycodestyle warning:
- E252 missing whitespace around parameter equals
- 2018-04-07: goatshriek
- [Ruby] #1213 Fix ruby %alias directive for global C/C++ functions.
- 2018-04-03: olly
- [Ruby] Fix to pass Qnil instead of NULL to rb_funcall(), which silences GCC
- -Wconversion-null warning (on by default with recent GCC).
- 2018-03-09: wsfulton
- [Java] #1184 Fix swigReleaseOwnership() and swigTakeOwnership() regression
- for non-director classes. Restores a dynamic_cast which was previously removed.
- 2018-03-07: llongi
- Github PR #1166 - Fix preprocessor handling of macros with commas
- in a // comment.
- 2018-02-18: JPEWdev
- Patch #1164 - Add support for a command-line options file, also sometimes
- called a response file. This is useful if the command-line options exceed
- the system command-line length limit. To use, put the command-line options
- into a file, then provide the file name prefixed with @, for example using
- a file called args.txt:
- swig @args.txt
- 2018-02-11: wsfulton
- [Javascript] #1187 Fix compilation error wrapping std::complex via
- std_complex.i.
- 2018-01-30: smarchetto
- [Scilab] add type name argument in SWIG_ptr() function to cast from pointer address to typed pointers
- 2018-01-16: wsfulton
- Expressions following a preprocessor directive must now be separated by whitespace
- or non-numeric characters. This syntax change makes the SWIG preprocessor work like
- the C preprocessor in this area.
- For example, the following code used be accepted as valid syntax:
- #if1
- #define ABC 123
- #endif
- Now you get an error:
- example.h:1: Error: Unknown SWIG preprocessor directive: if1 (if this is a block of
- target language code, delimit it with %{ and %})
- example.h:3: Error: Extraneous #endif.
- The following is the correct syntax:
- #if 1
- #define ABC 123
- #endif
- The following of course also works:
- #if(1)
- #define ABC 123
- #endif
- *** POTENTIAL INCOMPATIBILITY ***
- 2018-01-15: wsfulton
- Fix issue #1183. Floating point exception evaluating preprocessor expressions
- resulting in division by zero.
- 2018-01-14: wsfulton
- Fix issue #1172. Seg fault parsing invalid exponents in the preprocessor.
- 2018-01-12: Liryna
- [C#] Patch #1128. Add ToArray function to std::vector wrappers.
- 2018-01-12: wsfulton
- [Java] Fix issue #1156. Add missing throws clause for interfaces when using the
- %interface family of macros.
- 2018-01-05: wsfulton
- Fix default arguments using expressions containing -> syntax error. Problem reported on
- swig-user mailing list.
- 2017-12-30: wsfulton
- [Python] Replace pep8 with pycodestyle for checking the Python code style when
- running Python tests.
- 2017-12-30: davedissian
- Fixed a symbol lookup issue when encountering a typedef of a symbol from the tag
- namespace to the global namespace when the names are identical, such as 'typedef
- struct Foo Foo;'.
- 2017-12-13: wsfulton
- [Perl] add missing support for directorfree typemaps.
- 2017-12-13: wsfulton
- Issue #1167 Fix directorout typemaps which were causing undefined behaviour when
- returning pointers by reference.
- 2017-12-08: olly
- [PHP] Use ZEND_MODULE_GLOBALS_ACCESSOR to access globals so the
- generated code builds when PHP was built with ZTS enabled.
- 2017-12-04: wsfulton
- [Python] Add missing checks for failures in calls to PyUnicode_AsUTF8String. Previously a
- seg fault could occur when passing invalid UTF8 strings (low surrogates), eg passing
- u"\udcff" to the C layer (Python 3).
- 2017-11-24: joequant
- [R] Fix #1124 and return R_NilValue for null pointers
- 2017-11-29: wsfulton
- [Java] director exception handling improvements.
- When a director method throws an exception and it is caught by DirectorException
- and passed back to Java using Swig::DirectorException::throwException, the Java
- stack trace now contains the original source line that threw the exception.
- Deprecate Swig::DirectorException::raiseJavaException, please replace usage with
- Swig::DirectorException::throwException.
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-10-26: wsfulton
- Add support for C++11 ref-qualifiers when using directors.
- 2017-10-26: wsfulton
- Fix generated code when using directors and methods returning const ref pointers.
- 2017-10-26: wsfulton
- [C#, D, Java, Octave, R, Scilab] Port director typemaps to these additional languages.
- Issue #700.
- 2017-10-26: radarsat1
- [Ruby Python] Patch #1029 - Correct handling of null using directors and shared_ptr.
- 2017-10-10: joequant
- [R] pass enum expressions to R. This will generate
- incorrect files when there is an arithmetic expression
- in the enum, but this is better than silently generating
- incorrect code
- 2017-10-09: olly
- [PHP] Fix incorrect wrapper code generated when there's a
- combination of overloading, parameters with a default value
- and %newobject. Fixes https://sourceforge.net/p/swig/bugs/1350/
- 2017-10-09: olly
- Remove GCJ support. It isn't in a good state and doesn't seem to
- be used, and GCC7 dropped GCJ. Closes
- https://sourceforge.net/p/swig/bugs/823/
- 2017-10-07: olly
- Fix preprocessor handling of empty macro arguments to match that of
- C/C++ compilers. Fixes issue #1111 and
- https://sourceforge.net/p/swig/bugs/826/
- 2017-10-06: wsfulton
- [Python] Issue #1108. Fix platform inconsistency in Python default argument handling.
- 32 bit and 64 bit compiled versions of SWIG generated different Python files
- when default arguments were outside the range of 32 bit signed integers.
- The default arguments specified in Python are now only those that are in the
- range of a 32 bit signed integer, otherwise the default is obtained from C/C++ code.
- 2017-10-02: wsfulton
- [C#] Fix std::complex types passed by value.
- 2017-10-02: wsfulton
- [Javascript, Python, Ruby] Issue #732 - Missing type information for std::complex
- in std_complex.i meant that previously std::complex always had to be fully qualified
- in order to be wrapped with the appropriate typemaps.
- 2017-10-01: joequant
- allow R package names with docs
- allowing multiple get accessors in R
- fix smart-pointer and NAMESPACE support
- constructors now returning smart pointers (if class
- declared as such)
- smart-pointer classes deriving from parent smart-pointers
- 2017-09-29: wsfulton
- Issue #1100 - Allow an instantiated template to have the same name in the target
- language as the C++ template name, for example, this is now possible:
- template<typename T> struct X { ... };
- %template(X) X<int>;
- 2017-09-23: wsfulton
- Issue #1098. Fix overloading of shared_ptr with underlying pointer types, eg:
- void m(std::shared_ptr<T> p);
- void m(T &p);
- void m(T *p);
- Only the first method is wrapped and the others are ignored/shadowed.
- The implementation is done via a new attribute in the 'typecheck' typemap called
- 'equivalent'. If specified, it must contain the equivalent pointer type for overloading
- and can only be used for the special SWIG_TYPECHECK_POINTER precedence level.
- The shared_ptr 'typecheck' typemaps have been modified accordingly.
- Here is a simplified version:
- %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="T *")
- T,
- T CONST &,
- T CONST *,
- T *CONST&,
- std::shared_ptr< T >,
- std::shared_ptr< T > &,
- std::shared_ptr< T > *,
- std::shared_ptr< T > *&
- { ... }
- Overloading with any of these types will result in SWIG ignoring all but the first
- overloaded method by default. Without the 'equivalent' attribute, wrapping the overloaded
- methods resulted in types being shadowed (scripting languages) or code that did not
- compile (statically typed languages).
- 2017-09-19: futatuki
- [Python] #1003 Add --with-2to3=/path/to/2to3 option to configure.
- 2017-09-18: wsfulton
- Fix type promotion wrapping constant expressions of the form:
- # define EXPR_MIXED1 (0x80 + 11.1) - 1
- This was previously an integral type instead of a floating point type.
- 2017-09-17: wsfulton
- Fix generated code for constant expressions containing wchar_t L literals such as:
- # define __WCHAR_MAX (0x7fffffff + L'\0')
- # define __WCHAR_MIN (-__WCHAR_MAX - 1)
- 2017-09-10: mlamarre
- [Python] Patch #1083. Define_DEBUG to 1 to do exactly like Visual Studio
- /LDd, /MDd or /MTd compiler options.
- 2017-08-25: wsfulton
- Issue #1059. Add support for C++11 ref-qualifiers on non-static member functions.
- Members with lvalue ref-qualifiers such as:
- struct RQ {
- void m1(int x) &;
- void m2(int x) const &;
- };
- are wrapped like any other member function. Member functions with rvalue ref-qualifiers
- are ignored by default, such as:
- struct RQ {
- void m3(int x) &&;
- void m4(int x) const &&;
- };
- example.i:7: Warning 405: Method with rvalue ref-qualifier m3(int) && ignored.
- example.i:8: Warning 405: Method with rvalue ref-qualifier m4(int) const && ignored.
- These can be unignored and exposed to the target language, see further documentation in
- CPlusPlus11.html.
- 2017-08-16: wsfulton
- Fix #1063. Add using declarations to templates into typedef table.
- Using declarations to templates were missing in SWIG's internal typedef tables.
- This led to a few problems, such as, templates that did not instantiate and generated
- C++ code that did not compile as SWIG did not know what scope the template was
- in. This happened mostly when a using declaration was used on a template type in a
- completely unrelated namespace.
- 2017-08-16: wsfulton
- Fix type lookup in the presence of using directives and using declarations.
- Fix some cases of type lookup failure via a combination of both using directives and
- using declarations resulting in C++ code that did not compile as the generated type was
- not fully qualified for use in the global namespace. Example below:
- namespace Space5 {
- namespace SubSpace5 {
- namespace SubSubSpace5 {
- struct F {};
- }
- }
- using namespace SubSpace5;
- using SubSubSpace5::F;
- void func(SubSubSpace5::F f);
- }
- 2017-08-16: wsfulton
- Issue #1051. %template scope enforcement and class definition fixes.
- The scoping rules around %template have been specified and enforced.
- The %template directive for a class template is the equivalent to an
- explicit instantiation of a C++ class template. The scope for a valid
- %template instantiation is now the same as the scope required for a
- valid explicit instantiation of a C++ template. A definition of the
- template for the explicit instantiation must be in scope where the
- instantiation is declared and must not be enclosed within a different
- namespace.
- For example, a few %template and C++ explicit instantiations of std::vector
- are shown below:
- // valid
- namespace std {
- %template(vin) vector<int>;
- template class vector<int>;
- }
- // valid
- using namespace std;
- %template(vin) vector<int>;
- template class vector<int>;
- // valid
- using std::vector;
- %template(vin) vector<int>;
- template class vector<int>;
- // ill-formed
- namespace unrelated {
- using std::vector;
- %template(vin) vector<int>;
- template class vector<int>;
- }
- // ill-formed
- namespace unrelated {
- using namespace std;
- %template(vin) vector<int>;
- template class vector<int>;
- }
- // ill-formed
- namespace unrelated {
- namespace std {
- %template(vin) vector<int>;
- template class vector<int>;
- }
- }
- // ill-formed
- namespace unrelated {
- %template(vin) std::vector<int>;
- template class std::vector<int>;
- }
- When the scope is incorrect, an error now occurs such as:
- cpp_template_scope.i:34: Error: 'vector' resolves to 'std::vector' and
- was incorrectly instantiated in scope 'unrelated' instead of within scope 'std'.
- Previously SWIG accepted the ill-formed examples above but this led to
- numerous subtle template scope problems especially in the presence of
- using declarations and using directives as well as with %feature and %typemap.
- Actually, a valid instantiation is one which conforms to the C++03
- standard as C++11 made a change to disallow using declarations and
- using directives to find a template.
- // valid C++03, ill-formed C++11
- using std::vector;
- template class vector<int>;
- Similar fixes for defining classes using forward class references have
- also been put in place. For example:
- namespace Space1 {
- struct A;
- }
- namespace Space2 {
- struct Space1::A {
- void x();
- }
- }
- will now error out with:
- cpp_class_definition.i:5: Error: 'Space1::A' resolves to 'Space1::A' and
- was incorrectly instantiated in scope 'Space2' instead of within scope 'Space1'.
- Previously some symbols would have been instantiated in the wrong scope and led
- to lots of scope problems involving SWIG typemaps, features, renames etc.
- You will need to correct the scope used in other SWIG directives which do not
- support 'using declarations' and 'using directives'. For example, if you previously had:
- %rename(Zap) vector<int>::clear;
- using namespace std;
- %template(VectorInt) vector<int>;
- Prior versions of SWIG incorrectly instantiated vector<int> in the global namespace
- and so the %rename matched. Now the template is instantiated in the correct namespace,
- so is fully qualified as std::vector<int>. The other SWIG directives need correcting as
- they do not follow 'using declarations' and 'using directives'. Change it to:
- %rename(Zap) std::vector<int>::clear;
- using namespace std;
- %template(vin) vector<int>;
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-08-16: wsfulton
- Fix scope lookup for template parameters containing unary scope operators.
- Fixes cases like:
- namespace Alloc {
- template<typename T> struct Rebind {
- typedef int Integer;
- };
- }
- %template(RebindBucket) Alloc::Rebind< Bucket >;
- OR
- %template(RebindBucket) Alloc::Rebind< ::Bucket >;
- Alloc::Rebind< Bucket >::Integer Bucket1();
- Alloc::Rebind< ::Bucket >::Integer Bucket2();
- Alloc::Rebind<::template TemplateBucket<double>>::Integer Bucket3();
- 2017-08-16: wsfulton
- For templates only, the template parameters are fully resolved when
- handling typemaps. Without this, it is too hard to have decent rules
- to apply typemaps when parameter types are typedef'd and template
- parameters have default values.
- Fixes %clear for typedefs in templates, eg:
- %typemap("in") XXX<int>::Long "..."
- template typename<T> struct XXX {
- typedef long Long;
- };
- %clear XXX<int>::Long;
- as the typemap was previously incorrectly stored as a typemap for long
- instead of XXX<int>::Long.
- 2017-08-05: olly
- [C++11] Allow static_assert at the top level (and disallow it right
- after template<T>). Fixes issue 1031 reported by Artem V L.
- 2017-08-02: wsfulton
- Fix incorrectly shown warning when an empty template instantiation was used on a
- class used as a base class and that base class was explicitly ignored with %ignore.
- Example of the warning which will no longer appear:
- Warning 401: Base class 'Functor< int,int >' has no name as it is an empty
- template instantiated with '%template()'. Ignored.
- 2017-07-17: fflexo
- [Java] #674 Add std_list.i to add support for std::list containers. The Java proxy
- extends java.util.AbstractSequentialList and makes the C++ std::list container look
- and feel much like a java.util.LinkedList from Java.
- 2017-07-07: wsfulton
- [Python] Fix display of documented template types when using the autodoc
- feature. For example when wrapping:
- %feature("autodoc");
- template<typename X> struct T {};
- %template(TInteger) T<int>;
- the generated documentation contains:
- """Proxy of C++ T< int > class."""
- instead of:
- """Proxy of C++ T<(int)> class."""
- and
- """__init__(TInteger self) -> TInteger"""
- instead of
- """__init__(T<(int)> self) -> TInteger"""
- 2017-06-27: nihaln
- [PHP] Update the OUTPUT Typemap to add return statement to the
- PHP Wrapper.
- 2017-06-27: nihaln
- [PHP] Update the enum and value examples to use the OO wrappers
- rather than the flat functions produced with -noproxy. There's
- not been a good reason to use -noproxy for since PHP5 OO wrapping
- was fixed back in 2005.
- 2017-06-23: m7thon
- [Python] fix and improve default argument handling:
- 1. Fix negative octals. Currently not handled correctly by `-py3`
- (unusual case, but incorrect).
- 2. Fix arguments of type "octal + something" (e.g. `0640 | 04`).
- Currently drops everything after the first octal. Nasty!
- 3. Fix bool arguments "0 + something" (e.g. `0 | 1`) are always
- "False" (unusual case, but incorrect).
- 4. Remove special handling of "TRUE" and "FALSE" from
- `convertValue` since there's no reason these have to match
- "true" and "false".
- 5. Remove the Python 2 vs. Python 3 distinction based on the
- `-py3` flag. Now the same python code is produced for default
- arguments for Python 2 and Python 3. For this, octal default
- arguments, e.g. 0644, are now wrapped as `int('644', 8)`. This
- is required, as Python 2 and Python 3 have incompatible syntax
- for octal literals.
- Fixes #707
- 2017-06-21: futatuki
- #1004 - Fix ccache-swig executable name to respect configure's --program-prefix and
- --program-suffix values if used.
- 2017-06-21: tamuratak
- [Ruby] #911 - Add std::wstring support.
- 2017-06-19: wsfulton
- [Python] Fix handling of rich comparisons when wrapping overloaded operators:
- operator< operator<= operator> operator>= operator== operator!=
- Previously a TypeError was always thrown if the type was not correct. NotImplemented
- is now returned from these wrapped functions if the type being compared with is
- not correct. The subsequent behaviour varies between different versions of Python
- and the comparison function being used, but is now consistent with normal Python
- behaviour. For example, for the first 4 operator overloads above, a TypeError
- 'unorderable types' is thrown in Python 3, but Python 2 will return True or False.
- NotImplemented should be returned when the comparison cannot be done, see PEP 207 and
- https://docs.python.org/3/library/constants.html#NotImplemented
- Note that the bug was only present when overloaded operators did not also have a
- function overload.
- Fixes SF bug #1208 (3441262) and SF patch #303.
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-06-17: fabrice102
- [Go] Fix Go callback example. Fixes github #600, #955, #1000.
- 2017-06-16: wsfulton
- Make sure warning and error messages are not split up by other processes writing to
- stdout at the same time.
- 2017-06-16: wsfulton
- [R] Fix wrapping function pointers containing rvalue and lvalue reference parameters.
- 2017-06-13: olly
- [Perl] Fix testsuite to work without . in @INC - it was removed in
- Perl 5.26 for security reasons, and has also been removed from
- older versions in some distros. Fixes #997 reported by lfam.
- 2017-06-03: wsfulton
- Fix %import on a file containing a file scope %fragment forced inclusion to not
- generate the fragment contents as %import should not result in code being generated.
- The behaviour is now the same as importing code insertion blocks.
- Wrapping FileC.i in the following example will result in no generated code, whereas
- previously "#include <limits.h>" was generated:
- // FileA.i
- %fragment("<limits.h>", "header") %{
- #include <limits.h>
- %}
- %{
- #include <stdio.h>
- %}
- %fragment("<limits.h>");
- // FileC.i
- %import "FileA.i"
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-05-26: Volker Diels-Grabsch, vadz
- [Java] #842 Extend from java.util.AbstractList<> and implement java.util.RandomAccess for
- std::vector wrappers. This notably allows to iterate over wrapped vectors in a natural way.
- Note that boxed types are now used in the Java layer when wrapping vector of C primitive
- types, for example. This may introduce some subtle incompatibilities due to some
- differences in how Java converts boxed types and unboxed types. For example,
- int i=0;
- double d1 = i; // ok
- Double d2 = i; // error: incompatible types: int cannot be converted to Double
- This can be a problem when calling the add and set functions. A suggested backwards
- compatible workaround is to use something like (shown for std::vector<double>:
- #if defined(SWIGJAVA)
- // Add in old api that uses non-boxed types
- %extend std::vector<double> {
- %proxycode %{
- public void add(double x) {
- add(Double.valueOf(x));
- }
- public void set(int i, double val) {
- set(i, Double.valueOf(val));
- }
- %}
- }
- #endif
- %include "std_vector.i"
- %template(VectorDouble) std::vector<double>;
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-05-30: davidcl
- [Scilab] #994 Undefined symbol error when loading in Scilab 6
- 2017-05-25: asibross
- [Java] #370 #417 Missing smart pointer handling in Java director extra methods
- swigReleaseOwnership() and swigTakeOwnership().
- 2017-05-23: wsfulton
- [Java] #230 #759 Fix Java shared_ptr and directors for derived classes java compilation
- error.
- For shared_ptr proxy proxy classes, add a protected method swigSetCMemOwn for modifying
- the swigCMemOwn and swigCMemOwnDerived member variables which are used by various other
- methods for controlling memory ownership.
- 2017-05-21: Sghirate
- [Java, C#, D] #449 Remove unnecessary use of dynamic_cast in directors to enable
- non-RTTI compilation.
- 2017-05-21: wsfulton
- [Python] #993 Fix handling of default -ve unsigned values, such as:
- void f(unsigned = -1U);
- 2017-05-20: jschueller
- [Python] #991 Fix E731 PEP8 warning: do not assign a lambda expression
- 2017-05-16: nihal95
- [PHP] Add %pragma version directive to allow the version of the
- extension to be set. Patch #970, fixes #360.
- 2017-05-13: yag00
- Patch #975 - Add support for noexcept on director methods.
- 2017-04-27: redbrain
- Issue #974, Patch #976 - Fix preprocessor handling of macros with commas in a comment.
- 2017-04-25: jleveque
- [Lua] #959 - Fix Visual Studio C4244 conversion warnings in Lua wrappers.
- 2017-04-21: tamuratak
- [Ruby] #964 - Add shared_ptr director typemaps.
- 2017-04-20: wsfulton
- [Ruby] #586, #935 Add assert for invalid NULL type parameter when calling SWIG_Ruby_NewPointerObj.
- 2017-04-20: tamuratak
- [Ruby] #930, #937 - Fix containers of std::shared_ptr.
- Upcasting, const types (eg vector<shared_ptr<const T>>) and NULL/nullptr support added.
- 2017-04-12: smarchetto
- [Scilab] New parameter targetversion to specify the Scilab target version (5, 6, ..) for code generation
- With Scilab 6 target specified, identifier names truncation is disabled (no longer necessary)
- 2017-03-24: tamuratak
- [Ruby] Fix #939 - Wrapping std::vector<bool> fix due to incorrect null checks
- on VALUE obj.
- 2017-03-17: vadz
- [C#] #947 Add support for std::complex<T>
- 2017-03-17: wsfulton
- [Go] Fix handling of typedef'd function pointers and typedef'd member function pointers
- such as:
- typedef int (*FnPtr_td)(int, int);
- int do_op(int x, int y, FnPtr_td op);
- 2017-03-16: wsfulton
- Add support for member const function pointers such as:
- int fn(short (Funcs::* parm)(bool)) const;
- Also fix parsing of references/pointers and qualifiers to member
- pointers such as:
- int fn(short (Funcs::* const parm)(bool));
- int fn(short (Funcs::* & parm)(bool));
- 2017-03-10: wsfulton
- Extend C++11 alternate function syntax parsing to support const and noexcept, such as:
- auto sum1(int x, int y) const -> int { return x + y; }
- auto sum2(int x, int y) noexcept -> int { return x + y; }
- 2017-02-29: tamuratak
- [Ruby] #917 - Add Enumerable module to all container class wrappers. It was missing
- for std::list, std::multiset, std::unordered_multiset and std::unordered_map.
- 2017-02-27: assambar
- [C++11] Extend parser to support throw specifier in combination
- with override and/or final.
- 2017-02-10: tamuratak
- [Ruby] #883 - Add support for C++11 hash tables:
- std::unordered_map
- std::unordered_set
- std::unordered_multimap
- std::unordered_multiset
- 2017-02-08: jcsharp
- [C#] #887 Improve std::vector<T> wrapper constructors -
- Replace constructor taking ICollection with IEnumerable and also add IEnumerable<T>
- constructor to avoid the boxing and unboxing overhead of the original constructor,
- when the type parameter is a value type.
- Version 3.0.12 (27 Jan 2017)
- ============================
- 2017-01-27: wsfulton
- [C#] #882 Fix missing filename in error messages when there is a problem
- writing out C# files.
- 2017-01-27: briancaine
- [Guile] #744 Fix compilation errors in Guile wrappers - regression
- introduced in swig-3.0.11.
- 2017-01-24: andrey-starodubtsev
- [Java] Apply #704 - director typemap improvements.
- Memory leak fixes, add support for "directorargout" typemap and
- add director support to typemaps.i.
- 2017-01-24: wsfulton
- Enhance %extend to extend a class with template constructors, eg:
- struct Foo {
- %extend {
- template<typename T>
- Foo(int a, T b) {
- ...
- }
- }
- };
- %template(Foo) Foo::Foo<double>;
- 2017-01-22: wsfulton
- Issue #876 Enhance %extend to extend a class with template methods, eg:
- struct Foo {
- %extend {
- template<typename T>
- void do_stuff(int a, T b) {
- ...
- }
- }
- };
- %template(do_stuff_inst) Foo::do_stuff<double>;
- Similarly for static template methods.
- 2017-01-22: kwwette
- [Octave] add support for version 4.2
- - The Octave API now uses some C++11 features. It is recommended to use
- the mkoctfile program supplied by Octave to compile the SWIG-generated
- wrapper code, as mkoctfile will ensure the correct C++ compiler/options
- are used. Otherwise, the value of `mkoctfile -p CXX` should be parsed
- for any -std=* flags which might be present.
- - Octave has dropped support for << and >> operators, so SWIG now
- ignores them.
- - The Octave error() function now raises C++ exceptions to propagate
- Octave errors, so %exception directives may need to be modified.
- For convenience the SWIG_RETHROW_OCTAVE_EXCEPTIONS macro can be used
- to rethrow any Octave exceptions for Octave itself to handle, e.g.:
- try {
- $action // may call error()
- }
- SWIG_RETHROW_OCTAVE_EXCEPTIONS // error() exceptions are rethrown
- catch(...) {
- ... // all other exceptions
- }
- *** POTENTIAL INCOMPATIBILITY ***
- 2017-01-16: wkalinin
- [C#] Fix #733 regression introduced in swig-3.0.9.
- Missing virtual function override in C# layer when using %import.
- 2017-01-16: fschlimb
- Fix #813 template symbol name lookup bug when typedef names are the same but in different
- namespaces.
- 2017-01-15: wsfulton
- [C# D Java]
- The SWIG library no longer uses the javatype, dtype or cstype typemaps, thereby
- completely freeing them up for users to use without having to replicate the library
- code that they previously added. The code previously generated by these typemaps
- has been replaced by the new %proxycode directive. Their use in the library code
- was fairly minimal:
- C# cstype: std_array.i std_map.i std_vector.i
- D dtype: std_vector.i
- Java javatype: arrays_java.i
- 2017-01-14: wsfulton
- The %extend directive can now optionally support one of the 'class', 'struct' or 'union'
- keywords before the identifier name, for example:
- struct X { ... };
- %extend struct X { ... }
- Previously this had to specified as:
- struct X { ... };
- %extend X { ... }
- 2017-01-13: wsfulton
- [C# D Java] Add new %proxycode directive which is a macro for %insert("proxycode").
- This is a way of adding pure C#/D/Java code into the appropriate proxy class, eg:
- %extend Proxy2 {
- %proxycode %{
- public int proxycode2(int i) {
- return i+2;
- }
- %}
- }
- %inline %{
- struct Proxy2 {};
- %}
- There will then be a pure Java/C#/D method called proxycode2 in the Proxy2 class.
- 2016-12-31: ajrheading1
- Issue #860 - Remove use of std::unary_function and std::binary_function
- which is deprecated in C++11.
- 2016-12-30: olly
- [PHP7] Register internal 'swig_runtime_data_type_pointer' constant
- as "CONST_PERSISTENT" to avoid segmentation fault on module unload.
- Fixes #859 reported by Timotheus Pokorra. Thanks also to Javier Torres
- for a minimal reproducer.
- Version 3.0.11 (29 Dec 2016)
- ============================
- 2016-12-24: wsfulton
- [C#] Add %feature("csdirectordelegatemodifiers") to enable customization
- of the delegate access modifiers generated in director classes.
- Fixes issue #748.
- 2016-12-23: wsfulton
- [Python] Fix builtin "python:slot" feature failing for tp_hash when using
- hashfunc closure with a "Wrong type for hash function" for Python 2.
- Issue #843.
- 2016-12-21: joequamt
- Changed generation of functions so that only functions
- that end in _set generate accessor functions rather than
- looking for "set".
- Change generation of operators to not have underscores
- to start in R. Users need to provide custom names for these operator overloads.
- 2016-12-21: olly
- Fix isfinite() checks to work with all C++11 compilers.
- Fixes issues #615, #788 and #849.
- 2016-12-20: wsfulton
- %namewarn unnecessarily caused keyword warnings for non-instantiated template classes
- and duplicate warnings for instantiated template classes when keywords were used.
- Issue #845.
- 2016-12-18: ezralanglois
- [Python, Ruby, Octave] Memory leak fix on error in std::pair wrappers.
- Issue #851.
- 2016-12-18: wsfulton
- Zero initialize arrays when using %array_class and %array_functions.
- 2016-12-18: t-ikegami
- [Python] Fix #446
- Python %array_class of carrays.i failed with -builtin option.
- 2016-12-16: briancaine
- [Guile] Patch #744 Added support for Guile's native pointer functionality
- 2016-12-01: wsfulton
- [Python] Issue #769.
- Add optional moduleimport attribute to %module so that the
- default module import code can be overridden. See the "Searching for the wrapper module"
- documentation in Python.html. Example:
- %module(moduleimport="import _foo") foo
- $module also expands to the low-level C/C++ module name, so the following is the
- same as above
- %module(moduleimport="import $module") foo
- 2016-11-30: olly
- [PHP] Add support for PHP7. PHP5's C extension API has changed
- substantially so you need to use -php7 to specify you want PHP7
- compatible wrappers. The default extension for generated wrappers
- is now .cxx (to match SWIG's default for every other language - to
- generate foo_wrap.cpp you can run SWIG with -cppext cpp). Fixes
- issue #571.
- As part of this change, the language subdirectory for PHP5 has
- changed from "php" to "php5" - if you are making use of the search
- path feature where the language subdirectory of each directory
- is also searched, you'll need to update your bindings. A simple
- fix which works for older and newer SWIG is to add a symlink:
- ln -s php php5
- *** POTENTIAL INCOMPATIBILITY ***
- 2016-11-30: olly
- [PHP] Only emit one copy of each distinct arginfo. Previously we
- emitted a separate one for every wrapped function, but typically
- many functions have the same number of parameters and combinations
- of parameters passed by reference or not.
- This change significantly reduces both the size of the generated
- wrapper, and of the compiled PHP extension module (e.g. by ~6% for
- the stripped extension module for Xapian's PHP7 bindings).
- 2016-11-28: wsfulton
- Fix %rename override of wildcard %rename for templates. For example:
- %rename(GlobalIntOperator) *::operator bool; // wildcard %rename
- %rename(XIntOperator) X::operator bool; // fix now overrides first %rename above
- OR
- %rename(XIntOperator) X<int>::operator bool; // fix now overrides first %rename above
- template<typename T> struct X {
- operator bool();
- ...
- };
- %template(Xint) X<int>;
- This also fixes %rename override of global %rename for templates. For example:
- // Global rename to make all functions start with a lower case letter
- %rename("%(firstlowercase)s", %$isfunction ) "";
- %rename(woohoo) W::Woo; // fix now overrides above %rename
- template<typename T> struct W {
- W Woo();
- ...
- };
- %template(Wint) W<int>;
- The above also introduces a possibly unexpected change. Many of the STL containers
- provided by SWIG use %rename to rename some methods, eg in std::vector, push_back
- is renamed to add in Java. Previously this intended rename did not happen when using
- using global %rename rules and the method would remain as push_back, but is now
- renamed to add. Some more info in issue #856.
- *** POTENTIAL INCOMPATIBILITY ***
- 2016-11-26: m7thon
- [Python] Issue #709 - improved wrapping of division operators
- 'from __future__ import division' now works in Python 2 whether or not the
- -py3 flag is used.
- 2016-11-12: joequant
- [R] Issue #697 - fix comma issue with overload methods
- 2016-11-12: joequant
- [R] Issue #555 - R runtime needs stdio.h
- 2016-11-02: wsfulton
- [Python] Issue #816 - fix compilation error when using -extranative and -builtin.
- 2016-11-02: liorgold
- Patch #741 - Add support for C++11 alias templates, see updated CPlusPlus11.html
- documentation.
- 2016-10-30: myd7349
- [C#] Patch #740 Add std_array.i for C# for wrapping std::array.
- Patch also enhances std::vector<std::wstring> C# wrappers with additional functions
- (Contains, IndexOf, LastIndexOf and Remove).
- 2016-10-30: tobilau
- [Java] Fix wrappers for wstring parameters in director methods to cleanup local
- ref after director callback has finished.
- 2016-10-23: wsfulton
- [C#] Add missing csdirectorin VOID_INT_PTR and csdirectorout VOID_INT_PTR typemaps.
- 2016-10-23: jiulongw
- Patch #781 - Fix wrapping of C compound expressions containing char constants
- in quotes such as:
- #define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p')
- enum DifferentTypes {
- typecharcompound='A'+1,
- typecharcompound2='B' << 2
- };
- 2016-10-13: wsfulton
- [Python] Issue #808 - fix Python pickling and metaclass for builtin wrappers.
- The metaclass (SwigPyObjectType) for SWIG objects was not defined in
- a way that let importlib successfully import the Python wrappers.
- The pickle module previously failed to pickle objects because it couldn't
- determine what module the SWIG wrapped objects were in.
- 2016-09-29: wsfulton
- [Allegrocl, CFFI, GO, Javascript, Ocaml, R, Scilab]
- Add missing support for the "ret" typemap in a few target languages.
- The documentation also now has info on the "ret" typemap.
- 2016-09-27: ahmed-usman
- [xml] Handle template parameters correctly.
- 2016-09-27: dontpanic92
- [Go] Fix argument names in inherited functions taking more than 8
- parameters. Fixes #795.
- 2016-09-26: smarchetto
- [Scilab] mlists that map pointers can be given a custom type name.
- 2016-09-25: wsfulton
- Patch #793 from q-p to expand exception handling to include std::bad_cast
- in std_except.i.
- 2016-09-24: olly
- [PHP] Fix code generated for feature("director:except") -
- previously the return value of call_user_function() was ignored and
- we checked an uninitialised value instead. Fixes #627. Based on
- patch from Sergey Seroshtan.
- 2016-09-22: wsfulton
- [Python] More flexible python builtin slots for overloaded C++ function.
- The closure names used for builtin slots are mangled with their functype so
- that overloaded C++ method names can be used for multiple slots.
- For example:
- %feature("python:slot", "mp_subscript", functype="binaryfunc") SimpleArray::__getitem__;
- %feature("python:slot", "sq_item", functype="ssizeargfunc") SimpleArray::__getitem__(Py_ssize_t n);
- will generate closures:
- SWIGPY_SSIZEARGFUNC_CLOSURE(_wrap_SimpleArray___getitem__) /* defines _wrap_SimpleArray___getitem___ssizeargfunc_closure */
- SWIGPY_BINARYFUNC_CLOSURE(_wrap_SimpleArray___getitem__) /* defines _wrap_SimpleArray___getitem___binaryfunc_closure */
- Previously only one name was defined: _wrap_SimpleArray___getitem___closure.
- Hence the overloaded __getitem__ method can be used to support both mp_subscript and sq_item slots.
- 2016-09-17: wsfulton
- [Python] Fix iterators for containers of NULL pointers (or Python None) when using
- -builtin. Previously iteration would stop at the first element that was NULL.
- 2016-09-16: olly
- [Javascript] Fix SWIG_exception() macro to return from the current
- function. Fixes #789, reported by Julien Dutriaux.
- 2016-09-16: olly
- [PHP] Fix SWIG_exception() macro to return from the current function.
- Fixes #240, reported by Sergey Seroshtan.
- 2016-09-12: xypron
- [C#] Patch #786 Keyword rename to be CLS compliant by adding an underscore
- suffix instead of an underscore prefix to the C symbol name. Please use an explicit
- %rename to rename the symbol with a _ prefix if you want the old symbol name.
- *** POTENTIAL INCOMPATIBILITY ***
- 2016-09-09: olly
- [Python] Fix import handling for Python 2.6 to work in a frozen
- application. Fixes #145, reported by Thomas Kluyver.
- 2016-09-02: smarchetto
- [Scilab] Pointers are mapped to mlist instead of tlist
- (mlist better for scilab overloading)
- 2016-09-02: olly
- [PHP] Fix "out" typemap for member function pointers and "in"
- typemap for char INPUT[ANY].
- 2016-09-01: wsfulton
- [Python] More efficient Python slicing.
- Call reserve for container types that support it to avoid repeated
- memory reallocations for new slices or slices that grow in size.
- 2016-09-01: wsfulton
- [Python] #771 - Make builtin types hashable by default.
- Default hash is the underlying C/C++ pointer. This matches up with testing for
- equivalence (Py_EQ in SwigPyObject_richcompare) which compares the pointers.
- 2016-08-22: wsfulton
- [Python] The following builtin slots can be customized like other slots via the
- "python:<x>" and "python:slot" features where <x> is the appropriate slot name:
- tp_allocs
- tp_bases
- tp_basicsize
- tp_cache
- tp_del
- tp_dealloc
- tp_flags
- tp_frees
- tp_getset
- tp_is_gc
- tp_maxalloc
- tp_methods
- tp_mro
- tp_new
- tp_next
- tp_prev
- tp_richcompare
- tp_subclasses
- tp_weaklist
- was_sq_ass_slice
- was_sq_slice
- A few documentation improvements for slot customization.
- 2016-08-09: joequant
- [R] Patch #765 Fix extern "C" header includes for C++ code.
- 2016-08-05: olly
- [xml] Fix how the output filename is built to avoid problems when
- it contains the embedded strings ".c", ".cpp" or ".cxx".
- Fixes #540 reported by djack42.
- 2016-07-01: wsfulton
- Fix corner case of wrapping std::vector of T pointers where a pointer to a pointer of T
- also exists in the wrapped code. SF Bug 2359417 (967).
- 2016-06-26: wkalinin
- [Java, C#] Patch #681 Fix seg fault when ignoring nested classes.
- 2016-06-25: mromberg
- [Python] #711 Fix -castmode and conversion of signed and unsigned integer types.
- See 2015-12-23 CHANGES entry for details of these improvements when they were
- implemented for the default options (ie not using -castmode).
- 2016-06-25: ahnolds
- Patch #730 - Fix %implicitconv for overloaded functions when using
- -castmode or -fastdispatch options.
- The result is that in all overload cases where there are multiple possibilities
- with the same number of arguments, the dispatch function will first check for
- exact (aka non implicit) matches, and then subsequently check for implicit
- casting matches. This was already happening in the normal dispatch situation,
- and in the -fastdispatch case two passes through the candidates were happening,
- just with SWIG_POINTER_IMPLICIT_CONV always set. After this patch, it is not set
- on the first pass, and then set on the second pass.
- 2016-06-25: liorgold
- Patch #727 - Add support for C++11 type aliasing.
- Version 3.0.10 (12 Jun 2016)
- ============================
- 2016-06-06: mromberg
- [Python] Patch #698. Add support for -relativeimport for python 2.7, so -py3 is no
- longer also required for relative import support.
- 2016-06-05: mromberg
- [Python] Patch #694 - Fix package import regressions introduced in swig-3.0.9.
- 1) The code in 3.0.9 did not fall back to 'import _foo' if 'import bar._foo' failed
- (assuming bar.foo was the main module). Every place _foo is imported now first tries
- it from the package where foo was found and if that fails tries _foo as a global module.
- 2) The separate block of Python code that injected code to pull in the attributes
- from _foo when -builtin is used made use of the -py3 switch to either do
- 'from ._foo import *' or "from _foo import *". This block of code no longer does this
- and instead checks the Python version at runtime to switch between the two syntaxes.
- In summary, swig-3.0.10 has been modified to ease the creation of wrapper modules
- that can be fully made part of a Python package. SWIG no longer
- assumes the dynamically linked C module is a global module.
- The dynamic module can now be placed into either the same package as the pure Python
- module or as a global module. Both locations are used by the Python wrapper to
- locate the C module.
- However, this could cause a backwards incompatibility with some code
- that was relying on the ability of "from package import _module" to
- pull attributes out of the package directly. If your code populates a
- module (which is also a package) with attributes that are SWIG
- generated modules which were not loaded in a conventional way,
- swig-3.0.8 and earlier may have worked due to 'from package import
- _module' bypassing a real import and pulling your module in as an
- attribute. This will no longer work. Since this is not a common (or
- even recommended) practice, most folk should not be affected.
- *** POTENTIAL INCOMPATIBILITY ***
- 2016-05-31: wsfulton
- Fix #690 - Smart pointer to %ignored class doesn't expose inherited methods.
- Regression introduced in swig-3.0.9.
- Version 3.0.9 (29 May 2016)
- ===========================
- 2016-05-24: mromberg
- [Python] Patch #612 - Add support for Python's implicit namespace packages.
- 2016-05-23: wsfulton
- [Ruby] Fix #602 - Error handling regression of opaque pointers introduced
- in swig-3.0.8 when C functions explicitly reset a pointer using 'DATA_PTR(self) = 0'.
- An ObjectPreviouslyDeleted error was incorrectly thrown when the pointer was used
- as a parameter.
- 2016-05-17: tamuratak
- [Ruby] Patch #651 - Correct overloaded function error message when function is
- using %newobject.
- 2016-05-17: aurelj
- [Ruby] Patch #582 - add support for docstring option in %module()
- 2016-05-14: wsfulton
- Fix #434 - Passing classes by value as parameters in director methods did not create
- a copy of the argument leading to invalid memory accesses if the object was used
- after the upcall into the target language. Passing arguments by value shouldn't give
- rise to these sorts of memory problems and so the objects are now copied and ownership
- of their lifetime is controlled by the target language.
- 2016-05-07: wsfulton
- Fix #611. Fix assertion handling defaultargs when using %extend for a template
- class and the extended methods contain default arguments.
- 2016-05-05: ejulian
- [Python] Patch #617. Fix operator/ wrappers.
- 2016-05-02: wsfulton
- Fix #669. Don't issue warning about ignoring base classes when the derived class is
- itself ignored.
- 2016-04-18: ianlancetaylor
- [Go] Fix use of goout typemap when calling base method by
- forcing the "type" attribute to the value we need.
- 2016-04-17: ianlancetaylor
- [Go] Fixes for Go 1.6: avoid returning Go pointers from
- directors that return string values; add a trailing 0 byte
- when treating Go string as C char*.
- 2016-04-06: smarchetto
- [Scilab] #552 Make Scilab runtime keep track of pointer types
- Instead of a Scilab pointer which has no type, SWIG Scilab maps a
- pointer to a structure tlist containing the pointer adress and its type.
- 2016-04-02: ahnolds
- [Python] Apply #598. Fix misleading error message when attempting to read a non-existent
- attribute. The previous cryptic error message:
- AttributeError: type object 'object' has no attribute '__getattr__'
- is now replaced with one mentioning the attribute name, eg:
- AttributeError: 'Foo' object has no attribute 'bar'
- 2016-04-02: derkuci
- [Python] Patch #610 to fix #607.
- Fix single arguments when using python -builtin -O with %feature("compactdefaultargs")
- 2016-03-31: wsfulton
- Fixes #594. Fix assertion for some languages when wrapping a C++11 enum class that
- is private in a class.
- Also don't wrap private enums for a few languages that attempted to do so.
- 2016-03-31: wsfulton
- [Java] unsigned long long marshalling improvements when a negative number
- is passed from Java to C. A cast to signed long long in the C layer will now
- result in the expected value. No change for positive numbers passed to C.
- Fixes #623.
- 2016-03-22: alexwarg
- [Lua] #398 Fix lua __getitem + inheritance
- The new handling of classes in Lua (not merging methods into the derived classes)
- breaks for classes that provide a __getitem function. The __getitem function
- prevents method calls to any method defined in a base class. This fix calls
- __getitem only if the member is not found using recursive lookup.
- 2016-03-18: ptomulik
- [Python] #563 Stop generating unnecessary _swigconstant helpers.
- 2016-03-16: richardbeare
- [R] #636 Add extra std::vector numeric types
- 2016-03-14: wsfulton
- [Java] Add std_array.i for C++11 std::array support.
- 2016-03-12: wsfulton
- [Java, C#, D] Fix static const char member variables wrappers with %javaconst(1)
- %csconst(1) or %dmanifestconst.
- This fixes the case when an integer is used as the initializer, such as:
- struct W { static const char w = 100; };
- Fix generated code parsing enum values using char escape sequences
- when these values appear in the Java code (usually when using %javaconst(1))
- such as:
- enum X { x1 = '\n', x2 = '\1' };
- Similarly for static const member char variables such as:
- struct Y { static const char y = '\n'; }
- Likewise for D and %dmanifestconstant. For C# and %csconst(1), char
- values in C# are now hex escaped as C# doesn't support C octal escaping.
- 2016-03-11: wsfulton
- [Java C#] Add support for treating C++ base classes as Java interfaces
- instead of Java proxy classes. This enable some sort of support for
- multiple inheritance. The implementation is in swiginterface.i and
- provides additional macros (see Java.html for full documentation):
- %interface(CTYPE)
- %interface_impl(CTYPE)
- %interface_custom("PROXY", "INTERFACE", CTYPE)
- 2016-03-01: wsfulton
- Add rstrip encoder for use in %rename. This is like the strip encoder but
- strips the symbol's suffix instead of the prefix. The example below
- will rename SomeThingCls to SomeThing and AnotherThingCls to AnotherThing:
- %rename("%(rstrip:[Cls])s") "";
- class SomeThingCls {};
- struct AnotherThingCls {};
- 2016-03-01: olly
- Fix isfinite() check to work with GCC6. Fixes
- issue #615 reported by jplesnik.
- 2016-02-17: olly
- [Python] Add missing keywords 'as' and 'with' to pythonkw.swg.
- 2016-02-07: kwwette
- [Octave] recognise various unary functions
- * Use __float__() for numeric conversions, e.g. when calling double()
- * Map various unary functions, e.g. abs() to __abs__(), see full list
- in section 32.3.10 of manual; only available in Octave 3.8.0 or later
- 2016-02-07: kwwette
- [Octave] export function swig_octave_prereq() for testing Octave version
- 2016-02-06: pjohangustavsson
- [C#] Fix duplicate symbol problems when linking the source generated
- from multiple SWIG modules into one shared library for the -namespace
- option. The namespace is now mangled into the global PInvoke function
- names.
- *** POTENTIAL INCOMPATIBILITY ***
- 2016-01-27: ahnolds
- [Python] Added support for differentiating between Python Bytes
- and Unicode objects using by defining SWIG_PYTHON_STRICT_BYTE_CHAR
- and SWIG_PYTHON_STRICT_UNICODE_WCHAR.
- 2016-01-27: steeve
- [Go] Ensure structs are properly packed between gc and GCC/clang.
- 2016-01-25: ahnolds
- [Python] Support the full Python test suite in -classic mode
- * Convert long/unsigned long/long long/unsigned long long to PyInt
- rather than PyLong when possible. Certain python functions like
- len() require a PyInt when operating on old-style classes.
- * Add support for static methods in classic mode, including support
- for pythonappend, pythonprepend, and docstrings.
- * Removing the use of __swig_getmethods__ for static member methods
- since they will always be found by the standard argument lookup
- * Fix a bug where the wrong type of exception was caught when
- checking for new-style class support
- 2016-01-23: ahnolds
- [Go] Enable support for the Go test-suite on OSX:
- * The linker on OSX requires that all symbols (even weak symbols)
- are defined at link time. Because the function _cgo_topofstack is
- only defined starting in Go version 1.4, we explicitly mark it as
- undefined for older versions of Go on OSX.
- * Avoid writing empty swigargs structs, since empty structs are not
- allowed in extern "C" blocks.
- 2016-01-12: olly
- [Javascript] Look for "nodejs" as well as "node", as it's packaged
- as the former on Debian.
- 2016-01-12: olly
- [Javascript] For v8 >= 4.3.0, use V8_MAJOR_VERSION.
- Fixes issue 561.
- 2016-01-10: ahnolds
- Improved size_t and ptrdiff_t typemaps to support large values
- on platforms where sizeof(size_t) > sizeof(unsigned long) and
- sizeof(ptrdiff_t) > sizeof(long).
- Version 3.0.8 (31 Dec 2015)
- ===========================
- 2015-12-30: wsfulton
- The pdf documentation is now generated by wkhtmltopdf and has colour
- for the code snippets just like the html documentation!
- 2015-12-23: ahnolds
- [Python] Fixes for conversion of signed and unsigned integer types:
- No longer check for PyInt objects in Python3. Because PyInt_Check
- and friends are #defined to the corresponding PyLong methods, this
- had caused errors in Python3 where values greater than what could be
- stored in a long were incorrectly interpreted as the value -1 with
- the Python error indicator set to OverflowError. This applies to
- both the conversions PyLong->long and PyLong->double.
- Conversion from PyLong to long, unsigned long, long long, and
- unsigned long long now raise OverflowError instead of TypeError in
- both Python2 and Python3 for PyLong values outside the range
- expressible by the corresponding C type. This matches the existing
- behavior for other integral types (signed and unsigned ints, shorts,
- and chars), as well as the conversion for PyInt to all numeric
- types. This also indirectly applies to the size_t and ptrdiff_t
- types, which depend on the conversions for unsigned long and long.
- 2015-12-19: wsfulton
- [Python] Python 2 Unicode UTF-8 strings can be used as inputs to char * or
- std::string types if the generated C/C++ code has SWIG_PYTHON_2_UNICODE defined.
- 2015-12-17: wsfulton
- Issues #286, #128
- Remove ccache-swig.1 man page - please use the CCache.html docs instead.
- The yodl2man and yodl2html tools are no longer used and so SWIG no
- longer has a dependency on these packages which were required when
- building from git.
- 2015-12-16: zturner/coleb
- [Python] Fix Python3.5 interpreter assertions when objects are being
- deleted due to an existing exception. Most notably in generators
- which terminate using a StopIteration exception. Fixes #559 #560 #573.
- If a further exception is raised during an object destruction,
- PyErr_WriteUnraisable is used on this second exception and the
- original exception bubbles through.
- 2015-12-14: ahnolds/wsfulton
- [Python] Add in missing initializers for tp_finalize,
- nb_matrix_multiply, nb_inplace_matrix_multiply, ht_qualname
- ht_cached_keys and tp_prev.
- 2015-12-12: wsfulton
- Fix STL wrappers to not generate <: digraphs.
- For example std::vector<::X::Y> was sometimes generated, now
- corrected to std::vector< ::X::Y >.
- 2015-11-25: wsfulton
- [Ruby] STL ranges and slices fixes.
- Ruby STL container setting slices fixes:
- Setting an STL container wrapper slice better matches the way Ruby
- arrays work. The behaviour is now the same as Ruby arrays. The only
- exception is the default value used when expanding a container
- cannot be nil as this is not a valid type/value for C++ container
- elements.
- Obtaining a Ruby STL container ranges and slices fixes:
- Access via ranges and slices now behave identically to Ruby arrays.
- The fixes are mostly for out of range indices and lengths.
- - Zero length slice requests return an empty container instead of nil.
- - Slices which request a length greater than the size of the container
- no longer chop off the last element.
- - Ranges which used to return nil now return an empty array when the
- the start element is a valid index.
- Ruby STL container negative indexing support improved.
- Using negative indexes to set values works the same as Ruby arrays, eg
- %template(IntVector) std::vector<int>;
- iv = IntVector.new([1,2,3,4])
- iv[-4] = 9 # => [1,2,3,9]
- iv[-5] = 9 # => IndexError
- 2015-11-21: wsfulton
- [Ruby, Python] Add std::array container wrappers.
- These work much like any of the other STL containers except Python/Ruby slicing
- is somewhat limited because the array is a fixed size. Only slices of
- the full size are supported.
- 2015-10-10: wsfulton
- [Python] #539 - Support Python 3.5 and -builtin. PyAsyncMethods is a new
- member in PyHeapTypeObject.
- 2015-10-06: ianlancetaylor
- [Go] Don't emit a constructor function for a director
- class with an abstract method, since the function will
- always panic.
- 2015-10-01: wsfulton
- Fix %shared_ptr support for private and protected inheritance.
- - Remove unnecessary Warning 520: Derived class 'Derived' of 'Base'
- is not similarly marked as a smart pointer
- - Do not generate code that attempts to cast up the inheritance chain in the
- type system runtime in such cases as it doesn't compile and can't be used.
- Remove unnecessary warning 520 for %shared_ptr when the base class is ignored.
- 2015-10-01: vkalinin
- Fix #508: Fix segfault parsing anonymous typedef nested classes.
- 2015-09-26: wsfulton
- [Ruby] Add shared_ptr support
- 2015-09-13: kkaempf
- [Ruby] Resolve tracking bug - issue #225.
- The bug is that the tracking code uses a ruby hash and thus may
- allocate objects (Bignum) while running the GC. This was tolerated in
- 1.8 but is invalid (raises an exception) in 1.9.
- The patch uses a C hash (also used by ruby) instead.
- 2015-09-09: lyze
- [CFFI] Extend the "export" feature in the CFFI module to support
- exporting to a specified package.
- 2015-09-04: olly
- [Python] Fix docstrings for %callback functions.
- 2015-09-03: demi-rluddy
- [Go] Removed golang stringing for signed/unsigned char
- Changed default handling of signed char* and unsigned char* to be
- opaque pointers rather than strings, similarly to how other
- languages work.
- Any existing code relying on treating signed char* or unsigned
- char* as a string can restore the old behavior with typemaps.i by
- using %apply to copy the [unchanged] char* behavior.
- *** POTENTIAL INCOMPATIBILITY ***
- 2015-08-07: talby
- [Perl] tidy -Wtautological-constant-out-of-range-compare warnings when building generated code under clang
- 2015-08-07: xantares
- [Python] pep257 & numpydoc conforming docstrings:
- - Mono-line module docsstring
- - Rewrite autodoc parameters section in numpydoc style:
- https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
- - One line summary should end with "."
- - Adds a blank line after class docstring
- 2015-08-05: vadz
- [Java] Make (char* STRING, size_t LENGTH) typemaps usable for
- strings of other types, e.g. "unsigned char*".
- Version 3.0.7 (3 Aug 2015)
- ==========================
- 2015-08-02: wsfulton
- [Java] Fix potential security exploit in generated Java classes.
- The swigCPtr and swigCMemOwn member variables in the generated Java
- classes are now declared 'transient' by default. Further details of the exploit
- in Android is being published in an academic paper as part of USENIX WOOT '15:
- https://www.usenix.org/conference/woot15/workshop-program/presentation/peles.
- In the unlikely event that you are relying on these members being serializable,
- then you will need to override the default javabody and javabody_derived typemaps
- to generate the old generated code. The relevant typemaps are in the Lib directory
- in the java.swg, boost_shared_ptr.i and boost_intrusive_ptr.i files. Copy the
- relevant default typemaps into your interface file and remove the 'transient' keyword.
- *** POTENTIAL INCOMPATIBILITY ***
- 2015-08-01: vadz
- Make configure --without-alllang option more useful: it can now be overridden by the following
- --with-xxx options, allowing to easily enable just one or two languages.
- 2015-07-30: wsfulton
- Fix #440 - Initialise all newly created arrays when using %array_functions and %array_class
- in the carrays.i library - bug is only relevant when using C++.
- 2015-07-29: wsfulton
- [Python] Improve indentation warning and error messages for code in the following directives:
- %pythonprepend
- %pythonappend
- %pythoncode
- %pythonbegin
- %feature("shadow")
- Old error example:
- Error: Line indented less than expected (line 3 of pythoncode)
- New error example:
- Error: Line indented less than expected (line 3 of %pythoncode or %insert("python") block)
- as no line should be indented less than the indentation in line 1
- Old warning example:
- Warning 740: Whitespace prefix doesn't match (line 2 of %pythoncode or %insert("python") block)
- New warning example:
- Warning 740: Whitespace indentation is inconsistent compared to earlier lines (line 3 of
- %pythoncode or %insert("python") block)
-
- 2015-07-28: wsfulton
- [Python] Fix #475. Improve docstring indentation handling.
-
- SWIG-3.0.5 and earlier sometimes truncated text provided in the docstring feature.
- This occurred when the indentation (whitespace) in the docstring was less in the
- second or later lines when compared to the first line.
- SWIG-3.0.6 gave a 'Line indented less than expected' error instead of truncating
- the docstring text.
- Now the indentation for the 'docstring' feature is smarter and is appropriately
- adjusted so that no truncation occurs.
- 2015-07-22: wsfulton
- Support for special variable expansion in typemap attributes. Example usage expansion
- in the 'out' attribute (C# specific):
- %typemap(ctype, out="$*1_ltype") unsigned int& "$*1_ltype"
- is equivalent to the following as $*1_ltype expands to 'unsigned int':
- %typemap(ctype, out="unsigned int") unsigned int& "unsigned int"
- Special variables can be used within special variable macros too. Example usage expansion:
- %typemap(cstype) unsigned int "uint"
- %typemap(cstype, out="$typemap(cstype, $*1_ltype)") unsigned int& "$typemap(cstype, $*1_ltype)"
- Special variables are expanded first and hence the above is equivalent to:
- %typemap(cstype, out="$typemap(cstype, unsigned int)") unsigned int& "$typemap(cstype, unsigned int)"
- which then expands to:
- %typemap(cstype, out="uint") unsigned int& "uint"
- 2015-07-22: lindleyf
- Apply patch #439 - support for $typemap() (aka embedded typemaps or special variable
- macros) in typemap attributes. A simple example where $typemap() is expanded in the
- 'out' attribute (C# specific):
- %typemap(cstype) unsigned int "uint"
- %typemap(cstype, out="$typemap(cstype, unsigned int)") unsigned int& "$typemap(cstype, unsigned int)"
- is equivalent to:
- %typemap(cstype, out="uint") unsigned int& "uint"
- 2015-07-18: m7thon
- [Python] Docstrings provided via %feature("docstring") are now quoted and added to
- the tp_doc slot when using python builtin classes (-builtin). When no docstring is
- provided, the tp_doc slot is set to the fully qualified C/C++ class name.
- Github issues #445 and #461.
- 2015-07-17: kwwette
- [octave] Support Octave version 4.0.0 (thanks to patches from Orion Poplawski).
- 2015-07-07: wsfulton
- SWIG no longer generates a wrapper for a class' constructor if that class has
- any base class with a private destructor. This is because your compiler should
- not allow a class to be instantiated if a base has a private destructor. Some
- compilers do, so if you need the old behaviour, use the "notabstract" feature, eg:
- %feature("notabstract") Derived;
- class Base {
- ~Base() {}
- };
- struct Derived : Base {};
- Version 3.0.6 (5 Jul 2015)
- ==========================
- 2015-07-02: wsfulton
- Fix syntax error when the template keyword is used in types, eg:
- std::template vector<int> v;
- 2015-07-02: ngladitz
- [Lua] Push characters as unformatted 1-character strings to avoid
- unprintable characters such as (char)127 being converted to
- "<\127>" with Lua 5.3 and later. (github PR #452)
- 2015-06-29: olly
- [Python] Improve handling of whitespace in %pythoncode.
- Previously SWIG looked at the indentation of the first line and
- removed that many characters from each subsequent line, regardless
- of what those characters were. This was made worse because SWIG's
- preprocessor removes any whitespace before a '#'. Fixes github
- issue #379, reported by Joe Orton.
- 2015-06-12: wsfulton
- [R] Fix #430 - call to SWIG_createNewRef in copyToC was incorrectly named.
- 2015-06-11: sghirate
- [C#] Patch #427 adds in new command line option -outfile to combine all the
- generated C# code into a single file.
- 2015-06-09: wsfulton
- Fix seg fault processing C++11 type aliasing. Issue #424.
- 2015-05-28: wsfulton
- [Python] Add new feature "python:cdefaultargs" to control default argument
- code generation. By default, SWIG attempts to convert C/C++ default argument values
- into Python values and generates code into the Python layer with these values.
- Recent versions of SWIG are able to convert more of these values, however, the
- new behaviour can be circumvented if desired via this new feature, such that
- the default argument values are obtained from the C layer and not the Python layer.
- For example:
- struct CDA {
- int fff(int a = 1, bool b = false);
- };
- The default code generation in the Python layer is:
- class CDA(_object):
- ...
- def fff(self, a=1, b=False):
- return _default_args.CDA_fff(self, a, b)
- Adding the feature:
- %feature("python:cdefaultargs") CDA::fff;
- Results in:
- class CDA(_object):
- ...
- def fff(self, *args):
- return _default_args.CDA_fff(self, *args)
- Some code generation modes, eg -builtin and -fastproxy, are unaffected by this as
- the default values are always obtained from the C layer.
- 2015-05-27: wsfulton
- [Python] Deal with an integer as the default value of a typedef to bool
- parameter in the C++ prototype. See #327. Regression from 3.0.0 onwards.
- 2015-05-19: olly
- [Python] Fix warning when compiling generated code with MSVC.
- (Fixes https://sourceforge.net/p/swig/patches/351/ reported by
- Mateusz Szyma¿ski).
- 2015-05-14: wsfulton
- Fix seg fault wrapping shared_ptr of classes with private constructors and destructors.
- This also fixes the "unref" feature when used on classes with private destructors.
- 2015-05-10: wsfulton
- [Java] Fix multi-argument typemaps (char *STRING, size_t LENGTH)
- so that they can be applied to a wider range of types. Fixes #385.
- 2015-05-07: olly
- [Python] Deal with an integer as the default value of a bool
- parameter in the C++ prototype. Fixes github #327, reported by
- Greg Allen.
- 2015-05-07: LindleyF
- [Java] Allow feature("director") and feature("ref") to be used
- together. Github PR#403.
- 2015-05-05: olly
- Suppress warning 325 "Nested class not currently supported (Foo
- ignored)" when Foo has already been explicitly ignored with "%ignore".
- 2015-05-04: wsfulton
- Add support for friend templates, including operator overloading - fixes #196. Considering
- the example below, previously the operator gave a syntax error and friendfunc incorrectly
- warned with:
- "Warning 503: Can't wrap 'friendfunc<(Type)>' unless renamed to a valid identifier."
- template <class Type> class MyClass {
- friend int friendfunc <Type>(double is, MyClass <Type> & x);
- friend int operator<< <Type>(double un, const MyClass <Type> &x);
- };
- The following also previously incorrectly warned with:
- "Warning 302: Identifier 'template_friend' redefined (ignored),"
- template<typename T> T template_friend(T);
- struct MyTemplate {
- template<typename T> friend T template_friend(T);
- };
- 2015-05-01: wsfulton
- Fix handling of conversion operators where the operator is split over multiple
- lines or has comments within the operator type. Fixes #401.
- Also fix similar problem with normal operators which gave a syntax error if split over
- multiple lines or had a comment within the operator declaration.
- 2015-04-30: olly
- Ignore unknown preprocessor directives which are inside an inactive
- conditional (github issue #394, reported by Dan Wilcox).
- Regression introduced in 3.0.3.
- 2015-04-27: vadz
- [Python] Fix "default" typemap used after an argument with "numinputs=0" (#377).
- 2015-04-24: wsfulton
- [Python] Fix #256. Code generated with '-builtin -modernargs' segfaults for any
- method taking zero arguments.
- Also fixes: "SystemError: error return without exception set" during error checking
- when using just -builtin and the incorrect number of arguments is passed to a class
- method expecting zero arguments.
- 2015-04-23: wsfulton
- [Java] Bug #386 - Memory leak fix in (char *STRING, size_t LENGTH) typemaps.
- 2015-04-23: vadz
- [Python] Make "default" typemap work again (#330, #377).
- 2015-04-23: vadz
- [Python] Fix the use of default values for the pointer types (#365, #376).
- 2015-04-23: wsfulton
- Fix 'make check-ccache' which is part of 'make check' when one of the CCACHE_
- environment variables, for example CCACHE_DISABLE, is set.
- 2015-04-14: wsfulton
- Clearer warning message for badly constructed typecheck typemaps. For example, was:
- example.i:3: Warning 467: Overloaded foo(int) not supported (no type checking
- rule for 'int').
- Now:
- example.i:3: Warning 467: Overloaded foo(int) not supported (incomplete type checking
- rule - no precedence level in typecheck typemap for 'int').
- 2015-04-11: wsfulton
- [Java] Fix #353 - Linker multiple definition of 'ExceptionMatches' when
- using directors and multiple modules.
- 2015-04-11: wsfulton
- Merge #320 - Make __dict__ accessible for Python builtin classes.
- 2015-04-07: wsfulton
- Fix #375 - parsing of extern "C" and typedef for example:
- extern "C" typedef void (*Hook2_t)(int, const char *);
- extern "C" typedef int Integer;
- 2015-03-12: olly
- -DSWIG_DIRECTOR_STATIC is now supported for all languages with
- director support, not only Python and PHP.
- 2015-03-02: ianlancetaylor
- [Go] Add -cgo option, required for Go versions 1.5 and
- later.
- 2015-02-26: olly
- Fix segmentation fault when top==NULL, introduced by nested class
- handling (reported in issue#346 by Pawe¿ Tomulik).
- 2015-02-09: wsfulton
- [Guile] Fix generated code for static const char member variables when
- defined and declared inline.
- 2015-02-09: mishas
- [Go] Fix %import of files in sub directories.
- 2015-02-05: ianlancetaylor
- [Go] Ignore Go specific type maps (goin, goout, etc.) if they are empty.
- 2015-02-05: ianlancetaylor
- [Go] Generated Go code no longer calls _swig_goallocate or
- _swig_makegostring, as they will no longer work as of Go 1.5.
- Version 3.0.5 (31 Jan 2015)
- ===========================
- 2015-01-30: wsfulton
- [Python] Fix Python -classic and property setting. Setting properties on classic classes
- was broken in swig-3.0.3 by attempting to use __setattr__. This regression is fixed now
- by using __dict__ again when using -classic.
- Fixes patch #232.
- 2015-01-27: smarchetto
- [Scilab] Support for the Scilab language has been added
- 2015-01-23: olly
- [PHP] When wrapping a returned resource as an object, check if all
- cases wrap it in the same class, and if so eliminate the pointless
- switch statement wrapper we previously generated.
- 2015-01-22: wsfulton
- [Octave] Merge patch #297 for SF bug #1277 - Octave shared_ptr support
- 2015-01-15: wsfulton
- [Python] Merge patch #250 - Fixes for using %constant and objects (non-primitive types)
- 2015-01-15: wsfulton
- [C# Go] Merge patch #308 and fix #307 - C++11 strongly typed enum support
- in directors
- 2015-01-15: wsfulton
- [Python] Second fix for #294 #296 - Regression introduced in SWIG-3.0.3 when
- wrapping functions with default arguments, this time when using kwargs.
- Version 3.0.4 (14 Jan 2015)
- ===========================
- 2015-01-12: olly
- [PHP] Fix segfault in director upcall check when using PHP built with
- ZTS enabled. Fixes #155, reported by Pierre Labastie.
- 2015-01-12: vadz
- [Python] Fix #294 #296 - Regression introduced in SWIG-3.0.3 when
- wrapping functions with default arguments. Invalid or missing default
- arguments were sometimes being generated into the python layer.
- 2015-01-08: olly
- Allow C++11 "explicit constexpr". Fixes github issue #284 reported
- by Pawel Tomulik. Also handle "constexpr explicit" and "constexpr
- static".
- 2015-01-08: olly
- When reporting an error for a construct which hasn't been
- terminated when the end of the file is reached, report it at the
- start line rather than "EOF" as then tools like editors and IDEs
- will take you to a generally more useful place for fixing the
- problem.
- 2015-01-08: olly
- Improve error messages for a few cases which previously gave the
- one of the cryptic catch-all errors "Syntax error in input".
- 2015-01-08: olly
- Provide -cppext as a general command line option for setting the
- extension used for generated C++ files (previously it was specific
- to the PHP backend). Deprecate the equivalent -suffix option
- provided by the Ocaml backend, but continue to support that for
- now.
- Version 3.0.3 (30 Dec 2014)
- ===========================
- 2014-12-27: wsfulton
- Fix #280 - abort using all default template parameters within other template
- parameters.
- 2014-12-27: talby
- [Perl] Issue #282 perl5 archlib vs archlibexp
- [Perl] tidy "warning: duplicate 'extern' declaration specifier" when building generated code
- under clang
- 2014-12-18: wsfulton
- Add support for %constant and structs/classes - issue #272
- 2014-12-09: wsfulton
- Fix #245 - regression (since swig-3.0.0) in templated constructors.
- Templated constructors could not be instantiated - they were incorrectly ignored with a warning 504:
- "Function: xyz must have a return type. Ignored."
- 2014-12-07: wsfulton
- Add support for C++11 strongly typed enumerations.
- 2014-11-21: wsfulton
- [Java C#] Fix multiply defined error when using %rename of enum items when using the "simple enum"
- wrappers.
- 2014-10-28: vadz
- [Python] Patch #201 The generated .py file no longer uses *args for all Python parameters.
- Instead, the parameters are named using the C++ parameter names.
- "compactdefaultargs" feature can be enabled to restore the old behaviour.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-10-24: timotheecour
- [D] Patch #204 Use core.atomic.atomicOp to mutate shared variables
- 2014-10-21: wsfulton
- Fix issue #242 - Use of the "kwargs" feature no longer automatically turns on the
- "compactdefaultargs" feature if the target language does not support kwargs.
- This change affects all languages except Python and Ruby.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-10-10: diorcety
- [Python] Patch #232 Fix property access using directors
- 2014-10-06: wsfulton
- [Python] Fixes when using -builtin and std::vector/std::list wrappers to allow deletion
- of single elements, such as 'del vec[0]'.
- 2014-09-30: oliverb
- [Javascript] Merge patch #216 by Richie765 - Added support for many versions of v8 javascript.
- 2014-09-30: oliverb
- [Javascript] Merge patch #195 by zittix - Fixed JSClassRef declaration not using the static one.
- 2014-09-30: ianlancetaylor
- [Go] In configure script, require Go 1.1 or later.
- 2014-09-30: wsfulton
- [Python] Patch #207 - Fix No module error with -relativeimport when using single
- header file import.
- 2014-09-27: wsfulton
- Patch #208 - Initialise newly created array when using array_functions in the
- carrays.i library (C++ usage).
- 2014-09-27: wsfulton
- [Ruby] Patch #187 - Fix crash on shutdown of the Ruby interpreter if more than one
- module was loaded at a time when data is being shared between modules.
- 2014-09-27: wsfulton
- [Java] Patch #168 - Fix leak in Java director string handling after the Java
- upcall when called from a native thread.
- 2014-09-25: ianlancetaylor
- [Go] Adjust generated code to work with upcoming Go 1.4
- release.
- 2014-09-23: wsfulton
- [Python] Add patch from Thomas Maslach to fix crash in wrappers when using -threads in
- the STL iterators (SwigPyIterator destructor).
- 2014-09-17: wsfulton
- [C#] Merge patch #229 from contre - Add bool array types to arrays_csharp.i
- 2014-09-12: olly
- [PHP] Add support for specifying any PHP interfaces a wrapped class
- implements, e.g.: %typemap("phpinterfaces") MyIterator "Iterator"
- 2014-09-11: olly
- [PHP] Fix throwing a PHP exception through C++ from a subclassed
- director method - PHP NULL gets returned by the subclassed method
- in this case, so the directorout typemap needs to allow that (at
- least if an exception is active).
- 2014-09-09: ianlancetaylor
- [Go] Add goargout typemap.
- 2014-09-09: olly
- [PHP] Fix segmentation faults with directors in PHP >= 5.4, and
- reenable runme tests for director_basic testcase. Fix from
- pavel-charvat in issue#164.
- 2014-09-05: ianlancetaylor
- [Go] Add imtype, goin, goout, godirectorin, and
- godirectorout typemaps, to support writing Go code to
- convert between types.
- 2014-09-02: olly
- [Python] Fix regression in indentation of python code produced with
- -modern, introduced by changes in #188. Reported by fabiencastan
- in #218.
- 2014-09-01: olly
- Issue an error for unknown SWIG preprocessor directives, rather
- than quietly ignoring them. Reported by jrhelsey in issue#217.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-08-15: talby
- [Perl] Include guard fix for nested modules from Anthony Heading (SF Patch #350).
- 2014-08-04: wsfulton
- [C#] Merge patch #200 from gpetrou - Changed CSharp license header to include auto-generated
- tag so that StyleCop ignores the files.
- 2014-08-04: wsfulton
- [Java] Merge patch #198 from Yuval Kashtan - Support for java.nio.ByteBuffer mapping to
- unsigned char * in various.i in NIOBUFFER typemaps.
- 2014-07-14: ianlancetaylor
- [Go] Change struct definition to use void *, not uint8, so
- that the type is recorded as possibly containing
- pointers. This ensures that the 1.3 garbage collector
- does not collect pointers passed to C++ code.
- 2014-07-01: wsfulton
- Fix SF Bug #1375 - Expansion of the $parentclassname special variable incorrectly contains
- brackets in the expanded name.
- Version 3.0.2 (4 Jun 2014)
- ==========================
- 2014-06-02: v-for-vandal
- [Lua] Pull request #176:
- If class has no __eq implemented, then default __eq is generated.
- Default __eq compares actual pointers stored inside Lua userdata.
- 2014-06-02: vkalinin
- Fix #183 - %extend and unnamed nested structs
- 2014-05-28: kwwette
- Fix install failure when using an 'out of source' build using the shipped
- tarball - regression introduced in swig-3.0.1.
- 2014-05-24: kwwette
- [Octave] Remove deprecated -global/-noglobal command-line arguments
- *** POTENTIAL INCOMPATIBILITY ***
- Version 3.0.1 (27 May 2014)
- ===========================
- 2014-05-25: hfalcic
- [Python] Python 3 byte string output: use errors="surrogateescape"
- if available on the version of Python that's in use. This allows
- obtaining the original byte string (and potentially trying a fallback
- encoding) if the bytes can't be decoded as UTF-8.
- Previously, a UnicodeDecodeError would be raised with no way to treat
- the data as bytes or try another codec.
- 2014-05-18: vkalinin
- Bug #175 - Restore %extend to work for unnamed nested structures by using a C
- symbol comprising the outer structure name and unnamed variable instance name.
- 2014-05-15: kwwette
- Add #166 - 'make check' now works out of source. This required the examples to build
- out of source. The main languages have been tested - C#, Go, Guile, Java, Javascript,
- Lua, Octave, Perl, PHP, Python, Ruby and Tcl.
- 2014-05-01: Oliver Buchtala
- Javascript support added, see Javascript chapter in the documentation.
- 2014-05-01: olly
- [PHP] The generated __isset() method now returns true for read-only properties.
- 2014-04-24: kwwette
- [Go] Fix go ./configure parsing of gccgo --version, and
- goruntime.swg typo in __GNUC_PATCHLEVEL__ (SF Bug #1298)
- 2014-04-24: kwwette
- Fix {python|perl5|ruby|tcl}/java examples
- In Lib/gcj/cni.i, for compatibility with newer gcj versions:
- - remove JvAllocObject() which gcj no longer defines, from gcj Changelog:
- 2004-04-16 Bryce McKinlay <mckinlay@redhat.com>
- * gcj/cni.h (JvAllocObject): Remove these obsolete,
- undocumented CNI calls.
- - change JvCreateJavaVM() argument from void* to JvVMInitArgs*, from gcj Changelog:
- 2005-02-23 Thomas Fitzsimmons <fitzsim@redhat.com>
- PR libgcj/16923
- ...
- (JvCreateJavaVM): Declare vm_args as JvVMInitArgs* rather than void*.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-04-08: wsfulton
- SF Bug #1366 - Remove duplicate declarations of strtoimax and strtoumax in inttypes.i
- 2014-04-08: wsfulton
- [Java C#] Enums which have been ignored via %ignore and are subsequently
- used are handled slightly differently. Type wrapper classes are now generated
- which are effectively a wrapper of an empty enum. Previously in Java uncompilable
- code was generated and in C# an int was used.
- 2014-04-04: wsfulton
- Fix regression in 3.0.0 where legal code following an operator<< definition might
- give a syntax error. SF Bug #1365.
- 2014-04-03: olly
- [PHP] Fix wrapping director constructors with default parameters
- with a ZTS-enabled build of PHP.
- 2014-04-02: olly
- [PHP] Pass the ZTS context we already have to avoid needing to
- call TSRMLS_FETCH, which is relatively expensive.
- 2014-04-02: olly
- [PHP] Pass ZTS context through to t_output_helper() so it works
- with a ZTS-enabled build of PHP. Reported by Pierre Labastie in
- github PR#155.
- 2014-03-28: wsfulton
- [Java C# D Go] Fixes for C enums used in an API and the definition of the enum
- has not been parsed. For D, this fixes a segfault in SWIG. The other languages
- now produce code that compiles, although the definition of the enum is needed
- in order to use the enum properly from the target language.
- 2014-03-23: v-for-vandal
- [Lua] Fix for usage of snprintf in Lua runtime which Visual Studio does not have.
- Version 3.0.0 (16 Mar 2014)
- ===========================
- 2014-03-16: wsfulton
- C++11 support initially developed as C++0x support by Matevz Jekovec as a Google Summer of Code
- project has been further extended. The C++11 support is comprehensive, but by no means complete
- or without limitations. Full details for each new feature in C++11 is covered in the
- CPlusPlus11.html chapter in the documentation which is included in SWIG and also available
- online at https://www.swig.org/Doc3.0/CPlusPlus11.html.
- 2014-03-14: v-for-vandal
- [Lua] Numerous Lua improvements:
- 1. %nspace support has been added. Namespaces are mapped to tables in the module, with the same
- name as the C++ namespace.
- 2. Inheritance is now handled differently. Each class metatable keeps a list of class bases instead
- of merging all members of all bases into the derived class.
- 3. The new metatables result in differences in accessing class members. For example:
- %module example
- struct Test {
- enum { TEST1 = 10, TEST2 = 20 };
- static const int ICONST = 12;
- };
- Now this can be used as follows:
- print(example.Test.TEST1)
- print(example.Test.ICONST)
- The old way was:
- print(example.Test_TEST1)
- print(example.Test_ICONST)
- 4. The special class metatable member ".constructor" was removed. Now SWIG generates the proxy
- function by itself and assigns it directly to the class table "__call" method.
- 5. eLua should also now support inheritance.
- 6. 'const' subtable in eLua is considered deprecated.
- Changes in behaviour:
- a. You can no longer assign to non-existing class members in classes without a __setitem__ method.
- It will cause a Lua error.
- b. You can no longer iterate over a module table and copy everything into the global namespace.
- Actually, this was never the case, but it is now explicitly prohibited.
- c. Now changing a base class will immediately affect all derived classes.
- d. There might be some issues with inheritance. Although the bases iteration scheme is the same
- as was used for merging base classes into derived one, some unknown issues may arise.
- The old metatable behaviour can be restored by using the -no-old-metatable-bindings option.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-03-06: wsfulton
- [Python] Change in default behaviour wrapping C++ bool. Only a Python True or False
- will now work for C++ bool parameters. This fixes overloading bool with other types.
- Python 2.3 minimum is now required for wrapping bool.
- When wrapping:
- const char* overloaded(bool value) { return "bool"; }
- const char* overloaded(int value) { return "int"; }
- Previous behaviour:
- >>> overloaded(False)
- 'int'
- >>> overloaded(True)
- 'int'
- >>> overloaded(0)
- 'int'
- Now we get the expected behaviour:
- >>> overloaded(False)
- 'bool'
- >>> overloaded(0)
- 'int'
- The consequence is when wrapping bool in non-overloaded functions:
- const char* boolfunction(bool value) { return value ? "true" : "false"; }
- The previous behaviour was very Pythonic:
- >>> boolfunction("")
- 'false'
- >>> boolfunction("hi")
- 'true'
- >>> boolfunction(12.34)
- 'true'
- >>> boolfunction(0)
- 'false'
- >>> boolfunction(1)
- 'true'
- Now the new behaviour more along the lines of C++ due to stricter type checking. The
- above calls result in an exception and need to be explicitly converted into a bool as
- follows:
- >>> boolfunction(0)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- TypeError: in method 'boolfunction', argument 1 of type 'bool'
- >>> boolfunction(bool(0))
- 'false'
- The old behaviour can be resurrected by passing the -DSWIG_PYTHON_LEGACY_BOOL command line
- parameter when executing SWIG. Typemaps can of course be written to customise the behaviour
- for specific parameters.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-03-06: wsfulton
- Fix SF Bug #1363 - Problem with method overloading when some methods are added by %extend
- and others are real methods and using template default parameters with smart pointers.
- This is noticeable as a regression since 2.0.12 when using the default smart pointer
- handling for some languages when the smart pointer wraps std::map and other STL containers.
- 2014-03-02: wsfulton
- [Python] SF Patch #346 from Jens Krueger. Correct exception thrown attempting to
- access a non-existent C/C++ global variable on the 'cvar' object. The exception thrown
- used to be a NameError. However, as this access is via a primary, an AttributeError
- is more correct and so the exception thrown now is an AttributeError. Reference:
- http://docs.python.org/2/reference/expressions.html#attribute-references
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-03-01: wsfulton
- [Python] Patch #143 Fix type shown when using type() to include the module and package
- name when using -builtin.
- 2014-03-01: wsfulton
- [Python] SF patch #347 Fix missing argument count checking with -modern.
- Fixes regression introduced when builtin changes were introduced in SWIG-2.0.3.
- 2014-02-21: wsfulton
- [PHP] Fix warning suppression using %warnfilter for PHP reserved class names.
- 2014-02-19: olly
- [Lua] Add keyword warnings for Lua keywords and Basic Functions.
- 2014-02-19: olly
- -Wallkw now includes keywords for all languages with keyword
- warnings (previously Go and R were missing).
- 2014-02-19: olly
- [PHP] Update the lists of PHP keywords with new ones from PHP 5.4
- and newer (and some missing ones from 5.3). Reserved PHP constants
- names are now checked against enum values and constants, instead
- of against function and method names. Built-in PHP function names
- no longer match methods added by %extend. Functions and methods
- named '__sleep', '__wakeup', 'not', 'parent', or 'virtual' are no
- longer needlessly renamed.
- 2014-02-15: wsfulton
- Fix the %$ismember %rename predicates to also apply to members added via %extend.
- Add %$isextendmember for %rename of members added via %extend. This can be used to
- distinguish between normal class/struct members and %extend members. For example
- '%$ismember, %$not %$isextendmember' will now identify just class/struct members.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-02-16: hfalcic
- [Python] Patch #137 - fix crashes/exceptions in exception handling in Python 3.3
- 2014-02-15: wsfulton
- [Java] Add support for the cdata library.
- 2014-02-08: vkalinin
- Nested class support added. This primarily allows SWIG to properly parse nested
- classes and keep the nested class information in the parse tree. Java and C#
- have utilised this information wrapping the C++ nested classes as Java/C#
- nested classes. The remaining target languages ignore nested classes as in
- previous versions. Help is needed by users of these remaining languages to
- design how C++ nested classes can be best wrapped. Please talk to us on the
- swig-devel mailing list if you think you can help.
- Previously, there was limited nested class support. Nested classes were treated
- as opaque pointers. However, the "nestedworkaround" feature provided a way to
- wrap a nested class as if it was a global class. This feature no longer exists
- and is replaced by the new "flatnested" feature. This effectively does the same
- thing with less manual code to be written. Please see the 'Nested classes'
- section in the documentation in SWIGPlus.html if you were previously using this
- feature.
- SWIG now parses the contents of nested classes where previously it did not. You
- may find that you will need to make adjustments to your interface file as
- effectively extra code is being wrapped.
- *** POTENTIAL INCOMPATIBILITY ***
- 2014-02-06: gjanssens
- [Guile] Patch #133. Make scm to string conversion work with non-ascii strings.
- Guile 2 has a completely rewritten string implementation. SWIG made some assumptions
- that are no longer valid as to the internals of guile's string representation.
- 2014-01-30: wsfulton
- [C#] Add new swigtype_inout.i library containing SWIGTYPE *& OUTPUT typemaps.
- Example usage wrapping:
- void f(XXX *& x) { x = new XXX(111); }
- would be:
- XXX x = null;
- f(out x);
- // use x
- x.Dispose(); // manually clear memory or otherwise leave out and leave it to the garbage collector
- 2014-01-21: ianlancetaylor
- [Go] Add %go_import directive.
- 2014-01-21: ianlancetaylor
- [Go] Add support for Go 1.3, not yet released.
- 2014-01-20: wsfulton
- Director exceptions (Swig::DirectorException) now derive from std::exception
- and hence provide the what() method. In Python and Ruby, this replaces the now
- deprecated DirectorException::getMessage() method.
- 2014-01-14: diorcety
- Patch #112 - Fix symbol resolution involving scopes that have multiple levels
- of typedefs - fixes some template resolutions as well as some typemap searches.
- 2014-01-11: wsfulton
- Fix and document the naturalvar feature override behaviour - the naturalvar
- feature attached to a variable name has precedence over the naturalvar
- feature attached to the variable's type. The overriding was not working
- when turning the feature off on the variable's name.
- Fix so that any use of the naturalvar feature will override the global
- setting. Previously when set globally by -naturalvar or %module(naturalvar=1),
- use of the naturalvar feature was not always honoured.
- 2014-01-06: ianlancetaylor
- [Go] Fix bug that broke using directors from a thread not
- created by Go.
- 2013-12-24: ptomulik
- [Python] SF Bug #1297
- Resolve several issues related to python imports.
- For example, it's now possible to import modules having the same module
- names, but belonging in different packages.
-
- From the user's viewpoint, this patch gives a little bit more control on
- import statements generated by SWIG. The user may choose to use relative
- or absolute imports.
-
- Some details:
- - we (still) generate import statements in the form 'import a.b.c' which
- corresponds to absolute imports in python3 and (the only available)
- ambiguous one in python2.
- - added -relativeimport option to use explicit relative import syntax
- (python3),
- The "Python Packages" section in the documentation discusses how to work
- with importing packages including the new -relativeimport command line option.
- 2013-12-23: vadz
- [Octave, Perl, Python, R, Ruby, Tcl] Change the length of strings created from fixed-size char
- buffers in C code.
- This is a potential backwards compatibility break: a "char buf[5]" containing "ho\0la" was
- returned as a string of length 5 before, but is returned as a string of length 2 now. Also,
- it was possible to assign a (non-NUL-terminated) string "hello" to such a buffer before but
- now this fails and only "helo" can fit.
- Apply "char FIXSIZE[ANY]" typemaps to explicitly choose the old behaviour.
- *** POTENTIAL INCOMPATIBILITY ***
- 2013-12-23: talby
- [Perl] Add support for directors.
- 2013-12-18: ianlancetaylor
- [Go] Don't require that Go environment variables be set
- when running examples or testsuite when using Go 1 or
- later.
- 2013-12-17: ianlancetaylor
- [Go] Remove -longsize option (for backward compatibility,
- ignore it if seen).
- 2013-12-17: ianlancetaylor
- [Go] Add -go-pkgpath option.
- 2013-12-16: ianlancetaylor
- [Go] Update for Go 1.2 release. Add support for linking
- SWIG code directly into executable, rather than using a
- shared library.
- 2013-12-13: ianlancetaylor
- [Go] Add SWIG source file name as comments in generated
- files. This can be used by Go documentation tools.
- 2013-12-12: jleveque
- [Lua] Fix typo (wchar instead of wchar_t) which made wchar.i
- for Lua useless.
- 2013-12-12: vmiklos
- [PHP] PHP's peculiar call-time pass-by-reference feature was
- deprecated in PHP 5.3 and removed in PHP 5.4, so update the REF
- typemaps in phppointers.i to specify pass-by-reference in the
- function definition. Examples/php/pointer has been updated
- accordingly.
- 2013-12-12: olly
- [PHP] The usage of $input in PHP directorout typemaps has been
- changed to be consistent with other languages. The typemaps
- provided by SWIG have been updated accordingly, but if you
- have written your own directorout typemaps, you'll need to
- update $input to &$input (or make equivalent changes).
- *** POTENTIAL INCOMPATIBILITY ***
- 2013-11-27: vadz
- [C#, Java, Python] Add std_auto_ptr.i defining typemaps for returning std::auto_ptr<>.
- 2013-11-09: wsfulton
- [C#] Apply patch #79 from Brant Kyser
- - Remove using directives from the generated C# code and fully qualify the use of all .NET
- framework types in order to minimize potential name collisions from input files defining
- types, namespace, etc with the same name as .NET framework members.
- - Globally qualify the use of .NET framework types in the System namespace
- - Remove .NET 1.1 support, .NET 2 is the minimum for the C# module
- This is a potential backwards compatibility break if code has been added relying on these using
- statements that used to be generated:
- using System;
- using System.Runtime.InteropServices;
- The quick fix to add these back in is to add the -DSWIG2_CSHARP command line option when
- executing SWIG. See CSharp.html documentation for more info.
- *** POTENTIAL INCOMPATIBILITY ***
- 2013-11-05: wsfulton
- [Java] Fix some corner cases for the $packagepath/$javaclassname special variable substitution.
- 2013-11-05: wsfulton
- [Java] Apply patch #91 from Marvin Greenberg - Add director:except feature for improved
- exception handling in director methods for Java.
- 2013-10-15: vadz
- Allow using \l, \L, \u, \U and \E in the substitution part of %(regex:/pattern/subst/)
- inside %rename to change the case of the text being replaced.
- 2013-10-12: wsfulton
- [CFFI] Apply #96 - superclass not lispify
- 2013-10-12: wsfulton
- Merge in C++11 support from the gsoc2009-matevz branch where Matevz Jekovec first
- started the C++0x additions. Documentation of the C++11 features supported is in a
- new Chapter of the documentation, "SWIG and C++11" in Doc/Manual/CPlusPlus11.html.
- 2013-10-04: wsfulton
- Fix %naturalvar not having any affect on templated classes instantiated with an
- enum as the template parameter type. Problem reported by Vadim Zeitlin.
- 2013-09-20: wsfulton
- [Java] Fix a memory leak for the java char **STRING_ARRAY typemaps.
- Version 2.0.12 (9 Feb 2014)
- ===========================
- 2014-01-16: wsfulton
- [PHP] Fix compilation error in ZTS mode (64 bit windows) due to incorrect placement
- of TSRMLS_FETCH() in SWIG_Php_GetModule() as reported by Mark Dawson-Butterworth.
- 2014-01-13: kwwette
- [Octave] update support to Octave version 3.8.0
- - Octave 3.8.0 no longer defines OCTAVE_API_VERSION_NUMBER, but 3.8.1
- will define OCTAVE_{MAJOR,MINOR,PATCH}_VERSION instead: see
- http://hg.savannah.gnu.org/hgweb/octave/rev/b6b6e0dc700e
- So we now use a new macro SWIG_OCTAVE_PREREQ(major,minor,patch) to
- enable features requiring Octave version major.minor.patch or later.
- For Octave versions prior to 3.8.1, we reconstruct values for
- OCTAVE_{MAJOR,MINOR,PATCH}_VERSION based on OCTAVE_API_VERSION_NUMBER,
- extracted from Octave's ChangeLogs. An additional hack is needed to
- distinguish between Octave <= 3.2.x and 3.8.0, neither of which define
- OCTAVE_API_VERSION_NUMBER.
- - Octave 3.8.0 deprecates symbol_table::varref(), so remove its use
- for this and future versions of Octave.
- - Octave 3.8.0 removes octave_value::is_real_nd_array(), used in
- octave_swig_type::dims(). Its use is not required here, so remove it.
- - Retested against Octave versions 3.0.5, 3.2.4, 3.4.3, 3.6.4, and 3.8.0.
- - Updated Octave documentation with tested Octave versions, and added a
- warning against using versions <= 3.x.x, which are no longer tested.
- 2013-12-22: wsfulton
- C++11 support for new versions of erase and insert in the STL containers.
- The erase and insert methods in the containers use const_iterator instead
- of iterator in C++11. There are times when the methods wrapped must match
- the parameters exactly. Specifically when full type information for
- template types is missing or SWIG fails to look up the type correctly,
- for example:
- %include <std_vector.i>
- typedef float Real;
- %template(RealVector) std::vector<Real>;
- SWIG does not find std::vector<Real>::iterator because %template using
- typedefs does not always work and so SWIG doesn't know if the type is
- copyable and so uses SwigValueWrapper<iterator> which does
- not support conversion to another type (const_iterator). This resulted
- in compilation errors when using the C++11 version of the containers.
- Closes #73
- 2013-10-17: wsfulton
- [R] Fix SF #1340 - Visual Studio compile error in C++ wrappers due to #include <exception>
- within extern "C" block.
- 2013-10-17: wsfulton
- [Python] Fix SF #1345 - Missing #include <stddef.h> for offsetof when using -builtin.
- 2013-10-12: wsfulton
- [Lua] Apply #92 - missing return statements for SWIG_Lua_add_namespace_details()
- and SWIG_Lua_namespace_register().
- Version 2.0.11 (15 Sep 2013)
- ============================
- 2013-09-15: wsfulton
- [R] Fix attempt to free a non-heap object in OUTPUT typemaps for:
- unsigned short *OUTPUT
- unsigned long *OUTPUT
- signed long long *OUTPUT
- char *OUTPUT
- signed char*OUTPUT
- unsigned char*OUTPUT
- 2013-09-12: wsfulton
- [Lua] Pull Git patch #62.
- 1) Static members and static functions inside class can be accessed as
- ModuleName.ClassName.FunctionName (MemberName respectively). Old way such as
- ModuleName.ClassName_FunctionName still works.
- 2) Same goes for enums inside classes: ModuleName.ClassName.EnumValue1 etc.
- 2013-09-12: wsfulton
- [UTL] Infinity is now by default an acceptable value for type 'float'. This fix makes
- the handling of type 'float' and 'double' the same. The implementation requires the
- C99 isfinite() macro, or otherwise some platform dependent equivalents, to be available.
- Users requiring the old behaviour of not accepting infinity, can define a 'check' typemap
- wherever a float is used, such as:
- %typemap(check,fragment="<float.h>") float, const float & %{
- if ($1 < -FLT_MAX || $1 > FLT_MAX) {
- SWIG_exception_fail(SWIG_TypeError, "Overflow in type float");
- }
- %}
- *** POTENTIAL INCOMPATIBILITY ***
- 2013-08-30: wsfulton
- [Lua] Pull Git patch #81: Include Lua error locus in SWIG error messages.
- This is standard information in Lua error messages, and makes it much
- easier to find bugs.
- 2013-08-29: wsfulton
- Pull Git patch #75: Handle UTF-8 files with BOM at beginning of file. Was giving an
- 'Illegal token' syntax error.
- 2013-08-29: wsfulton
- [C#] Pull Git patch #77: Allow exporting std::map using non-default comparison function.
- 2013-08-28: wsfulton
- [Python] %implicitconv is improved for overloaded functions. Like in C++, the methods
- with the actual types are considered before trying implicit conversions. Example:
- %implicitconv A;
- struct A {
- A(int i);
- };
- class CCC {
- public:
- int xx(int i) { return 11; }
- int xx(const A& i) { return 22; }
- };
- The following python code:
- CCC().xx(-1)
- will now return 11 instead of 22 - the implicit conversion is not done.
- 2013-08-23: olly
- [Python] Fix clang++ warning in generated wrapper code.
- 2013-08-16: wsfulton
- [Python] %implicitconv will now accept None where the implicit conversion takes a C/C++ pointer.
- Problem highlighted by Bo Peng. Closes SF patch #230.
- 2013-08-07: wsfulton
- [Python] SF Patch #326 from Kris Thielemans - Remove SwigPyObject_print and SwigPyObject_str and
- make the generated wrapper use the default python implementations, which will fall back to repr
- (for -builtin option).
- Advantages:
- - it avoids the swig user having to jump through hoops to get print to work as expected when
- redefining repr/str slots.
- - typing the name of a variable on the python prompt now prints the result of a (possibly redefined)
- repr, without the swig user having to do any extra work.
- - when redefining repr, the swig user doesn't necessarily have to redefine str as it will call the
- redefined repr
- - the behaviour is exactly the same as without the -builtin option while requiring no extra work
- by the user (aside from adding the %feature("python:slot...) statements of course)
- Disadvantage:
- - default str() will give different (but clearer?) output on swigged classes
- 2013-07-30: wsfulton
- [Python, Ruby] Fix #64 #65: Missing code in std::multimap wrappers. Previously an instantiation
- of a std::map was erroneously required in addition to an instantiation of std::multimap with the
- same template parameters to prevent compilation errors for the wrappers of a std::multimap.
- 2013-07-14: joequant
- [R] Change types file to allow for SEXP return values
- 2013-07-05: wsfulton
- [Python] Add %pythonbegin directive which works like %pythoncode, except the specified code is
- added at the beginning of the generated .py file. This is primarily needed for importing from
- __future__ statements required to be at the very beginning of the file. Example:
- %pythonbegin %{
- from __future__ import print_function
- print("Loading", "Whizz", "Bang", sep=' ... ')
- %}
- 2013-07-01: wsfulton
- [Python] Apply SF patch #340 - Uninitialized variable fix in SWIG_Python_NonDynamicSetAttr
- when using -builtin.
- 2013-07-01: wsfulton
- [Python, Ruby, Ocaml] Apply SF patch #341 - fix a const_cast in generated code that was generating
- a <:: digraph when using the unary scope operator (::) (global scope) in a template type.
- 2013-07-01: wsfulton
- [Python] Add SF patch #342 from Christian Delbaere to fix some director classes crashing on
- object deletion when using -builtin. Fixes SF bug #1301.
- 2013-06-11: wsfulton
- [Python] Add SWIG_PYTHON_INTERPRETER_NO_DEBUG macro which can be defined to use the Release version
- of the Python interpreter in Debug builds of the wrappers. The Visual Studio .dsp example
- files have been modified to use this so that Debug builds will now work without having
- to install or build a Debug build of the interpreter.
- 2013-06-07: wsfulton
- [Ruby] Git issue #52. Fix regression with missing rb_complex_new function for Ruby
- versions prior to 1.9 using std::complex wrappers if just using std::complex as an output type.
- Also fix the Complex helper functions external visibility (to static by default).
- 2013-06-04: olly
- [PHP] Fix SWIG_ZTS_ConvertResourcePtr() not to dereference NULL
- if the type lookup fails.
- Version 2.0.10 (27 May 2013)
- ============================
- 2013-05-25: wsfulton
- [Python] Fix Python 3 inconsistency when negative numbers are passed
- where a parameter expects an unsigned C type. An OverFlow error is
- now consistently thrown instead of a TypeError.
- 2013-05-25: Artem Serebriyskiy
- SVN Patch ticket #338 - fixes to %attribute macros for template usage
- with %arg.
- 2013-05-19: wsfulton
- Fix ccache-swig internal error bug due to premature file cleanup.
- Fixes SF bug 1319 which shows up as a failure in the ccache tests on
- Debian 64 bit Wheezy, possibly because ENABLE_ZLIB is defined.
- This is a corner case which will be hit when the maximum number of files
- in the cache is set to be quite low (-F option), resulting in a cache miss.
- 2013-05-09: kwwette
- [Octave] Fix bugs in Octave module loading:
- - fix a memory leak in setting of global variables
- - install functions only once, to speed up module loads
- 2013-04-28: gjanssens
- [Guile] Updates in guile module:
- - Add support for guile 2.0
- - Drop support for guile 1.6
- - Drop support for generating wrappers using guile's gh interface.
- All generated wrappers will use the scm interface from now on.
- - Deprecate -gh and -scm options. They are no longer needed.
- A warning will be issued when these options are still used.
- - Fix all tests and examples to have a successful travis test
- 2013-04-18: wsfulton
- Apply Patch #36 from Jesus Lopez to add support for $descriptor() special variable macro expansion
- in fragments. For example:
- %fragment("nameDescriptor", "header")
- %{
- static const char *nameDescriptor = "$descriptor(Name)";
- %}
- which will generate into the wrapper if the fragment is used:
- static const char *nameDescriptor = "SWIGTYPE_Name";
- 2013-04-18: wsfulton
- Fix SF Bug #428 - Syntax error when preprocessor macros are defined inside of enum lists, such as:
- typedef enum {
- eZero = 0
- #define ONE 1
- } EFoo;
- The macros are silently ignored.
- 2013-04-17: wsfulton
- [C#] Pull patch #34 from BrantKyser to fix smart pointers in conjunction with directors.
- 2013-04-15: kwwette
- [Octave] Fix bugs in output of cleanup code.
- - Cleanup code is now written also after the "fail:" label, so it will be called if
- a SWIG_exception is raised by the wrapping function, consistent with other modules.
- - Octave module now also recognises the "$cleanup" special variable, if needed.
- 2013-04-08: kwwette
- Add -MP option to SWIG for generating phony targets for all dependencies.
- - Prevents make from complaining if header files have been deleted before
- the dependency file has been updated.
- - Modelled on similar option in GCC.
- 2013-04-09: olly
- [PHP] Add missing directorin typemap for char* and char[] which
- fixes director_string testcase failure.
- 2013-04-05: wsfulton
- [Ruby] SF Bug #1292 - Runtime fixes for Proc changes in ruby-1.9 when using STL
- wrappers that override the default predicate, such as:
- %template(Map) std::map<swig::LANGUAGE_OBJ, swig::LANGUAGE_OBJ, swig::BinaryPredicate<> >;
- 2013-04-05: wsfulton
- [Ruby] SF Bug #1159 - Correctly check rb_respond_to call return values to fix some
- further 1.9 problems with functors and use of Complex wrappers.
- 2013-04-02: wsfulton
- [Ruby] Runtime fixes for std::complex wrappers for ruby-1.9 - new native Ruby complex numbers are used.
- 2013-03-30: wsfulton
- [Ruby] Fix seg fault when using STL containers of generic Ruby types, GC_VALUE or LANGUAGE_OBJECT,
- on exit of the Ruby interpreter. More frequently observed in ruby-1.9.
- 2013-03-29: wsfulton
- [Ruby] Fix delete_if (reject!) for the STL container wrappers which previously would
- sometimes seg fault or not work.
- 2013-03-25: wsfulton
- [Python] Fix some undefined behaviour deleting slices in the STL containers.
- 2013-03-19: wsfulton
- [C#, Java, D] Fix seg fault in SWIG using directors when class and virtual method names are
- the same except being in different namespaces when the %nspace feature is not being used.
- 2013-02-19: kwwette
- Fix bug in SWIG's handling of qualified (e.g. const) variables of array type. Given the typedef
- a(7).q(volatile).double myarray // typedef volatile double[7] myarray;
- the type
- q(const).myarray // const myarray
- becomes
- a(7).q(const volatile).double // const volatile double[7]
- Previously, SwigType_typedef_resolve() produces the type
- q(const).a(7).q(volatile).double // non-sensical type
- which would never match %typemap declarations, whose types were parsed correctly.
- Add typemap_array_qualifiers.i to the test suite which checks for the correct behaviour.
- 2013-02-18: wsfulton
- Deprecate typedef names used as constructor and destructor names in %extend. The real
- class/struct name should be used.
- typedef struct tagEStruct {
- int ivar;
- } EStruct;
- %extend tagEStruct {
- EStruct() // illegal name, should be tagEStruct()
- {
- EStruct *s = new EStruct();
- s->ivar = ivar0;
- return s;
- }
- ~EStruct() // illegal name, should be ~tagEStruct()
- {
- delete $self;
- }
- }
- For now these trigger a warning:
- extend_constructor_destructor.i:107: Warning 522: Use of an illegal constructor name 'EStruct' in
- %extend is deprecated, the constructor name should be 'tagEStruct'.
- extend_constructor_destructor.i:111: Warning 523: Use of an illegal destructor name 'EStruct' in
- %extend is deprecated, the destructor name should be 'tagEStruct'.
- These %extend destructor and constructor names were valid up to swig-2.0.4, however swig-2.0.5 ignored
- them altogether for C code as reported in SF bug #1306. The old behaviour of using them has been
- restored for now, but is officially deprecated. This does not apply to anonymously defined typedef
- classes/structs such as:
- typedef struct {...} X;
- 2013-02-17: kwwette
- When generating functions provided by %extend, use "(void)" for no-argument functions
- instead of "()". This prevents warnings when compiling with "gcc -Wstrict-prototypes".
- 2013-02-17: kwwette
- [Octave] Minor fix to autodoc generation: get the right type for functions returning structs.
- 2013-02-15: wsfulton
- Deprecate typedef names used in %extend that are not the real class/struct name. For example:
- typedef struct StructBName {
- int myint;
- } StructB;
- %extend StructB {
- void method() {}
- }
- will now trigger a warning:
- swig_extend.i:19: Warning 326: Deprecated %extend name used - the struct name StructBName
- should be used instead of the typedef name StructB.
- This is only partially working anyway (the %extend only worked if placed after the class
- definition).
- 2013-02-09: wsfulton
- [CFFI] Apply patch #22 - Fix missing package before &body
- 2013-01-29: wsfulton
- [Java] Ensure 'javapackage' typemap is used as it stopped working from version 2.0.5.
- 2013-01-28: wsfulton
- [Python] Apply patch SF #334 - Fix default value conversions "TRUE"->True, "FALSE"->False.
- 2013-01-28: wsfulton
- [Java] Apply patch SF #335 - Truly ignore constructors in directors with %ignore.
- 2013-01-18: Brant Kyser
- [Java] Patch #15 - Allow the use of the nspace feature without the -package commandline option.
- This works as long and the new jniclasspackage pragma is used to place the JNI intermediate class
- into a package and the nspace feature is used to place all exposed types into a package.
- 2013-01-15: wsfulton
- Fix Visual Studio examples to work when SWIG is unzipped into a directory containing spaces.
- 2013-01-15: wsfulton
- [C#] Fix cstype typemap lookup for member variables so that a fully qualified variable name
- matches. For example:
- %typemap(cstype) bool MVar::mvar "MyBool"
- struct MVar {
- bool mvar;
- };
- 2013-01-11: Brant Kyser
- [Java, C#, D] SF Bug #1299 - Fix generated names for when %nspace is used on
- classes with the same name in two different namespaces.
- 2013-01-11: Vladimir Kalinin
- [C#] Add support for csdirectorin 'pre', 'post' and 'terminator' attributes.
- 2013-01-08: olly
- [PHP] Fix to work with a ZTS build of PHP (broken in 2.0.7).
- 2013-01-07: olly
- Fix bashism in configure, introduced in 2.0.9.
- 2013-01-06: wsfulton
- Pull patch #4 from ptomulik to fix SF Bug #1296 - Fix incorrect warning for virtual destructors
- in templates, such as:
- Warning 521: Illegal destructor name B< A >::~B(). Ignored.
- 2013-01-05: wsfulton
- [Python] Pull patch #3 from ptomulik to fix SF Bug #1295 - standard exceptions as
- classes using the SWIG_STD_EXCEPTIONS_AS_CLASSES macro.
- 2013-01-04: wsfulton
- [Java] Pull patch #2 from BrantKyser to fix SF Bug #1283 - fix smart pointers in conjuction
- with directors.
- 2013-01-03: wsfulton
- [Java] Pull patch #1 from BrantKyser to fix SF Bug #1278 - fix directors and nspace feature when
- multilevel namespaces are used.
- Version 2.0.9 (16 December 2012)
- ================================
- 2012-12-16: wsfulton
- Fix garbage line number / empty file name reporting for some missing
- '}' or ')' error messages.
- 2012-12-15: kkaempf
- [Ruby] Apply patch 3530444, Class#methods and Class#constants returns array of
- symbols in Ruby 1.9+
- 2012-12-14: kkaempf
- [Ruby] Apply patch 3530439 and finally replace all occurrences of the STR2CSTR() macro
- with StringValuePtr(). STR2CSTR was deprecated since years and got removed in Ruby 1.9
- 2012-12-14: kkaempf
- [Ruby] Applied patches #3530442 and 3530443 to adapt compile and runtime include
- paths to match Ruby 1.9+
- 2012-12-14: wsfulton
- [CFFI] Fix #3161614 - Some string constants are incorrect
- 2012-12-13: wsfulton
- [CFFI] Fix #3529690 - Fix incorrect constant names.
- 2012-12-12: drjoe
- [R] add fix to finalizer that was missed earlier
- 2012-12-11: wsfulton
- [Python] Apply patch #3590522 - fully qualified package paths for Python 3 even if a module is in the
- same package.
- 2012-12-08: wsfulton
- [Python] Bug #3563647 - PyInt_FromSize_t unavailable prior to Python 2.5 for unsigned int types.
- 2012-12-08: wsfulton
- [Perl] Fix bug #3571361 - C++ comment in C wrappers.
- 2012-12-07: wsfulton
- [C#] Apply patch #3571029 which adds missing director support for const unsigned long long &.
- 2012-11-28: kwwette
- [Octave] Simplified module loading: now just the syntax
- $ example;
- is accepted, which loads functions globally but constants and variables relative to the current scope.
- This make module loading behaviour reliably consistent, and reduces problems when loading modules which
- depend on other modules which may not have been previously loaded.
- 2012-11-27: wsfulton
- [cffi] Fix junk output when wrapping single character literal constants.
- 2012-11-17: wsfulton
- [Tcl, Modula3] Add missing support for -outdir.
- 2012-11-17: wsfulton
- Fix segfaults when using filename paths greater than 1024 characters in length.
- 2012-11-14: wsfulton
- [ccache-swig] Apply patch #3586392 from Frederik Deweerdt to fix some error cases - incorrectly using
- memory after it has been deleted.
- 2012-11-09: vzeitlin
- [Python] Fix overflow when passing values greater than LONG_MAX from Python 3 for parameters with unsigned long C type.
- 2012-11-09: wsfulton
- Fix some feature matching issues for implicit destructors and implicit constructors and implicit
- copy constructors added with %copyctor. Previously a feature for these had to be fully qualified
- in order to match. Now the following will also match:
- %feature("xyz") ~XXX();
- struct XXX {};
- 2012-11-09: wsfulton
- Further consistency in named output typemap lookups for implicit constructors and destructors and
- implicit copy constructors added with %copyctor. Previously only the fully qualified name was being
- used, now the unqualified name will also be used. For example, previously:
- example.i:38: Searching for a suitable 'out' typemap for: void Space::More::~More
- Looking for: void Space::More::~More
- Looking for: void
- Now the unqualified name is also used:
- example.i:38: Searching for a suitable 'out' typemap for: void Space::More::~More
- Looking for: void Space::More::~More
- Looking for: void ~More
- Looking for: void
- 2012-11-02: wsfulton
- Fix some subtle named output typemap lookup misses, the fully qualified name was not always being
- used for variables, for example:
- struct Glob {
- int MyVar;
- };
- Previously the search rules (as shown by -debug-tmsearch) for the getter wrapper were:
- example.i:44: Searching for a suitable 'out' typemap for: int MyVar
- Looking for: int MyVar
- Looking for: int
- Now the scope is named correctly:
- example.i:44: Searching for a suitable 'out' typemap for: int Glob::MyVar
- Looking for: int Glob::MyVar
- Looking for: int MyVar
- Looking for: int
- 2012-10-26: wsfulton
- Fix director typemap searching so that a typemap specified with a name will be correctly matched. Previously
- the name was ignored during the typemap search. Applies to the following list of typemaps:
- directorout, csdirectorout, cstype, imtype, ctype, ddirectorout, dtype, gotype, jtype, jni, javadirectorout.
- 2012-10-11: wsfulton
- Most of the special variables available for use in %exception are now also available for expansion in
- %extend blocks. These are: $name $symname $overname $decl $fulldecl $parentclassname $parentclasssymname, see docs
- on "Class extension" in SWIGPlus.html. Patch based on submission from Kris Thielemans.
- 2012-10-10: wsfulton
- Additional new special variables in %exception are expanded as follows:
- $parentclassname - The parent class name (if any) for a method.
- $parentclasssymname - The target language parent class name (if any) for a method.
- 2012-10-08: iant
- [Go] Generating Go code now requires using the -intgosize option to
- indicate the size of the 'int' type in Go. This is because the
- size of the type is changing from Go 1.0 to Go 1.1 for x86_64.
- 2012-09-14: wsfulton
- Add new warning if the empty template instantiation is used as a base class, for example:
- template <typename T> class Base {};
- %template() Base<int>;
- class Derived : public Base<int> {};
- gives the following warning instead of silently ignoring the base:
- cpp_inherit.i:52: Warning 401: Base class 'Base< int >' has no name as it is an empty template instantiated with '%template()'. Ignored.
- cpp_inherit.i:51: Warning 401: The %template directive must be written before 'Base< int >' is used as a base class and be declared with a name.
- 2012-09-11: wsfulton
- [Java] Fix #3535304 - Direct use of a weak global reference in directors
- sometimes causing seg faults especially on Android.
- 2012-09-06: wsfulton
- [Java] Fix (char *STRING, size_t LENGTH) typemaps to accept NULL string.
- 2012-08-26: drjoe
- [R] make ExternalReference slot ref to contain reference
- 2012-08-26: drjoe
- [R] fix Examples/Makefile to use C in $(CC) rather than $(CXX)
- Version 2.0.8 (20 August 2012)
- ==============================
- 2012-08-15: wsfulton
- [Perl] Add size_type, value_type, const_reference to the STL containers.
- 2012-08-15: wsfulton
- [Python] Add discard and add methods to std::set wrappers so that pyabc.i can be used ensuring
- MutableSet is a valid abstract base class for std::set. As reported by Alexey Sokolov.
- Similarly for std::multiset.
- 2012-08-15: wsfulton
- [Python] Fix #3541744 - Missing PyInt_FromSize_t calls for Python 3.
- 2012-08-13: wsfulton
- [Java] Patch from David Baum to add the assumeoverride feature for Java directors to
- improve performance when all overridden methods can be assumed to be overridden.
- 2012-08-05: wsfulton
- [Python] #3530021 Fix unused variable warning.
- 2012-08-05: wsfulton
- [C#] Fix #3536360 - Invalid code sometimes being generated for director methods
- with many arguments.
- 2012-08-05: wsfulton
- [Perl] #3545877 - Don't undefine bool if defined by C99 stdbool.h - problem using
- Perl 5.16 and later.
- 2012-08-04: wsfulton
- Remove incorrect warning (314) about target language keywords which were triggered
- by using declarations and using directives. For example 'string' is a keyword in C#:
- namespace std { class string; }
- using std::string;
- 2012-07-21: wsfulton
- Fix display of pointers in various places on 64 bit systems - only 32 bits were being shown.
- 2012-07-21: wsfulton
- Fix gdb debugger functions 'swigprint' and 'locswigprint' to display to the gdb output window
- rather than stdout. This fixes display problems in gdbtui and the ensures the output
- appears where expected in other gdb based debuggers such as Eclipse CDT.
- 2012-07-20: kwwette
- [Octave] segfault-on-exit prevention hack now preserves exit status, and uses C99 _Exit().
- 2012-07-02: wsfulton
- Fix Debian bug http://bugs.debian.org/672035, typemap copy failure - regression introduced
- in swig-2.0.5:
- %include<stl.i>
- using std::pair;
- %template(StrPair) pair<std::string, std::string>;
- 2012-07-02: wsfulton
- Fix using declarations combined with using directives with forward class declarations so that
- types are correctly found in scope for templates. Example:
- namespace Outer2 {
- namespace Space2 {
- template<typename T> class Thing2;
- }
- }
- using namespace Outer2;
- using Space2::Thing2;
- template<typename T> class Thing2 {};
- // STILL BROKEN void useit2(Thing2<int> t) {}
- void useit2a(Outer2::Space2::Thing2<int> t) {}
- void useit2b(::Outer2::Space2::Thing2<int> t) {}
- void useit2c(Space2::Thing2<int> t) {}
- namespace Outer2 {
- void useit2d(Space2::Thing2<int> t) {}
- }
- %template(Thing2Int) Thing2<int>;
- 2012-06-30: wsfulton
- Fix template namespace problems for symbols declared with a forward class declarations, such as:
- namespace Space1 {
- namespace Space2 {
- template<typename T> struct YYY;
- }
- template<typename T> struct Space2::YYY {
- T yyy(T h) {
- return h;
- }
- };
- void testYYY1(Space1::Space2::YYY<int> yy) {}
- void testYYY2(Space2::YYY<int> yy) {}
- void testYYY3(::Space1::Space2::YYY<int> yy) {}
- }
- %template(YYYInt) Space1::Space2::YYY<int>;
- 2012-06-30: wsfulton
- Fix namespace problems for symbols declared with a forward class declarations, such as:
- namespace Space1 {
- namespace Space2 {
- struct XXX;
- struct YYY;
- }
- struct Space2::YYY {};
- struct Space1::Space2::XXX {};
- void testXXX2(Space2::XXX xx) {}
- void testYYY2(Space2::YYY yy) {}
- }
- where xx and yy were not recognised as the proxy classes XXX and YYY.
- 2012-06-30: wsfulton
- Fix using declarations combined with using directives with forward class declarations so that
- types are correctly found in scope.
- namespace Outer2 {
- namespace Space2 {
- class Thing2;
- }
- }
- using namespace Outer2;
- using Space2::Thing2;
- class Thing2 {};
- // None of the methods below correctly used the Thing2 proxy class
- void useit2(Thing2 t) {}
- void useit2a(Outer2::Space2::Thing2 t) {}
- void useit2b(::Outer2::Space2::Thing2 t) {}
- void useit2c(Space2::Thing2 t) {}
- namespace Outer2 {
- void useit2d(Space2::Thing2 t) {}
- }
- 2012-06-25: wsfulton
- Fix using declarations combined with using directives so that types are correctly found in scope.
- Example:
- namespace Outer2 {
- namespace Space2 {
- class Thing2 {};
- }
- }
- using namespace Outer2; // using directive
- using Space2::Thing2; // using declaration
- void useit2(Thing2 t) {}
- Similarly for templated classes.
- 2012-05-29: wsfulton
- Fix #3529601 - seg fault when a protected method has the "director"
- feature but the parent class does not. Also fix similar problems with
- the allprotected feature.
- 2012-05-28: wsfulton
- Fix seg fault when attempting to warn about an illegal destructor - #3530055, 3530078 and #3530118.
- Version 2.0.7 (26 May 2012)
- ===========================
- 2012-05-26: wsfulton
- std::string typemap modifications so they can be used with %apply for other string
- classes.
- 2012-05-25: wsfulton
- [Lua] Fixes for -external-runtime to work again.
- 2012-05-22: szager
- [python] Disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long.
- 2012-05-18: olly
- [PHP] Fix getters for template members. (SF#3428833, SF#3528035)
- 2012-05-14: wsfulton
- Fix some language's std::map wrappers to recognise difference_type, size_type, key_type
- and mapped_type.
- 2012-05-14: kwwette (signed off by xavier98)
- [Octave] Prevent Octave from seg-faulting at exit when SWIG
- modules are loaded, due to bugs in Octave's cleanup code:
- * Wrapping functions now declared with Octave DEFUN_DLD macro,
- and loaded through Octave's dynamic module loader
- * Global variables of swigref type are now assigned a new()
- copy of the swigref class, to prevent double-free errors
- * SWIG module at-exit cleanup function now created in Octave
- through eval(), so not dependent on loaded .oct library
- * For Octave versions 3.1.* to 3.3.*, register C-level at-exit
- function which terminates Octave immediately (with correct
- status code) without performing memory cleanup. This function
- can be controlled with macros in Lib/octave/octruntime.swg
- [Octave] New syntax for determing whether SWIG module should be
- loaded globally or non-globally. To load module "example" globally,
- type the module name
- $ example;
- as before; to load module non-globally, assign it to a variable:
- $ example = example;
- or
- $ ex = example;
- for a shorter (local) module name. -global/-noglobal command-line
- options and module command line are deprecated. Added usage info
- to module, so typing
- $ help example
- or incorrect usage should display proper usage, with examples.
- *** POTENTIAL INCOMPATIBILITY ***
- 2012-05-12: olly
- [PHP] Fix memory leak in code generated for a callback. Patch from
- SF bug #3510806.
- 2012-05-12: olly
- [PHP] Avoid using zend_error_noreturn() as it doesn't work with all
- builds of PHP (SF bug #3166423). Instead we now wrap it in a
- SWIG_FAIL() function which we annotate as "noreturn" for GCC to
- avoids warnings. This also reduces the size of the compiled
- wrapper (e.g. the stripped size is reduced by 6% for Xapian's PHP
- bindings).
- 2012-05-11: wsfulton
- [Java] SF patch #3522855 Fix unintended uninitialised memory access in OUTPUT typemaps.
- 2012-05-11: wsfulton
- [Java] SF patch #3522674 Fix possible uninitialised memory access in char **STRING_OUT
- typemap.
- 2012-05-11: wsfulton
- [Java] SF patch #3522611 Fix uninitialised size regression in char **STRING_ARRAY
- introduced in swig-2.0.6.
- 2012-05-11: wsfulton
- SF bug #3525050 - Fix regression introduced in swig-2.0.5 whereby defining one typemap
- method such as an 'out' typemap may hide another typemap method such as an 'in' typemap -
- only occurs when the type is a template type where the template parameters are the same
- via a typedef.
- 2012-05-10: olly
- [PHP] Fix the constant typemaps for SWIGTYPE, etc - previously
- these used the wrong name for renamed constants. Add
- autodoc_runme.php to the testsuite as a regression test for this.
- 2012-05-02: ianlancetaylor
- [Go] Remove compatibility support for gccgo 4.6. Using
- SWIG with gccgo will now require gccgo 4.7. Using SWIG
- with the more commonly used gc compiler is unaffected.
- 2012-05-01: wsfulton
- Fix generated code for C forward enum declarations in some languages.
- Version 2.0.6 (30 April 2012)
- =============================
- 2012-04-25: wsfulton
- [Lua] Fix uninitialised variable in SWIGTYPE **OUTPUT typemaps as reported by Jim Anderson.
- 2012-04-28: wsfulton
- [Python] Fix compilation errors when wrapping STL containers on Mac OS X and possibly other systems.
- 2012-04-28: wsfulton
- [Java] Patch 3521811 from Leo Davis - char **STRING_ARRAY typemaps fixed to handle
- null pointers.
- Version 2.0.5 (19 April 2012)
- =============================
- 2012-04-14: wsfulton
- [Lua] Apply patch #3517435 from Miles Bader - prefer to use Lua_pushglobaltable
- 2012-04-14: wsfulton
- [Ruby] Apply patch #3517769 from Robin Stocker to fix compile error on MacRuby using RSTRING_PTR.
- 2012-04-13: wsfulton
- Apply patch #3511009 from Leif Middelschulte for slightly optimised char * variable wrappers.
- 2012-04-13: wsfulton
- [Lua] Apply #3219676 from Shane Liesegang which adds:
- - support for %factory
- - a __tostring method
- - a __disown method
- 2012-04-13: wsfulton
- [Xml] Apply #3513569 which adds a catchlist to the xml output.
- 2012-04-05: olly
- [Lua] Add support for Lua 5.2 (patch SF#3514593 from Miles Bader)
- 2012-03-26: xavier98
- [octave] Apply patch #3425993 from jgillis: add extra logic to the octave_swig_type::dims(void) method: it checks if the user has defined a __dims__ method and uses this in stead of returning (1,1)
- [octave] Apply patch #3424833 from jgillis: make is_object return true for swig types
- 2012-03-24: wsfulton
- [D] Apply #3502431 to fix duplicate symbols in multiple modules.
- 2012-03-21: wsfulton
- Fix #3494791 - %$isglobal for %rename matching.
- 2012-03-20: wsfulton
- Fix #3487706 and #3391906 - missing stddef.h include for ptrdiff_t when using %import
- for STL containers and compiling with g++-4.6. An include of stddef.h is now only
- generated when SWIG generates STL helper templates which require ptrdiff_t. If you
- were previously relying on "#include <stddef.h>" always being generated when using a
- %include of an STL header, you may now need to add this in manually.
- 2012-03-16: wsfulton
- Apply patch #3392264 from Sebastien Bine to parse (unsigned) long long types in enum value assignment.
- 2012-03-16: wsfulton
- Apply patch #3505530 from Karl Wette to allow custom allocators in STL string classes for the UTL languages.
- 2012-03-13: wsfulton
- Apply patch #3468362 from Karl Wette to fix %include inside %define.
- 2012-03-13: wsfulton
- [Python, Ruby, Octave, R] Fix #3475492 - iterating through std::vector wrappers of enumerations.
- 2012-02-27: xavier98 (patches from Karl Wette)
- [Octave] Use -globals . to load global variables in module namespace
- [Octave] Comment declaration of unimplemented function swig_register_director
- [Octave] Fix OCTAVE_PATH in octave Makefiles
- [Octave] Add support for std::list - fix li_std_containers_int test
- [Octave] Fix imports test
- 2012-02-16: wsfulton
- [Java] Make generated support functions in arrays_java.i static so that generated code
- from multiple instances of SWIG can be compiled and linked together - problem reported by
- Evan Krause.
- 2012-01-24: wsfulton
- Fix crash with bad regex - bug #3474250.
- 2012-01-24: wsfulton
- [Python] Add Python stepped slicing support to the STL wrappers (std::vector, std::list).
- Assigning to a slice, reading a slice and deleting a slice with steps now work.
- For example:
- %template(vector_i) std::vector<int>
- vi = vector_i(range(10))
- print list(vi)
- vi[1:4:2] = [111, 333]
- print list(vi)
- del vi[3:10:3]
- print list(vi)
- print list(vi[::-1])
- gives (same behaviour as native Python sequences such as list):
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- [0, 111, 2, 333, 4, 5, 6, 7, 8, 9]
- [0, 111, 2, 4, 5, 7, 8]
- [8, 7, 5, 4, 2, 111, 0]
- 2012-01-23: klickverbot
- [D] Correctly annotate function pointers with C linkage.
- [D] Exception and Error have become blessed names; removed d_exception_name test case.
- 2012-01-20: wsfulton
- [Python] Fix some indexing bugs in Python STL wrappers when the index is negative, eg:
- %template(vector_i) std::vector<int>
- iv=vector_i([0,1,2,3,4,5])
- iv[-7:]
- now returns [0, 1, 2, 3, 4, 5] instead of [5].
- vv[7:9] = [22,33]
- now returns [0, 1, 2, 3, 4, 5, 22, 33] instead of "index out range" error.
- Also fix some segfaults when replacing ranges, eg when il is a std::list wrapper:
- il[0:2] = [11]
- 2012-01-17: wsfulton
- [Go] Fix forward class declaration within a class when used as a base.
- 2012-01-07: wsfulton
- [C#] Add support for %nspace when using directors.
- 2012-01-06: wsfulton
- [Java] Patch #3452560 from Brant Kyser - add support for %nspace when using directors.
- 2011-12-21: wsfulton
- The 'directorin' typemap now accepts $1, $2 etc expansions instead of having to use workarounds -
- $1_name, $2_name etc.
- 2011-12-20: wsfulton
- [Java] Add (char *STRING, size_t LENGTH) director typemaps.
- 2011-12-20: wsfulton
- [C#, Go, Java, D] Add support for the 'directorargout' typemap.
- 2011-12-20: wsfulton
- [Ocaml, Octave, PHP, Python, Ruby] Correct special variables in 'directorargout' typemap.
- This change will break any 'directorargout' typemaps you may have written. Please change:
- $result to $1
- $input to $result
- Also fix the named 'directorargout' DIRECTOROUT typemaps for these languages which didn't
- previously compile and add in $1, $2 etc expansion.
- *** POTENTIAL INCOMPATIBILITY ***
- 2011-12-10: talby
- [perl5] SWIG_error() now gets decorated with perl source file/line number.
- [perl5] error handling now conforms to public XS api (fixes perl v5.14 issue).
- 2011-12-10: wsfulton
- [Android/Java] Fix directors to compile on Android.
- Added documentation and examples for Android.
- 2011-12-08: vadz
- Bug fix: Handle methods renamed or ignored in the base class correctly in the derived classes
- (they could be sometimes mysteriously not renamed or ignored there before).
- 2011-12-03: klickverbot
- [D] Fix exception glue code for newer DMD 2 versions.
- [D] Do not default to 32 bit glue code for DMD anymore.
- [D] Use stdc.config.c_long/c_ulong to represent C long types.
- 2011-12-01: szager
- [python] Fixed bug 3447426: memory leak in vector.__getitem__.
- 2011-11-30: wsfulton
- [R] Remove C++ comments from generated C code.
- 2011-11-27: olly
- [Python] Fix some warnings when compiling generated wrappers with
- certain GCC warning options (Debian bug #650246).
- 2011-11-28: wsfulton
- Fix #3433541 %typemap(in, numinputs=0) with 10+ arguments.
- 2011-11-28: olly
- [Perl] Fix warnings when compiling generated wrappers with certain
- GCC warning options (Debian bug #436711).
- 2011-11-28: olly
- [PHP] Update keyword list to include keywords added in PHP releases up to 5.3.
- 2011-11-25: wsfulton
- [C#] Provide an easy way to override the default visibility for the proxy class pointer
- constructors and getCPtr() method. The visibility is 'internal' by default and if multiple
- SWIG modules are being used and compiled into different assemblies, then they need to be
- 'public' in order to use the constructor or getCPtr() method from a different assembly.
- Use the following macros to change the visibilities in the proxy and type wrapper class:
- SWIG_CSBODY_PROXY(public, public, SWIGTYPE)
- SWIG_CSBODY_TYPEWRAPPER(public, public, public, SWIGTYPE)
- [Java] Provide an easy way to override the default visibility for the proxy class pointer
- constructors and getCPtr() method. The visibility is 'protected' by default and if multiple
- SWIG modules are being used and compiled into different packages, then they need to be
- 'public' in order to use the constructor or getCPtr() method from a different package.
- Use the following macros to change the visibilities in the proxy and type wrapper class:
- SWIG_JAVABODY_PROXY(public, public, SWIGTYPE)
- SWIG_JAVABODY_TYPEWRAPPER(public, public, public, SWIGTYPE)
- The default for Java has changed from public to protected for the proxy classes. Use the
- SWIG_JAVABODY_PROXY macro above to restore to the previous visibilities.
- *** POTENTIAL INCOMPATIBILITY ***
- 2011-11-22: szager
- [python] Bug 3440044: #ifdef out SWIG_Python_NonDynamicSetAttr if -builtin
- isn't being used, to avoid unnecessary binary incompatibilities between
- python installations.
- 2011-11-17: wsfulton
- Bug fix: Remove root directory from directory search list in Windows.
- 2011-11-13: wsfulton
- [Ruby] Apply patch #3421876 from Robin Stocker to fix #3416818 - same class name in
- different namespaces confusion when using multiple modules.
- 2011-11-11: wsfulton
- Fix pcre-build.sh to work with non-compressed tarballs - problem reported by Adrian Blakely.
- 2011-11-03: wsfulton
- Expand special variables in typemap warnings, eg:
- %typemap(in, warning="1000:Test warning for 'in' typemap for $1_type $1_name") int "..."
- 2011-11-01: wsfulton
- Fix named output typemaps not being used when the symbol uses a qualifier and contains
- a number, eg:
- %typemap(out) double ABC::m1 "..."
- 2011-10-24: talby
- [perl5] SF bug #3423119 - overload dispatch stack corruption fix. Better, but more research
- is needed on a stable path for tail calls in XS.
- Also, fix for large long longs in 32 bit perl.
- 2011-10-13: xavier98
- [octave] Allow Octave modules to be re-loaded after a "clear all".
- 2011-09-19: wsfulton
- Fix regression introduced in swig-2.0.1 reported by Teemu Ikonone leading to uncompilable code
- when using typedef and function pointer references, for example:
- typedef int FN(const int &a, int b);
- void *typedef_call1(FN *& precallback, FN * postcallback);
- 2011-09-14: wsfulton
- [Lua] Patch #3408012 from Raman Gopalan - add support for embedded Lua (eLua)
- including options for targeting Lua Tiny RAM (LTR).
- 2011-09-14: wsfulton
- [C#] Add boost_intrusive_ptr.i library contribution from patch #3401571.
- 2011-09-13: wsfulton
- Add warnings for badly named destructors, eg:
- struct KStruct {
- ~NOT_KStruct() {}
- };
- cpp_extend_destructors.i:92: Warning 521: Illegal destructor name ~NOT_KStruct. Ignored.
- 2011-09-13: wsfulton
- Fix %extend and destructors for templates. The destructor in %extend was not always wrapped,
- for example:
- %extend FooT {
- ~FooT() { delete $self; } // was not wrapped as expected
- };
- template<class T> class FooT {};
- %template(FooTi) FooT<int>;
- 2011-09-13: wsfulton
- Fix special variables such as "$decl" and "$fulldecl" in destructors to include the ~ character.
- 2011-09-10: talby
- [perl5] SF bug #1481958 - Improve range checking for integer types.
- Enhance li_typemaps_runme.pl
- 2011-09-08: wsfulton
- Fix %extend on typedef classes in a namespace using the typedef name, for example:
- namespace Space {
- %extend CStruct {
- ...
- }
- typedef struct tagCStruct { ... } CStruct;
- }
- 2011-08-31: xavier98
- [octave] patches from Karl Wette: improvements to module loading behavior;
- added example of friend operator to operator example; fixed octave panic/crash in 3.0.5;
- documentation improvements
- 2011-08-30: szager
- [python] Bug 3400486, fix error signalling for built-in constructors.
- 2011-08-26: wsfulton
- [Go] Fix file/line number display for "gotype" when using typemap debugging options
- -tmsearch and -tmused.
- 2011-08-26: wsfulton
- [C#, D] Fix %callback which was generating uncompilable code.
- 2011-08-25: wsfulton
- Fix constructors in named typedef class declarations as reported by Gregory Bronner:
- typedef struct A {
- A(){} // Constructor which was not accepted by SWIG
- B(){} // NOT a constructor --illegal, but was accepted by SWIG
- } B;
- For C code, the fix now results in the use of 'struct A *' instead of just 'B *' in
- the generated code when wrapping members in A, but ultimately this does not matter, as
- they are the same thing.
- 2011-08-23: wsfulton
- Fix %newobject when used in conjunction with %feature("ref") as reported by Jan Becker. The
- code from the "ref" feature was not always being generated for the function specified by %newobject.
- Documentation for "ref" and "unref" moved from Python to the C++ chapter.
- 2011-08-22: szager
- [python] Fixed memory leak with --builtin option (bug 3385089).
- 2011-08-22: wsfulton
- [Lua] SF patch #3394339 from Torsten Landschoff - new option -nomoduleglobal to disable installing
- the module table into the global namespace. Require call also returns the module table instead
- of a string.
- 2011-08-09: xavier98
- Fix bug 3387394; Octave patches for 3.4.0 compatibility, etc. (from Karl Wette)
- 2011-08-04: wsfulton
- Add in $symname expansion for director methods.
- 2011-07-29: olly
- [PHP] Don't generate "return $r;" in cases where $r hasn't been set.
- This was basically harmless, except it generated a PHP E_NOTICE if
- the calling code had enabled them.
- 2011-07-26: wsfulton
- Fix scoping of forward class declarations nested within a class (for C++). Previously the symbol
- was incorrectly put into the outer namespace, eg
- namespace std {
- template<class Key, class T> struct map {
- class iterator;
- };
- }
- iterator was scoped as std::iterator, but now it is correctly std::map<Key, T>::iterator;
- Also fixed is %template and template parameters that are a typedef when the template contains
- default template parameters, eg:
- namespace Std {
- template<class Key, class T, class C = int> struct Map {
- typedef Key key_type;
- typedef T mapped_type;
- };
- }
- typedef double DOUBLE;
- %template(MM) Std::Map<int, DOUBLE>;
- All symbols within Map will be resolved correctly, eg key_type and mapped_type no matter if the
- wrapped code uses Std::Map<int, double> or std::Map<int, DOUBLE> or Std::Map<int, double, int>
- Also fixes bug #3378145 - regression introduced in 2.0.4 - %template using traits.
- 2011-07-20 szager
- [python] Fix closure for tp_call slot.
- 2011-07-16: wsfulton
- [python] Fix director typemap using PyObject *.
- 2011-07-13: szager
- [python] SF patch #3365908 - Add all template parameters to map support code in std_map.i
- 2011-07-13: szager
- [python] Fix for bug 3324753: %rename member variables with -builtin.
- 2011-07-01: wsfulton
- Fix some scope and symbol lookup problems when template default parameters are being
- used with typedef. For example:
- template<typename XX, typename TT = SomeType> struct Foo {
- typedef XX X;
- typedef TT T;
- };
- template<typename TT> struct UsesFoo {
- void x(typename Foo<TT>::T, typename Foo<TT>::X);
- };
- Also fixes use of std::vector<int>::size_type for Python as reported by Aubrey Barnard.
- 2011-06-23: olly
- [PHP] Fix director code to work when PHP is built with ZTS enabled,
- which is the standard configuration on Microsoft Windows.
- 2011-06-21: mutandiz
- [allegrocl]
- - various small tweaks and bug fixes.
- - Avoid name conflicts between smart pointer wrappers and the wrappers for
- the actual class.
- - Fix default typemaps for C bindings, which were incorrectly attempting to
- call non-existent destructors on user-defined types.
- - New feature, feature:aclmixins, for adding superclass to the foreign class
- wrappers.
- - Improve longlong typemaps.
- 2011-06-19: wsfulton
- Fix incorrect typemaps being used for a symbol within a templated type, eg:
- A<int>::value_type would incorrectly use a typemap for type A.
- 2011-06-18: olly
- [Tcl] Fix variable declarations in middle of blocks which isn't
- permitted in C90 (issue probably introduced in 2.0.3 by patch #3224663).
- Reported by Paul Obermeier in SF#3288586.
- 2011-06-17: wsfulton
- [Java] SF #3312505 - slightly easier to wrap char[] or char[ANY] with a Java byte[]
- using arrays_java.i.
- 2011-06-13: wsfulton
- [Ruby, Octave] SF #3310528 Autodoc fixes similar to those described below for Python.
- 2011-06-10: wsfulton
- [Python] Few subtle bugfixes in autodoc documentation generation,
- - Unnamed argument names fix for autodoc levels > 0.
- - Display of template types fixed for autodoc levels > 1.
- - Fix SF #3310528 - display of typedef structs for autodoc levels > 1.
- - Add missing type for self for autodoc levels 1 and 3.
- - autodoc levels 2 and 3 documented.
- - Minor tweaks to autodoc style to conform with PEP8.
- 2011-05-30: olly
- [PHP] Fix handling of directors when -prefix is used.
- 2011-05-24: olly
- [PHP] Fix handling of methods of classes with a virtual base class (SF#3124665).
- Version 2.0.4 (21 May 2011)
- ===========================
- 2011-05-19: wsfulton
- [Guile] Patch #3191625 fixing overloading of integer types.
- 2011-05-19: wsfulton
- [Perl] Patch #3260265 fixing overloading of non-primitive types and integers in
- Perl 5.12 and later.
- 2011-05-19: wsfulton
- [Ruby] Fix %import where one of the imported files %include one of the STL include
- files such as std_vector.i.
- 2011-05-17: wsfulton
- [Java] Apply #3289851 from Alan Harder to fix memory leak in directors when checking
- for pending exceptions.
- 2011-05-17: wsfulton
- [Tcl] Apply #3300072 from Christian Delbaere to fix multiple module loading not
- always sharing variables across modules.
- 2011-05-16: xavier98
- [octave] Fix an incompatibility with never versions of Octave. Case on Octave
- API >= 40 to handle rename of Octave_map to octave_map.
- [octave] Add support for y.__rop__(x) operators when x.__op__(y) doesn't exist.
- [octave] Allow global operators to be defined by SWIG-wrapped functions.
- [octave] Fix several bugs around module namespaces; add -global, -noglobal,
- -globals <name> command line options to the module.
- 2011-05-14: wsfulton
- %varargs when used with a numeric argument used to create an additional argument
- which was intended to provide a guaranteed sentinel value. This never worked and now
- the additional argument is not generated.
- 2011-05-13: wsfulton
- [python] Additional fixes for python3.2 support.
- 2011-05-07: szager
- [python] Fixed PyGetSetDescr for python3.2.
- 2011-05-05: wsfulton
- [Lua, Python, Tcl] C/C++ prototypes shown in error message when calling an overloaded
- method with incorrect arguments improved to show always show fully qualified name
- and if a const method.
- Also fixed other Lua error messages in generated code which weren't consistently
- using the fully qualified C++ name - requested by Gedalia Pasternak.
- 2011-04-29: szager
- Bug 2635919: Convenience method to convert std::map to a python dict.
- 2011-04-29: szager
- [Python] Fixed bug 2811549: return non-const iterators from STL
- methods begin(), end(), rbegin(), rend().
- 2011-04-25: szager
- [Python] Fixed bug 1498929: Access to member fields in map elements
- 2011-04-23: klickverbot
- [D] nspace: Correctly generate identifiers for base classes when
- not in split proxy mode.
- 2011-04-13: szager
- Fixed bug 3286333: infinite recursion with mutual 'using namespace' clauses.
- 2011-04-12: szager
- Fixed bug 1163440: vararg typemaps.
- 2011-04-12: szager
- Fixed bug #3285386: parse error from 'operator T*&()'. Added operator_pointer_ref
- test case to demonstrate.
- 2011-04-11: szager
- [Python] Fixed PyVarObject_HEAD_INIT to eliminate VC++ compiler errors about
- static initialization of struct members with pointers.
- 2011-04-11: wsfulton
- [Tcl] Apply patch #3284326 from Colin McDonald to fix some compiler warnings.
- 2011-04-11: szager
- [Python] Fixed PyVarObject_HEAD_INIT to eliminate VC++ compiler errors about
- static initialization of struct members with pointers.
- 2011-04-10: klickverbot
- [D] Fixed wrapping of enums that are type char, for example:
- enum { X = 'X'; } (this was already in 2.0.3 for C# and Java)
- 2011-04-10: klickverbot
- [D] nspace: Fixed referencing types in the root namespace when
- not in split proxy mode.
- 2011-04-09: szager
- [Python] Applied patch #1932484: migrate PyCObject to PyCapsule.
- 2011-04-09: szager
- [Python] Added preprocessor guards for python functions PyUnicode_AsWideChar and
- PySlice_GetIndices, which changed signatures in python3.2.
- 2011-04-07: wsfulton
- Fix wrapping of const array typedefs which were generating uncompilable code as
- reported by Karl Wette.
- 2011-04-03: szager
- [Python] Fixed the behavior of %pythonnondynamic to conform to the spec in Lib/pyuserdir.swg.
- 2011-04-03: szager
- [Python] Merged in the szager-python-builtin branch, adding the -builtin feature
- for python. The -builtin option may provide a significant performance gain
- in python wrappers. For full details and limitations, refer to Doc/Manual/Python.html.
- A small test suite designed to demonstrate the performance gain is in
- Examples/python/performance.
- 2011-04-01: wsfulton
- Add in missing wrappers for friend functions for some target languages, mostly
- the non-scripting languages like Java and C#.
- Version 2.0.3 (29 March 2011)
- =============================
- 2011-03-29: wsfulton
- [R] Apply patch #3239076 from Marie White fixing strings for R >= 2.7.0
- 2011-03-29: wsfulton
- [Tcl] Apply patch #3248280 from Christian Delbaere which adds better error messages when
- the incorrect number or type of arguments are passed to overloaded methods.
- 2011-03-29: wsfulton
- [Tcl] Apply patch #3224663 from Christian Delbaere.
- 1. Fix when function returns a NULL value, a "NULL" command will be created in the Tcl interpreter
- and calling this command will cause a segmentation fault.
- 2. Previous implementation searches for class methods using a linear search causing performance issues
- in wrappers for classes with many member functions. The patch adds a method hash table to classes and
- changes method name lookup to use the hash table instead of doing a linear search.
- 2011-03-26: wsfulton
- [C#, Java] SF bug #3195112 - fix wrapping of enums that are type char, for example:
- enum { X = 'X'; }
- 2011-03-21: vadz
- Allow setting PCRE_CFLAGS and PCRE_LIBS during configuration to override the values returned by
- pcre-config, e.g. to allow using a static version of PCRE library.
- 2011-03-17: wsfulton
- [UTL] Add missing headers in generated STL wrappers to fix compilation with gcc-4.6.
- 2011-03-17: wsfulton
- Fix regression introduced in swig-2.0.2 where filenames with spaces were not found
- when used with %include and %import. Reported by Shane Liesegang.
- 2011-03-15: wsfulton
- [UTL] Fix overloading when using const char[], problem reported by David Maxwell.
- Similarly for char[ANY] and const char[ANY].
- 2011-03-15: wsfulton
- [C#] Apply patch #3212624 fixing std::map Keys property.
- 2011-03-14: olly
- [PHP] Fix handling of overloaded methods/functions where some
- return void and others don't - whether this worked or not depended
- on the order they were encountered in (SF#3208299).
-
- 2011-03-13: klickverbot
- [D] Extended support for C++ namespaces (nspace feature).
- 2011-03-12: olly
- [PHP] Fix sharing of type information between multiple SWIG-wrapped
- modules (SF#3202463).
- 2011-03-09: wsfulton
- [Python] Fix SF #3194294 - corner case bug when 'NULL' is used as the default value
- for a primitive type parameter in a method declaration.
- 2011-03-07: olly
- [PHP] Don't use zend_error_noreturn() for cases where the function
- returns void - now this issue can only matter if you have a function
- or method which is directed and returns non-void.
- 2011-03-06: olly
- [PHP] Add casts to the typemaps for long long and unsigned long
- long to avoid issues when they are used with shorter types via
- %apply.
- 2011-03-02: wsfulton
- Templated smart pointers overloaded with both const and non const operator-> generated uncompilable
- code when the pointee was a class with either public member variables or static methods.
- Regression in 2.0.x reported as working in 1.3.40 by xantares on swig-user mailing list.
- Version 2.0.2 (20 February 2011)
- ================================
- 2011-02-19: wsfulton
- [PHP] Add missing INPUT, OUTPUT and INOUT typemaps in the typemaps.i library
- for primitive reference types as well as signed char * and bool *.
- 2011-02-19: olly
- [PHP] Address bug in PHP on some platforms/architectures which
- results in zend_error_noreturn() not being available using
- SWIG_ZEND_ERROR_NORETURN which defaults to zend_error_noreturn but
- can be overridden when building the module by passing
- -DSWIG_ZEND_ERROR_NORETURN=zend_error to the compiler. This may
- result in compiler warnings, but should at least allow a module
- to be built on those platforms/architectures (SF#3166423).
- 2011-02-18: wsfulton
- Fix #3184549 - vararg functions and function overloading when using the -fastdispatch option.
- 2011-02-18: olly
- [PHP] An overloaded method which can return an object or a
- primitive type no longer causes SWIG to segfault. Reported by Paul
- Colby in SF#3168531.
- 2011-02-18: olly
- [PHP] Fix invalid erase during iteration of std::map in generated
- director code. Reported by Cory Bennett in SF#3175820.
- 2011-02-17: wsfulton
- Preprocessing now warns if extra tokens appear after #else and #end.
- 2011-02-16: wsfulton
- Fix #1653092 Preprocessor does not error out when #elif is missing an expression.
- This and other cases of missing preprocessor expressions now result in an error.
- 2011-02-14: wsfulton
- [Ocaml] Apply patch #3151788 from Joel Reymont. Brings Ocaml support up to date
- (ver 3.11 and 3.12), including std::string.
- 2011-02-13: wsfulton
- [Ruby] Apply patch #3176274 from James Masters - typecheck typemap for time_t.
- 2011-02-13: wsfulton
- Apply patch #3171793 from szager - protected director methods failing when -fvirtual is used.
- 2011-02-13: wsfulton
- Fix #1927852 - #include directives don't preprocess the file passed to it. The fix is for
- #include with -importall or -includeall, %include and %import, for example:
- #define FILENAME "abc.h"
- %include FILENAME
- 2011-02-12: wsfulton
- Fix #1940536, overactive preprocessor which was expanding defined(...) outside of #if and #elif
- preprocessor directives.
- 2011-02-05: wsfulton
- [MzScheme] SF #2942899 Add user supplied documentation to help getting started with MzScheme.
- Update chapter name to MzScheme/Racket accounting for the rename of MzScheme to Racket.
- 2011-02-05: wsfulton
- [C#] SF #3085906 - Possible fix running test-suite on Mac OS X.
- 2011-02-05: wsfulton
- SF #3173367 Better information during configure about Boost prerequisite for running
- the test-suite.
- 2011-02-05: wsfulton
- SF #3127633 Fix infinite loop in recursive typedef resolution.
- 2011-02-04: wsfulton
- [R] SF #3168676 Fix %rename not working for member variables and methods.
- 2011-02-04: wsfulton
- [clisp] SF #3148200 Fix segfault parsing nested unions.
- 2011-02-01: wsfulton
- [C#] Directors - a call to a method being defined in the base class, not
- overridden in a subclass, but again overridden in a class derived from
- the first subclass was not being dispatched correctly to the most derived class.
- See director_alternating.i for an example.
- 2011-02-01: wsfulton
- [C#, Java] Any 'using' statements in the protected section of a class were previously
- ignored with director protected (dirprot) mode.
- 2011-01-30: wsfulton
- Fix overloading with const pointer reference (SWIGTYPE *const&) parameters for a
- number of scripting languages.
- 2011-01-17: wsfulton
- New warning for smart pointers if only some of the classes in the inheritance
- chain are marked as smart pointer, eg, %shared_ptr should be used for all classes
- in an inheritance hierarchy, so this new warning highlights code where this is
- not the case.
- example.i:12: Warning 520: Base class 'A' of 'B' is not similarly marked as a smart pointer.
- example.i:16: Warning 520: Derived class 'C' of 'B' is not similarly marked as a smart pointer.
- 2011-01-14: wsfulton
- Added some missing multi-argument typemaps: (char *STRING, size_t LENGTH) and
- (char *STRING, int LENGTH). Documentation for this updated. Java patch from
- Volker Grabsch.
- 2011-01-11: iant
- Require Go version 7077 or later.
- 2010-12-30: klickverbot
- [C#, D, Java] Check for collision of parameter names with target
- language keywords when generating the director glue code.
-
- The situation in which the generated could would previously be
- invalid is illustrated in the new 'director_keywords' test case.
- 2010-12-23: wsfulton
- [C#] Fix $csinput special variable not being expanded for csvarin typemaps
- when used for global variables. Reported by Vadim Zeitlin.
- 2010-12-14: wsfulton
- Fix $basemangle expansion in array typemaps. For example if type is int *[3],
- $basemangle expands to _p_int.
- 2010-12-07: iant
- Check that we are using a sufficiently new version of the
- 6g or 8g Go compiler during configure time. If not, disable Go.
- Minimum version is now 6707.
- *** POTENTIAL INCOMPATIBILITY ***
- 2010-12-06: wsfulton
- Fix #3127394 - use of network paths on Windows/MSys.
- 2010-11-18: klickverbot
- [D] Added the D language module.
- 2010-11-12: vadz
- Fix handling of multiple regex-using %renames attached to the same
- declaration. For example, now
- %rename("%(regex:/^Set(.*)/put\\1/)s") "";
- %rename("%(regex:/^Get(.*)/get\\1/)s") "";
- works as expected whereas before only the last anonymous rename was
- taken into account.
- 2010-10-17: drjoe
- [R] Fix failure in overloaded functions which was breaking
- QuantLib-SWIG
- 2010-10-14: olly
- [PHP] Allow compilation on non-conforming Microsoft C++ compilers
- which don't accept: return function_returning_void();
- Reported by Frank Vanden Berghen on the SWIG mailing list.
- 2010-10-12: wsfulton
- Fix unary scope operator (::) (global scope) regression introduced in 2.0.0, reported by
- Ben Walker. The mangled symbol names were incorrect, sometimes resulting in types being
- incorrectly treated as opaque types.
- Also fixes #2958781 and some other type problems due to better typedef resolution, eg
- std::vector<T *>::value_type didn't resolve to T * when it should have. The mangled type
- was incorrectly SWIGTYPE_std__vectorT_Test_p_std__allocatorT_Test_p_t_t__value_type and now
- it is correctly SWIGTYPE_p_Test.
- Version 2.0.1 (4 October 2010)
- ==============================
- 2010-10-03: wsfulton
- Apply patch #3066958 from Mikael Johansson to fix default smart pointer
- handling when the smart pointer contains both a const and non-const operator->.
- 2010-10-01: wsfulton
- Add -pcreversion option to display PCRE version information.
- 2010-10-01: olly
- [Ruby] Avoid segfault when a method node has no parentNode
- (SF#3034054).
- 2010-10-01: olly
- [Python] Allow reinitialisation to work with an embedded Python
- interpreter (patch from Jim Carroll in SF#3075178).
- 2010-09-28: wsfulton
- [C#] Apply patch from Tomas Dirvanauskas for std::map wrappers to avoid
- throwing exceptions with normal usage of iterators.
- 2010-09-27: olly
- [Python] Improve error message given when a parameter of the wrong
- type is passed to an overloaded method (SF#3027355).
- 2010-09-25: wsfulton
- Apply SF patch #3075150 - Java directors using static variables in
- named namespace.
- 2010-09-24: wsfulton
- More file and line error/warning reporting fixes where SWIG macros
- are used within {} braces (where the preprocessor expands macros),
- for example macros within %inline {...} and %fragment(...) {...}
- and nested structs.
- 2010-09-18: wsfulton
- More file and line error/warning reporting fixes for various inherited
- class problems.
- 2010-09-15: wsfulton
- A much improved debugging of SWIG source experience is now available and
- documented in the "Debugging SWIG" section in the Doc/Devel/internals.html
- file, including a swig.dbg support file for the gdb debugger.
- 2010-09-11: wsfulton
- Fix incorrect line number reporting in errors/warnings when a macro
- definition ends with '/' and it is not the end of a C comment.
- 2010-09-11: wsfulton
- Fix incorrect line number reporting in errors/warnings after parsing
- macro invocations with parameters given over more than one line.
- 2010-09-10: wsfulton
- Remove extraneous extra line in preprocessed output after including files
- which would sometimes lead to error/warning messages two lines after the
- end of the file.
- 2010-09-10: wsfulton
- Fix #2149523 - Incorrect line number reporting in errors after parsing macros
- containing C++ comments.
- 2010-09-08: olly
- [PHP] Fix handling of OUTPUT typemaps (Patch from Ryan in SF#3058394).
- 2010-09-03: wsfulton
- Fix erroneous line numbers in error messages for macro expansions, for example,
- the error message now points to instantiation of the macro, ie the last line here:
- #define MACRO2(a, b)
- #define MACRO1(NAME) MACRO2(NAME,2,3)
- MACRO1(abc)
- 2010-09-02: wsfulton
- Fix line numbers in error and warning messages for preprocessor messages within
- %inline, for example:
- %inline %{
- #define FOOBAR 1
- #define FOOBAR "hi"
- %}
- 2010-09-02: wsfulton
- Fix line numbers in error and warning messages which were cumulatively one
- less than they should have been after parsing each %include/%import - bug
- introduced in swig-1.3.32. Also fix line numbers in error and warning messages
- when new line characters appear between the %include / %import statement and
- the filename.
- 2010-08-30: wsfulton
- Fix line number and file name reporting for some macro preprocessor warnings.
- The line number of the macro argument has been corrected and the line number
- of the start of the macro instead of one past the end of the macro is used.
- Some examples:
- file.h:11: Error: Illegal macro argument name '..'
- file.h:19: Error: Macro 'DUPLICATE' redefined,
- file.h:15: Error: previous definition of 'DUPLICATE'.
- file.h:25: Error: Variable-length macro argument must be last parameter
- file.h:32: Error: Illegal character in macro argument name
- file.i:37: Error: Macro 'SIT' expects 2 arguments
- 2010-08-26: wsfulton
- Fix __LINE__ and __FILE__ expansion reported by Camille Gillot. Mostly this
- did not work at all. Also fixes SF #2822822.
- 2010-08-17: wsfulton
- [Perl] Fix corner case marshalling of doubles - errno was not being correctly
- set before calling strtod - patch from Justin Vallon - SF Bug #3038936.
- 2010-08-17: wsfulton
- Fix make distclean when some of the more obscure languages are detected by
- configure - fixes from Torsten Landschoff.
- 2010-07-28: wsfulton
- Restore configuring out of source for the test-suite since it broke in 1.3.37.
- As previously, if running 'make check-test-suite' out of source, it needs to be
- done by invoking configure with a relative path. Invoking configure with an
- absolute path will not work. Running the full 'make check' still needs to be
- done in the source tree.
- 2010-07-16: wsfulton
- Fix wrapping of function pointers and member function pointers when the function
- returns by reference.
- 2010-07-13: vadz
- Removed support for the old experimental "rxspencer" encoder and
- "[not]rxsmatch" in %rename (see the 01/16/2006 entry). The new and
- officially supported "regex" encoder and "[not]regexmatch" checks
- should be used instead (see the two previous entries). Please
- replace "%(rxspencer:[pat][subst])s" with "%(regex:/pat/subst/)s"
- when upgrading. Notice that you will also need to replace the back-
- references of form "@1" with the more standard "\\1" and may need to
- adjust your regular expressions syntax as the new regex encoder uses
- Perl-compatible syntax and not (extended) POSIX syntax as the old one.
- *** POTENTIAL INCOMPATIBILITY ***
- 2010-07-13: vadz
- Add "regexmatch", "regextarget" and "notregexmatch" which can be
- used to apply %rename directives to the declarations matching the
- specified regular expression only. The first two can be used
- interchangeably, both of the %renames below do the same thing:
- %rename("$ignore", regexmatch$name="Old$") "";
- %rename("$ignore", regextarget=1) "Old$";
- (namely ignore the declarations having "Old" suffix).
- "notregexmatch" restricts the match to only the declarations which
- do not match the regular expression, e.g. here is how to rename to
- lower case versions all declarations except those consisting from
- capital letters only:
- %rename("$(lowercase)s", notregexmatch$name="^[A-Z]+$") "";
- 2010-07-13: vadz
- Add the new "regex" encoder that can be used in %rename, e.g.
- %rename("regex:/(\\w+)_(.*)/\\2/") "";
- to remove any alphabetical prefix from all identifiers. The syntax
- of the regular expressions is Perl-like and PCRE library
- (http://www.pcre.org/) is used to implement this feature but notice
- that backslashes need to be escaped as usual inside C strings.
- Original patch from Torsten Landschoff.
- 2010-07-08: wsfulton
- Fix #3024875 - shared_ptr of classes with non-public destructors. This also fixes
- the "unref" feature when used on classes with non-public destructors.
- 2010-06-17: ianlancetaylor
- [Go] Add the Go language module.
- 2010-06-10: wsfulton
- [Lua] Fix SWIG_lua_isnilstring multiply defined when using multiple
- modules and wrapping strings. Patch from 'Number Cruncher'.
- 2010-06-10: olly
- [PHP] Fix directors to correctly call a method with has a
- different name in PHP to C++ (we were always using the C++ name
- in this case).
- 2010-06-03: wsfulton
- Fix uncompilable code when %rename results in two enum items
- with the same name. Reported by Vadim Zeitlin.
- Version 2.0.0 (2 June 2010)
- ===========================
- 2010-06-02: wsfulton
- [C#] Fix SWIG_STD_VECTOR_ENHANCED macro used in std::vector to work with
- types containing commas, for example:
- SWIG_STD_VECTOR_ENHANCED(std::pair< double, std::string >)
- 2010-06-01: wsfulton
- Add in std_shared_ptr.i for wrapping std::shared_ptr. Requires the %shared_ptr
- macro like in the boost_shared_ptr.i library. std::tr1::shared_ptr can also be
- wrapped if the following macro is defined:
- #define SWIG_SHARED_PTR_SUBNAMESPACE tr1
- %include <std_shared_ptr.i>
- shared_ptr is also documented in Library.html now.
- 2010-05-27: wsfulton
- Add the ability for $typemap special variable macros to call other $typemap
- special variable macros, for example:
- %typemap(cstype) CC "CC"
- %typemap(cstype) BB "$typemap(cstype, CC)"
- %typemap(cstype) AA "$typemap(cstype, BB)"
- void hah(AA aa);
- This also fixes C# std::vector containers of shared_ptr and %shared_ptr.
- Also added diagnostics for $typemap with -debug-tmsearch, for example, the
- above displays additional diagnostic lines starting "Containing: ":
- example.i:34: Searching for a suitable 'cstype' typemap for: AA aa
- Looking for: AA aa
- Looking for: AA
- Using: %typemap(cstype) AA
- Containing: $typemap(cstype, BB)
- example.i:31: Searching for a suitable 'cstype' typemap for: BB
- Looking for: BB
- Using: %typemap(cstype) BB
- Containing: $typemap(cstype, CC)
- example.i:29: Searching for a suitable 'cstype' typemap for: CC
- Looking for: CC
- Using: %typemap(cstype) CC
- 2010-05-26: olly
- Fix %attribute2ref not to produce a syntax error if the last
- argument (AccessorMethod) is omitted. Patch from David Piepgras
- in SF#2235756.
- 2010-05-26: olly
- [PHP] When using %throws or %catches, SWIG-generated PHP5 wrappers
- now throw PHP Exception objects instead of giving a PHP error of
- type E_ERROR.
- This change shouldn't cause incompatibility issues, since you can't
- set an error handler for E_ERROR, so previously PHP would just exit
- which also happens for unhandled exceptions. The benefit is you can
- now catch them if you want to.
- Fixes SF#2545578 and SF#2955522.
- 2010-05-25: olly
- [PHP] Add missing directorin typemap for const std::string &.
- Fixes SF#3006404 reported by t-Legiaw.
- 2010-05-23: wsfulton
- [C#] Fix #2957375 - SWIGStringHelper and SWIGExceptionHelper not always being
- initialized before use in .NET 4 as the classes were not marked beforefieldinit.
- A static constructor has been added to the intermediary class like this:
- %pragma(csharp) imclasscode=%{
- static $imclassname() {
- }
- %}
- If you had added your own custom static constructor to the intermediary class in
- the same way as above, you will have to modify your approach to use static variable
- initialization or define SWIG_CSHARP_NO_IMCLASS_STATIC_CONSTRUCTOR - See csharphead.swg.
- *** POTENTIAL INCOMPATIBILITY ***
- 2010-05-23: wsfulton
- Fix #2408232. Improve shared_ptr and intrusive_ptr wrappers for classes in an
- inheritance hierarchy. No special treatment is needed for derived classes.
- The proxy class also no longer needs to be specified, it is automatically
- deduced. The following macros are deprecated:
- SWIG_SHARED_PTR(PROXYCLASS, TYPE)
- SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE)
- and have been replaced by
- %shared_ptr(TYPE)
- Similarly for intrusive_ptr wrappers, the following macro is deprecated:
- SWIG_INTRUSIVE_PTR(PROXYCLASS, TYPE)
- SWIG_INTRUSIVE_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE)
- and have been replaced by
- %intrusive_ptr(TYPE)
- 2010-05-21: olly
- [PHP] Stop generating a bogus line of code in certain constructors.
- This was mostly harmless, but caused a PHP notice to be issued, if
- enabled (SF#2985684).
- 2010-05-18: wsfulton
- [Java] Fix member pointers on 64 bit platforms.
- 2010-05-14: wsfulton
- Fix wrapping of C++ enum boolean values reported by Torsten Landschoff:
- typedef enum { PLAY = true, STOP = false } play_state;
- 2010-05-14: olly
- [PHP] Fix wrapping of global variables which was producing
- uncompilable code in some cases.
- 2010-05-12: drjoe
- [R] Add two more changes from Wil Nolan. Get garbage
- collection to work. Implement newfree
- 2010-05-09: drjoe
- Fix bug reported by Wil Nolan change creation of string so
- that R 2.7.0+ can use char hashes
- 2010-05-07: wsfulton
- Apply patch #2955146 from Sergey Satskiy to fix expressions containing divide by
- operator in constructor initialization lists.
- 2010-05-05: wsfulton
- [R] Memory leak fix handling const std::string & inputs, reported by Will Nolan.
- 2010-05-01: wsfulton
- Typemap matching enhancement for non-default typemaps. Previously all
- qualifiers were stripped in one step, now they are stripped one at a time
- starting with the left most qualifier. For example, int const*const
- is first stripped to int *const then int *.
- *** POTENTIAL INCOMPATIBILITY ***
- 2010-04-25: bhy
- [Python] Fix #2985655 - broken constructor renaming.
- 2010-04-14: wsfulton
- Typemap fragments are now official and documented in Typemaps.html.
- 2010-04-09: wsfulton
- [Ruby] Fix #2048064 and #2408020.
- Apply Ubuntu patch to fix Ruby and std::vector wrappers with -minherit.
- https://bugs.launchpad.net/ubuntu/+source/swig1.3/+bug/522874
- 2010-04-09: wsfulton
- [Mzscheme] Apply Ubuntu patch to fix std::map wrappers:
- https://bugs.launchpad.net/ubuntu/+source/swig1.3/+bug/203876
- 2010-04-09: wsfulton
- [Python] Apply patch #2952374 - fix directors and the -nortti option.
- 2010-04-09: wsfulton
- [Lua] Fix #2887254 and #2946032 - SWIG_Lua_typename using wrong stack index.
- 2010-04-03: wsfulton
- [Python] Fix exceptions being thrown with the -threads option based on patch from Arto Vuori.
- Fixes bug #2818499.
- 2010-04-03: wsfulton
- Fix Makefile targets: distclean and maintainer-clean
- 2010-04-02: wsfulton
- [Lua] Fix char pointers, wchar_t pointers and char arrays so that nil can be passed as a
- valid value. Bug reported by Gedalia Pasternak.
- 2010-04-01: wsfulton
- Numerous subtle typemap matching rule fixes when using the default type. The typemap
- matching rules are to take a type and find the best default typemap (SWIGTYPE, SWIGTYPE* etc),
- then look for the next best match by reducing the chosen default type. The type deduction
- now follows C++ class template partial specialization matching rules.
- Below are the set of changes made showing the default type deduction
- along with the old reduced type and the new version of the reduced type:
- SWIGTYPE const &[ANY]
- new: SWIGTYPE const &[]
- old: SWIGTYPE (&)[ANY]
- SWIGTYPE *const [ANY]
- new: SWIGTYPE const [ANY]
- old: SWIGTYPE *[ANY]
- SWIGTYPE const *const [ANY]
- new: SWIGTYPE *const [ANY]
- old: SWIGTYPE const *[ANY]
- SWIGTYPE const *const &
- new: SWIGTYPE *const &
- old: SWIGTYPE const *&
- SWIGTYPE *const *
- new: SWIGTYPE const *
- old: SWIGTYPE **
- SWIGTYPE *const &
- new: SWIGTYPE const &
- old: SWIGTYPE *&
- Additionally, a const SWIGTYPE lookup is used now for any constant type. Some examples, where
- T is some reduced type, eg int, struct Foo:
- T const
- new: SWIGTYPE const
- old: SWIGTYPE
- T *const
- new: SWIGTYPE *const
- old: SWIGTYPE *
- T const[]
- new: SWIGTYPE const[]
- old: SWIGTYPE[]
- enum T const
- new: enum SWIGTYPE const
- old: enum SWIGTYPE
- T (*const )[]
- new: SWIGTYPE (*const )[]
- old: SWIGTYPE (*)[]
- Reminder: the typemap matching rules can now be seen for any types being wrapped by using
- either the -debug-tmsearch or -debug-tmused options.
- In practice this leads to some subtle matching rule changes and the majority of users
- won't notice any changes, except in the prime area of motivation for this change: Improve
- STL containers of const pointers and passing const pointers by reference. This is fixed
- because many of the STL containers use a type 'T const&' as parameters and when T is
- a const pointer, for example, 'K const*', then the full type is 'K const*const&'. This
- means that the 'SWIGTYPE *const&' typemaps now match when T is either a non-const or
- const pointer. Furthermore, some target languages incorrectly had 'SWIGTYPE *&' typemaps
- when these should have been 'SWIGTYPE *const&'. These have been corrected (Java, C#, Lua, PHP).
- *** POTENTIAL INCOMPATIBILITY ***
- 2010-03-13: wsfulton
- [Java] Some very old deprecated pragma warnings are now errors.
- 2010-03-13: wsfulton
- Improve handling of file names and directories containing double/multiple path separators.
- 2010-03-10: mutandiz (Mikel Bancroft)
- [allegrocl] Use fully qualified symbol name of cl::identity in emit_defun().
- 2010-03-06: wsfulton
- [Java] The intermediary JNI class modifiers are now public by default meaning these
- intermediary low level functions are now accessible by default from outside any package
- used. The proxy class pointer constructor and getCPtr() methods are also now public.
- These are needed in order for the nspace option to work without any other mods.
- The previous default of protected access can be restored using:
- SWIG_JAVABODY_METHODS(protected, protected, SWIGTYPE)
- %pragma(java) jniclassclassmodifiers = "class"
- 2010-03-06: wsfulton
- [C#] Added the nspace feature for C#. Documentation for the nspace feature is now available.
- 2010-03-04: wsfulton
- Added the nspace feature. This adds some improved namespace support. Currently only Java
- is supported for target languages, where C++ namespaces are automatically translated into
- Java packages. The feature only applies to classes,struct,unions and enums declared within
- a namespace. Methods and variables declared in namespaces still effectively have their
- namespaces flattened. Example usage:
- %feature(nspace) Outer::Inner1::Color;
- %feature(nspace) Outer::Inner2::Color;
- namespace Outer {
- namespace Inner1 {
- struct Color {
- ...
- };
- }
- namespace Inner2 {
- struct Color {
- ...
- };
- }
- }
- For Java, the -package option is also required when using the nspace feature. Say
- we use -package com.myco, the two classes can then be accessed as follows from Java:
- com.myco.Outer.Inner1.Color and com.myco.Outer.Inner2.Color.
- 2010-02-27: wsfulton
- [Python] Remove -dirvtable from the optimizations included by -O as it this option
- currently leads to memory leaks as reported by Johan Blake.
- 2010-02-27: wsfulton
- License code changes: SWIG Source is GPL-v3 and library code license is now clearer
- and is provided under a very permissive license. See https://www.swig.org/legal.html.
- 2010-02-13: wsfulton
- [Ruby] A few fixes for compiling under ruby-1.9.x including patch from 'Nibble'.
- 2010-02-13: wsfulton
- [Ruby] Apply patch from Patrick Bennett to fix RARRAY_LEN and RARRAY_PTR usage for Ruby 1.9.x
- used in various STL wrappers.
- 2010-02-13: wsfulton
- [C#, Java] Fix incorrect multiply defined symbol name error when an enum item
- and class name have the same name, as reported by Nathan Krieger. Example:
- class Vector {};
- namespace Text {
- enum Preference { Vector };
- }
- This also fixes other incorrect corner case target language symbol name clashes.
- 2010-02-11: wsfulton
- Add the -debug-lsymbols option for displaying the target language layer symbols.
- 2010-02-09: wsfulton
- Fix -MM and -MMD options on Windows. They were not omitting files in the SWIG library as
- they should be.
- 2010-02-08: wsfulton
- Fix #1807329 - When Makefile dependencies are being generated using the -M family of options
- on Windows, the file paths have been corrected to use single backslashes rather than double
- backslashes as path separators.
- 2010-02-06: wsfulton
- Fix #2918902 - language specific files not being generated in correct directory on
- Windows when using forward slashes for -o, for example:
- swig -python -c++ -o subdirectory/theinterface_wrap.cpp subdirectory/theinterface.i
- 2010-02-05: wsfulton
- Fix #2894405 - assertion when using -xmlout.
- 2010-01-28: wsfulton
- Fix typemap matching bug when a templated type has a typemap both specialized and not
- specialized. For example:
- template<typename T> struct XX { ... };
- %typemap(in) const XX & "..."
- %typemap(in) const XX< int > & "..."
- resulted in the 2nd typemap being applied for all T in XX< T >.
- 2010-01-22: wsfulton
- Fix #2933129 - typemaps not being found when the unary scope operator (::) is used to denote
- global scope, the typemap is now used in situations like this:
- struct X {};
- %typemap(in) const X & "..."
- void m(const ::X &);
- and this:
- struct X {};
- %typemap(in) const ::X & "..."
- void m(const X &);
- 2010-01-20: wsfulton
- Fix some unary scope operator (::) denoting global scope problems in the types generated
- into the C++ layer. Previously the unary scope operator was dropped in the generated code
- if the type had any sort of qualifier, for example when using pointers, references, like
- ::foo*, ::foo&, bar< ::foo* >.
- 2010-01-13: olly
- [PHP] Add datetime to the list of PHP predefined classes (patch
- from David Fletcher in SF#2931042).
- 2010-01-11: wsfulton
- Slight change to warning, error and diagnostic reporting. The warning number is no
- longer shown within brackets. This is to help default parsing of warning messages by
- other tools, vim on Unix in particular.
- Example original display using -Fstandard:
- example.i:20: Warning(401): Nothing known about base class 'B'. Ignored.
- New display:
- example.i:20: Warning 401: Nothing known about base class 'B'. Ignored.
- Also subtle fix to -Fmicrosoft format adding in missing space. Example original display:
- example.i(20): Warning(401): Nothing known about base class 'Base'. Ignored.
- New display:
- example.i(20) : Warning 401: Nothing known about base class 'Base'. Ignored.
- 2010-01-10: wsfulton
- Fix a few inconsistencies in reporting of file/line numberings including modifying
- the overload warnings 509, 512, 516, 474, 475 to now be two line warnings.
- 2010-01-10: wsfulton
- Modify -debug-tags output to use standard file name/line reporting so that editors
- can easily navigate to the appropriate lines.
- Was typically:
- . top . include . include (/usr/share/swig/temp/trunk/Lib/swig.swg:312)
- . top . include . include . include (/usr/share/swig/temp/trunk/Lib/swigwarnings.swg:39)
- now:
- /usr/share/swig/temp/trunk/Lib/swig.swg:312: . top . include . include
- /usr/share/swig/temp/trunk/Lib/swigwarnings.swg:39: . top . include . include . include
- 2010-01-03: wsfulton
- Fix missing file/line numbers for typemap warnings and in output from the
- -debug-tmsearch/-debug-tmused options.
- 2010-01-03: wsfulton
- Add typemaps used debugging option (-debug-tmused). When used each line displays
- the typemap used for each type for which code is being generated including the file
- and line number related to the type. This is effectively a condensed form of the
- -debug-tmsearch option. Documented in Typemaps.html.
- 2009-12-23: wsfulton
- Fix for %javaexception and directors so that all the appropriate throws clauses
- are generated. Problem reported by Peter Greenwood.
- 2009-12-20: wsfulton
- Add -debug-tmsearch option for debugging the typemap pattern matching rules.
- Documented in Typemaps.html.
- 2009-12-12: wsfulton
- [Octave] Remove the -api option and use the new OCTAVE_API_VERSION_NUMBER
- macro provided in the octave headers for determining the api version instead.
- 2009-12-04: olly
- [Ruby] Improve support for Ruby 1.9 under GCC. Addresses part of
- SF#2859614.
- 2009-12-04: olly
- Fix handling of modulo operator (%) in constant expressions
- (SF#2818562).
- 2009-12-04: olly
- [PHP] "empty" is a reserved word in PHP, so rename empty() method
- on STL classes to "is_empty()" (previously this was automatically
- renamed to "c_empty()").
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-12-03: olly
- [PHP] Add typemaps for long long and unsigned long long, and for
- pointer to method.
- 2009-12-02: olly
- [PHP] Fix warning and rename of reserved class name to be case
- insensitive.
- 2009-12-01: wsfulton
- Revert support for %extend and memberin typemaps added in swig-1.3.39. The
- memberin typemaps are ignored again for member variables within a %extend block.
- Documentation inconsistency reported by Torsten Landschoff.
- 2009-11-29: wsfulton
- [Java, C#] Fix generated quoting when using %javaconst(1)/%csconst(1) for
- static const char member variables.
- %javaconst(1) A;
- %csconst(1) A;
- struct X {
- static const char A = 'A';
- };
- 2009-11-26: wsfulton
- [Java, C#] Fix %javaconst(1)/%csconst(1) for static const member variables to
- use the actual constant value if it is specified, rather than the C++ code to
- access the member.
- %javaconst(1) EN;
- %csconst(1) EN;
- struct X {
- static const int EN = 2;
- };
- 2009-11-23: wsfulton
- C++ nested typedef classes can now be handled too, for example:
- struct Outer {
- typedef Foo { } FooTypedef1, FooTypedef2;
- };
- 2009-11-18: wsfulton
- The wrappers for C nested structs are now generated in the same order as declared
- in the parsed code.
- 2009-11-18: wsfulton
- Fix #491476 - multiple declarations of nested structs, for example:
- struct Outer {
- struct {
- int val;
- } inner1, inner2, *inner3, inner4[1];
- } outer;
- 2009-11-17: wsfulton
- Fix parsing of enum declaration and initialization, for example:
- enum ABC {
- a,
- b,
- c
- } A = a, *pC = &C, array[3] = {a, b, c};
- 2009-11-17: wsfulton
- Fix parsing of struct declaration and initialization, for example:
- struct S {
- int x;
- } instance = { 10 };
- 2009-11-15: wsfulton
- Fix #1960977 - Syntax error parsing derived nested class declaration and member
- variable instance.
- 2009-11-14: wsfulton
- Fix #2310483 - function pointer typedef within extern "C" block.
- 2009-11-13: wsfulton
- Fix usage of nested template classes within templated classes so that compilable code
- is generated.
- 2009-11-13: olly
- [php] Fix place where class prefix (as specified with -prefix)
- wasn't being used. Patch from gverbruggen in SF#2892647.
- 2009-11-12: wsfulton
- Fix usage of nested template classes so that compilable code is generated - the nested
- template class is now treated like a normal nested classes, that is, as an opaque type
- unless the nestedworkaround feature is used.
- 2009-11-12: wsfulton
- Replace SWIGWARN_PARSE_NESTED_CLASS with SWIGWARN_PARSE_NAMED_NESTED_CLASS and
- SWIGWARN_PARSE_UNNAMED_NESTED_CLASS for named and unnamed nested classes respectively.
- Named nested class ignored warnings can now be suppressed by name using %warnfilter, eg:
- %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::Inner;
- but clearly unnamed nested classes cannot and the global suppression is still required, eg:
- #pragma SWIG nowarn=SWIGWARN_PARSE_UNNAMED_NESTED_CLASS
- 2009-11-11: wsfulton
- Added the nestedworkaround feature as a way to use the full functionality of a nested class
- (C++ mode only). It removes the nested class from SWIG's type information so it is as if SWIG
- had never parsed the nested class. The documented nested class workarounds using a global
- fake class stopped working when SWIG treated the nested class as an opaque pointer, and
- this feature reverts this behaviour. The documentation has been updated with details of how
- to use and implement it, see the "Nested classes" section in SWIGPlus.html.
- 2009-11-11: wsfulton
- There were a number of C++ cases where nested classes/structs/unions were being handled
- as if C code was being parsed which would oftentimes lead to uncompilable code as an
- attempt was made to wrap the nested structs like it is documented for C code. Now all
- nested structs/classes/unions are ignored in C++ mode, as was always documented. However,
- there is an improvement as usage of nested structs/classes/unions is now always treated
- as an opaque type by default, resulting in generated code that should always compile.
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-11-09: drjoe
- Fix R for -fcompact and add std_map.i
- 2009-11-08: wsfulton
- Fix inconsistency for nested structs/unions/classes. Uncompilable code was being
- generated when inner struct and union declarations were used as types within the
- inner struct. The inner struct/union is now treated as a forward declaration making the
- behaviour the same as an inner class. (C++ code), eg:
- struct Outer {
- struct InnerStruct { int x; };
- InnerStruct* getInnerStruct();
- };
- 2009-11-08: wsfulton
- Ignored nested class/struct warnings now display the name of the ignored class/struct.
- 2009-11-07: wsfulton
- Bug #1514681 - Fix nested template classes within a namespace generated uncompilable
- code and introduced strange side effects to other wrapper code especially code
- after the nested template class. Note that nested template classes are still ignored.
- 2009-11-07: wsfulton
- Add new debug options:
- -debug-symtabs - Display symbol tables information
- -debug-symbols - Display target language symbols in the symbol tables
- -debug-csymbols - Display C symbols in the symbol tables
- 2009-11-03: wsfulton
- Fix some usage of unary scope operator (::) denoting global scope, for example:
- namespace AA { /* ... */ }
- using namespace ::AA;
- and bug #1816802 - SwigValueWrapper should be used:
- struct CC {
- CC(int); // no default constructor
- };
- ::CC x();
- and in template parameter specializations:
- struct S {};
- template <typename T> struct X { void a() {} };
- template <> struct X<S> { void b() {} };
- %template(MyTConcrete) X< ::S >;
- plus probably some other corner case usage of ::.
- 2009-11-02: olly
- [Python] Fix potential memory leak in initialisation code for the
- generated module.
- 2009-10-23: wsfulton
- Fix seg fault when using a named nested template instantiation using %template(name)
- within a class. A warning that these are not supported is now issued plus processing
- continues as if no name was given.
- 2009-10-20: wsfulton
- [Python] Fix std::vector<const T*>. This would previously compile, but not run correctly.
- 2009-10-20: wsfulton
- Fixed previously fairly poor template partial specialization and explicit
- specialization support. Numerous bugs in this area have been fixed including:
- - Template argument deduction implemented for template type arguments, eg this now
- works:
- template<typename T> class X {};
- template<typename T> class X<T *> {};
- %template(X1) X<const int *>; // Chooses T * specialization
- and more complex cases with multiple parameters and a mix of template argument
- deduction and explicitly specialised parameters, eg:
- template <typename T1, typename T2> struct TwoParm { void a() {} };
- template <typename T1> struct TwoParm<T1 *, int *> { void e() {} };
- %template(E) TwoParm<int **, int *>;
- Note that the primary template must now be in scope, like in C++, when
- an explicit or partial specialization is instantiated with %template.
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-09-14: wsfulton
- [C#] Add %csattributes for adding C# attributes to enum values, see docs for example.
- 2009-09-11: wsfulton
- Fix memmove regression in cdata.i as reported by Adriaan Renting.
- 2009-09-07: wsfulton
- Fix constant expressions containing <= or >=.
- 2009-09-02: wsfulton
- The following operators in constant expressions now result in type bool for C++
- wrappers and remain as type int for C wrappers, as per each standard:
- && || == != < > <= >= (Actually the last 4 are still broken). For example:
- #define A 10
- #define B 10
- #define A_EQ_B A == B // now wrapped as type bool for C++
- #define A_AND_B A && B // now wrapped as type bool for C++
- 2009-09-02: wsfulton
- Fix #2845746. true and false are now recognised keywords (only when wrapping C++).
- Constants such as the following are now wrapped (as type bool):
- #define FOO true
- #define BAR FOO && false
- Version 1.3.40 (18 August 2009)
- ===============================
- 2009-08-17: olly
- [Perl] Add "#undef do_exec" to our clean up of Perl global
- namespace pollution.
- 2009-08-17: olly
- [PHP] Fix to wrap a resource returned by __get() in a PHP object (SF#2549217).
- 2009-08-17: wsfulton
- Fix #2797485 After doing a 'make clean', install fails if yodl2man or yodl2html
- is not available.
- 2009-08-16: wsfulton
- [Octave] Caught exceptions display the type of the C++ exception instead of the
- generic "c++-side threw an exception" message.
- 2009-08-16: wsfulton
- [Java] When %catches is used, fix so that any classes specified in the "throws"
- attribute of the "throws" typemap are generated into the Java method's throws clause.
- 2009-08-16: wsfulton
- [C#] Fix exception handling when %catches is used, reported by Juan Manuel Alvarez.
- 2009-08-15: wsfulton
- Fix %template seg fault on some cases of overloading the templated method.
- Bug reported by Jan Kupec.
- 2009-08-15: wsfulton
- [Ruby] Add numerous missing wrapped methods for std::vector<bool> specialization
- as reported by Youssef Jones.
- 2009-08-14: wsfulton
- [Perl] Add SWIG_ConvertPtrAndOwn() method into the runtime for smart pointer
- memory ownership control. shared_ptr support still to be added. Patch from
- David Fletcher.
- 2009-08-14: olly
- [PHP] PHP5 now wraps static member variables as documented.
- 2009-08-14: olly
- [PHP] Update the PHP "class" example to work with PHP5 and use
- modern wrapping features.
- 2009-08-13: wsfulton
- [PHP] std::vector wrappers overhaul. They no longer require the
- specialize_std_vector() macro. Added wrappers for capacity() and reserve().
- 2009-08-13: wsfulton
- [PHP] Add const reference typemaps. const reference primitive types are
- now passed by value rather than pointer like the other target languages.
- Fixes SF#2524029.
- 2009-08-08: wsfulton
- [Python] More user friendly AttributeError is raised when there are
- no constructors generated for the proxy class in the event that the
- class is abstract - the error message is now
- "No constructor defined - class is abstract" whereas if there are no
- public constructors for any other reason and the class is not abstract,
- the message remains
- "No constructor defined".
- [tcl] Similarly for tcl when using -itcl.
- 2009-08-04: olly
- [PHP] Fix generated code to work with PHP 5.3.
- 2009-08-04: vmiklos
- [PHP] Various mathematical functions (which would conflict
- with the built-in PHP ones) are now automatically handled by
- adding a 'c_' prefix.
- 2009-08-03: wsfulton
- [C#] The std::vector<T> implementation is improved and now uses $typemap such
- that the proxy class for T no longer has to be specified in some macros
- for correct C# compilation; the following macros are deprecated, where
- CSTYPE was the C# type for the C++ class CTYPE:
- SWIG_STD_VECTOR_SPECIALIZE_MINIMUM(CSTYPE, CTYPE)
- usage should be removed altogether
- SWIG_STD_VECTOR_SPECIALIZE(CSTYPE, CTYPE)
- should be replaced with:
- SWIG_STD_VECTOR_ENHANCED(CTYPE)
- Some more details in csharp/std_vector.i
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-07-31: olly
- [Python] Fix indentation so that we give a useful error if the
- module can't be loaded. Patch from Gaetan Lehmann in SF#2829853.
- 2009-07-29: wsfulton
- Add $typemap(method, typelist) special variable macro. This allows
- the contents of a typemap to be inserted within another typemap.
- Fully documented in Typemaps.html.
- 2009-07-29: vmiklos
- [PHP] Static member variables are now prefixed with the
- class name. This allows static member variables with the
- same name in different classes.
- 2009-07-29: olly
- [Python] Add missing locks to std::map wrappers. Patch from
- Paul Hampson in SF#2813836.
- 2009-07-29: olly
- [PHP] Fix memory leak in PHP OUTPUT typemaps. Reported by Hitoshi
- Amano in SF#2826322.
- 2009-07-29: olly
- [PHP] Fix memory leak in PHP resource destructor for classes
- without a destructor and non-class types. Patch from Hitoshi Amano
- in SF#2825303.
- 2009-07-28: olly
- [PHP] Update warnings about clashes between identifiers and PHP
- keywords and automatic renaming to work with the PHP5 class
- wrappers. Fixes SF#1613679.
- 2009-07-28: vmiklos
- [PHP] If a member function is not public but it has a base
- which is public, then now a warning is issued and the member
- function will be public, as PHP requires this.
- 2009-07-21: vmiklos
- [PHP] Director support added.
- 2009-07-15: olly
- [Perl] Don't specify Perl prototype "()" for a constructor with a
- different name to the class, as such constructors can still take
- parameters.
- 2009-07-12: xavier98
- [Octave] Add support for Octave 3.2 API
- 2009-07-05: olly
- [PHP] Update the list of PHP keywords - "cfunction" is no longer a
- keyword in PHP5 and PHP 5.3 added "goto", "namespace", "__DIR__",
- and "__NAMESPACE__".
- 2009-07-03: olly
- [Tcl] To complement USE_TCL_STUBS, add support for USE_TK_STUBS
- and SWIG_TCL_STUBS_VERSION. Document all three in the Tcl chapter
- of the manual. Based on patch from SF#2810380 by Christian
- Gollwitzer.
- 2009-07-02: vmiklos
- [PHP] Added factory.i for PHP, see the li_factory testcase
- for more info on how to use it.
- 2009-07-02: wsfulton
- Fix -Wallkw option as reported by Solomon Gibbs.
- 2009-07-02: wsfulton
- Fix syntax error when a nested struct contains a comment containing a * followed
- eventually by a /. Regression from 1.3.37, reported by Solomon Gibbs.
- 2009-07-01: vmiklos
- [PHP] Unknown properties are no longer ignored in proxy
- classes.
- 2009-07-01: vmiklos
- [PHP] Fixed %newobject behaviour, previously any method
- marked with %newobject was handled as a constructor.
- 2009-06-30: olly
- [Ruby] Undefine close and connect macros defined by Ruby API
- headers as we don't need them and they can clash with C++ methods
- being wrapped. Patch from Vit Ondruch in SF#2814430.
- 2009-06-26: olly
- [Ruby] Fix to handle FIXNUM values greater than MAXINT passed for a
- double parameter.
- 2009-06-24: wsfulton
- Fix wrapping methods with default arguments and the compactdefaultargs feature
- where a class is passed by value and is assigned a default value. The SwigValueWrapper
- template workaround for a missing default constructor is no longer used as the code
- generated does not call the default constructor.
- 2009-06-16: wsfulton
- [Java,C#] Fix enum marshalling when %ignore is used on one of the enum items.
- Incorrect enum values were being passed to the C++ layer or compilation errors resulted.
- 2009-06-02: talby
- [Perl] Resolved reference.i overload support problem
- identified by John Potowsky.
- 2009-05-26: wsfulton
- [C#] Improved std::map wrappers based on patch from Yuval Baror. The C# proxy
- now implements System.Collections.Generic.IDictionary<>.
- These std:map wrappers have a non-backwards compatible overhaul to make them
- like a .NET IDictionary. Some method names have changed as following:
- set -> setitem (use this[] property now)
- get -> getitem (use this[] property now)
- has_key -> ContainsKey
- del -> Remove
- clear -> Clear
- The following macros used for std::map wrappers are deprecated and will no longer work:
- specialize_std_map_on_key
- specialize_std_map_on_value
- specialize_std_map_on_both
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-05-20: vmiklos
- [PHP] Add the 'thisown' member to classes. The usage of it
- is the same as the Python thisown one: it's 1 by default and
- you can set it to 0 if you want to prevent freeing it. (For
- example to prevent a double free.)
- 2009-05-14: bhy
- [Python] Fix the wrong pointer value returned by SwigPyObject_repr().
- 2009-05-13: mutandiz (Mikel Bancroft)
- [allegrocl] Minor tweak when wrapping in -nocwrap mode.
- 2009-05-11: wsfulton
- [C#] Improved std::vector wrappers on the C# proxy side from Yuval Baror. These
- implement IList<> instead of IEnumerable<> where possible.
- 2009-04-29: wsfulton
- [Java, C#] Add the 'notderived' attribute to the javabase and csbase typemaps.
- When this attribute is set, the typemap will not apply to classes that are derived
- from a C++ base class, eg
- %typemap(csbase, notderived="1") SWIGTYPE "CommonBase"
- 2009-04-29: olly
- [Python] Don't attempt to acquire the GIL in situations where we
- know that it will already be locked. This avoids some dead-locks
- with mod_python (due to mod_python bugs which are apparently
- unlikely to ever be fixed), and results in smaller wrappers which
- run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04,
- the stripped wrapper library was 11% smaller and ran 2.7% faster).
- 2009-04-21: wsfulton
- [C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation.
- 2009-04-09: wsfulton
- Fix #2746858 - C macro expression using floating point numbers
- 2009-03-30: olly
- [PHP] The default out typemap for char[ANY] now returns the string up to a
- zero byte, or the end of the array if there is no zero byte. This
- is the same as Python does, and seems more generally useful than
- the previous behaviour of returning the whole contents of the array
- including any zero bytes. If you want the old behaviour, you can provide
- your own typemap to do this:
- %typemap(out) char [ANY]
- %{
- RETVAL_STRINGL($1, $1_dim0, 1);
- %}
- Version 1.3.39 (21 March 2009)
- ==============================
- 2009-03-19: bhy
- [Python] Fix the memory leak related to Python 3 unicode and C char* conversion,
- which can be shown in the following example before this fix:
-
- from li_cstring import *
- i=0
- while True:
- i += 1
- n = str(i)*10
- test3(n)
- This fix affected SWIG_AsCharPtrAndSize() so you cannot call this function with
- a null alloc and non-null cptr argument in Python 3, otherwise a runtime error
- will be raised.
- 2009-03-18: wsfulton
- [C#] std::vector<T> wrapper improvements for .NET 2 and also providing the
- necessary machinery to use the std::vector<T> wrappers with more advanced features such
- as LINQ - the C# proxy class now derives from IEnumerable<>. The default is now to
- generate code requiring .NET 2 as a minimum, although the C# code can be compiled
- for .NET 1 by defining the SWIG_DOTNET_1 C# preprocessor constant. See the
- std_vector.i file for more details.
- *** POTENTIAL INCOMPATIBILITY ***
- 2009-03-12: wsfulton
- [Ruby] Fix #2676738 SWIG generated symbol name clashes.
- 2009-03-01: bhy
- [Python] Some fixes for Python 3.0.1 and higher support. In 3.0.1, the C API function
- PyObject_Compare is removed, so PyObject_RichCompareBool is used for replacement.
- Struct initilization of SwigPyObject and SwigPyObject_as_number changed to reflect
- the drop of tp_compare and nb_long.
- 2009-03-01: bhy
- [Python] Fix SF#2583160. Now the importer in Python shadow wrapper take care of the
- case that module already imported at other place.
- 2009-02-28: bhy
- [Python] Fix SF#2637352. Move struct declaration of SWIG_module in pyinit.swg before
- the method calls, since some C compiler don't allow declaration in middle of function
- body.
- 2009-02-21: wsfulton
- [Allegrocl] Fix seg fault wrapping some constant variable (%constant) types.
- 2009-02-20: wsfulton
- [CFFI] Fix seg faults when for %extend and using statements.
- 2009-02-20: wsfulton
- Fix SF #2605955: -co option which broke in 1.3.37.
- 2009-02-20: wsfulton
- New %insert("begin") section added. Also can be used as %begin. This is a new
- code section reserved entirely for users and the code within the section is generated
- at the top of the C/C++ wrapper file and so provides a means to put custom code
- into the wrapper file before anything else that SWIG generates.
- 2009-02-17: wsfulton
- 'make clean-test-suite' will now run clean on ALL languages. Previously it only
- ran the correctly configured languages. This way it is now possible to clean up
- properly after running 'make partialcheck-test-suite'.
- 2009-02-14: wsfulton
- Extend attribute library support for structs/classes and the accessor functions use
- pass/return by value semantics. Two new macros are available and usage is identical
- to %attribute. These are %attributeval for structs/classes and %attributestring for
- string classes, like std::string. See attribute.swg for more details.
- 2009-02-13: wsfulton
- Add support for %extend and memberin typemaps. Previously the memberin typemaps were
- ignored for member variables within a %extend block.
- 2009-02-12: wsfulton
- Remove unnecessary temporary variable when wrapping return values that are references.
- Example of generated code for wrapping:
- struct XYZ {
- std::string& refReturn();
- };
- used to be:
- std::string *result = 0 ;
- ...
- {
- std::string &_result_ref = (arg1)->refReturn();
- result = (std::string *) &_result_ref;
- }
- Now it is:
- std::string *result = 0 ;
- ...
- result = (std::string *) &(arg1)->refReturn();
- 2009-02-08: bhy
- Change the SIZE mapped by %pybuffer_mutable_binary and %pybuffer_binary in pybuffer.i from
- the length of the buffer to the number of items in the buffer.
- 2009-02-08: wsfulton
- Fix %feature not working for conversion operators, reported by Matt Sprague, for example:
- %feature("cs:methodmodifiers") operator bool "protected";
- 2009-02-07: wsfulton
- [MzScheme] Apply #2081967 configure changes for examples to build with recent PLT versions.
- Also fixes Makefile errors building SWIG executable when mzscheme package is installed
- (version 3.72 approx and later).
- 2009-02-04: talby
- [Perl] Fix SF#2564192 reported by David Kolovratnk.
- SWIG_AsCharPtrAndSize() now handles "get" magic.
- Version 1.3.38 (31 January 2009)
- ================================
- 2009-01-31: bhy
- [Python] Fix SF#2552488 reported by Gaetan Lehmann. Now %pythonprepend
- and %pythonappend have correct indentation.
- 2009-01-31: bhy
- [Python] Fix SF#2552048 reported by Gaetan Lehmann. The parameter list
- of static member function in generated proxy code should not have the
- 'self' parameter.
- 2009-01-29: wsfulton
- Fix regression introduced in 1.3.37 where the default output directory
- for target language specific files (in the absence of -outdir) was no
- longer the same directory as the generated c/c++ file.
- 2009-01-28: wsfulton
- [Java, C#] Fix proxy class not being used when the global scope operator
- was used for parameters passed by value. Reported by David Piepgrass.
- 2009-01-15: wsfulton
- [Perl] Fix seg fault when running with -v option, reported by John Ky.
- Version 1.3.37 (13 January 2009)
- ================================
- 2009-01-13: mgossage
- [Lua] Added contract support for requiring that unsigned numbers are >=0
- Rewrote much of Examples/Lua/embed3.
- Added a lot to the Lua documentation.
- 2009-01-13: wsfulton
- Fix compilation error when using directors on protected virtual overloaded
- methods reported by Sam Hendley.
- 2009-01-12: drjoe
- [R] Fixed handling of integer arrays
- 2009-01-10: drjoe
- [R] Fix integer handling in r to deal correctly with signed
- and unsigned issues
- 2009-01-10: wsfulton
- Patch #1992756 from Colin McDonald - %contract not working for classes
- in namespace
- 2009-01-05: olly
- Mark SWIGPERL5, SWIGPHP5, and SWIGTCL8 as deprecated in the source
- code and remove documentation of them.
- 2008-12-30: wsfulton
- Bug #2430756. All the languages now define a macro in the generated C/C++
- wrapper file indicating which language is being wrapped. The macro name is the
- same as those defined when SWIG is run, eg SWIGJAVA, SWIGOCTAVE, SWIGCSHARP etc
- and are listed in the "Conditional Compilation" section in the documentation.
- 2008-12-23: wsfulton
- [Java] Fix #2153773 - %nojavaexception was clearing the exception feature
- instead of disabling it. Clearing checked Java exceptions also didn't work.
- The new %clearjavaexception can be used for clearing the exception feature.
- 2008-12-22: wsfulton
- Fix #2432801 - Make SwigValueWrapper exception safe for when copy constructors
- throw exceptions.
- 2008-12-21: wsfulton
- Apply patch #2440046 which fixes possible seg faults for member and global
- variable char arrays when the strings are larger than the string array size.
- 2008-12-20: wsfulton
- The ccache compiler cache has been adapted to work with SWIG and
- named ccache-swig. It now works with C/C++ compilers as well as SWIG
- and can result in impressive speedups when used to recompile unchanged
- code with either a C/C++ compiler or SWIG. Documentation is in CCache.html
- or the installed ccache-swig man page.
- 2008-12-12: wsfulton
- Apply patch from Kalyanov Dmitry which fixes parsing of nested structs
- containing comments.
- 2008-12-12: wsfulton
- Fix error message in some nested struct and %inline parsing error situations
- such as unterminated strings and comments.
- 2008-12-07: olly
- [PHP] Fix warnings when compiling generated wrapper with GCC 4.3.
- 2008-12-06: wsfulton
- [PHP] Deprecate %pragma(php4). Please use %pragma(php) instead.
- The following two warnings have been renamed:
- WARN_PHP4_MULTIPLE_INHERITANCE -> WARN_PHP_MULTIPLE_INHERITANCE
- WARN_PHP4_UNKNOWN_PRAGMA -> WARN_PHP_UNKNOWN_PRAGMA
- *** POTENTIAL INCOMPATIBILITY ***
- 2008-12-04: bhy
- [Python] Applied patch SF#2158938: all the SWIG symbol names started with Py
- are changed, since they are inappropriate and discouraged in Python
- documentation (from http://www.python.org/doc/2.5.2/api/includes.html):
- "All user visible names defined by Python.h (except those defined by
- the included standard headers) have one of the prefixes "Py" or "_Py".
- Names beginning with "_Py" are for internal use by the Python implementation
- and should not be used by extension writers. Structure member names do
- not have a reserved prefix.
- Important: user code should never define names that begin with "Py" or "_Py".
- This confuses the reader, and jeopardizes the portability of the user
- code to future Python versions, which may define additional names beginning
- with one of these prefixes."
- Here is a brief list of what changed:
- PySwig* -> SwigPy*
- PyObject_ptr -> SwigPtr_PyObject
- PyObject_var -> SwigVar_PyObject
- PySequence_Base, PySequence_Cont, PySequence_Ref ->
- SwigPySequence_Base, SwigPySequence_Cont, SwigPySequence_Ref
- PyMap* -> SwigPyMap*
- We provided a pyname_compat.i for backward compatibility. Users whose code having
- these symbols and do not want to change it could simply include this file
- at front of your code. A better solution is to run the converting tool on
- your code, which has been put in SWIG's SVN trunk (Tools/pyname_patch.py) and
- you can download it here:
- https://swig.svn.sourceforge.net/svnroot/swig/trunk/Tools/pyname_patch.py
- *** POTENTIAL INCOMPATIBILITY ***
- 2008-12-02: wsfulton
- [Python] Apply patch #2143727 from Serge Monkewitz to fix importing base classes
- when the package option is specified in %module and that module is %import'ed.
- 2008-11-28: wsfulton
- [UTL] Fix #2080497. Some incorrect acceptance of types in the STL, eg a double * element
- passed into a vector<int *> constructor would be accepted, but the ensuing behaviour
- was undefined. Now the type conversion correctly raises an exception.
- 2008-11-24: wsfulton
- Add -outcurrentdir option. This sets the default output directory to the current
- directory instead of the path specified by the input file. This option enables
- behaviour similar to c/c++ compilers. Note that this controls the output directory,
- but only in the absence of the -o and/or -outdir options.
- 2008-11-23: wsfulton
- [ruby] Apply patch #2263850 to fix ruby/file.i ... rubyio.h filename change in
- ruby 1.9.
- 2008-11-23: wsfulton
- Apply patch #2319790 from Johan Hake to fix shared_ptr usage in std::tr1 namespace.
- 2008-11-21: wsfulton
- The use of the include path to find the input file is now deprecated.
- This makes the behaviour of SWIG the same as C/C++ compilers in preparation
- for use with ccache.
- 2008-11-16: wsfulton
- Fix -nopreprocess option to:
- - correctly report file names in warning and error messages.
- - use the original input filename that created the preprocessed output when
- determining the C++ wrapper file name (in the absence of -o). Previously
- the name of the input file containing the preprocessed output was used.
- 2008-11-11: wsfulton
- [Java] Add patch #2152691 from MATSUURA Takanori which fixes compiles using the
- Intel compiler
- 2008-11-01: wsfulton
- Add patch #2128249 from Anatoly Techtonik which corrects the C/C++ proxy
- class being reported for Python docstrings when %rename is used.
- 2008-11-01: wsfulton
- Add the strip encoder patch from Anatoly Techtonik #2130016. This enables an
- easy way to rename symbols by stripping a commonly used prefix in all the
- function/struct names. It works in the same way as the other encoders, such as
- title, lower, command etc outlined in CHANGES file dated 12/30/2005. Example
- below will rename wxAnotherWidget to AnotherWidget and wxDoSomething to
- DoSomething:
- %rename("%(strip:[wx])s") "";
- struct wxAnotherWidget {
- void wxDoSomething();
- };
- 2008-09-26: mutandiz
- [allegrocl]
- Lots of test-suite work.
- - Fix ordering of wrapper output and %{ %} header output.
- - Fix declarations of local vars in C wrappers.
- - Fix declaration of defined constants in C wrappers.
- - Fix declaration of EnumValues in C wrappers.
- - add some const typemaps to allegrocl.swg
- - add rename for operator bool() overloads.
-
- 2008-09-25: olly
- [PHP5] Fill in typemaps for SWIGTYPE and void * (SF#2095186).
- 2008-09-22: mutandiz (Mikel Bancroft)
- [allegrocl]
- - Support wrapping of types whose definitions are not seen by
- SWIG. They are treated as forward-referenced classes and if a
- definition is not seen are treated as (* :void).
- - Don't wrap the contents of unnamed namespaces.
- - More code cleanup. Removed some extraneous warnings.
- - start work on having the allegrocl mod pass the cpp test-suite.
- 2008-09-19: olly
- [PHP5] Add typemaps for long long and unsigned long long.
- 2008-09-18: wsfulton
- [C#] Added C# array typemaps provided by Antti Karanta.
- The arrays provide a way to use MarshalAs(UnmanagedType.LPArray)
- and pinning the array using 'fixed'. See arrays_csharp.i library file
- for details.
- 2008-09-18: wsfulton
- Document the optional module attribute in the %import directive,
- see Modules.html. Add a warning for Python wrappers when the
- module name for an imported base class is missing, requiring the
- module attribute to be added to %import, eg
- %import(module="FooModule") foo.h
- 2008-09-18: olly
- [PHP5] Change the default input typemap for char * to turn PHP
- Null into C NULL (previously it was converted to an empty string).
- The new behaviour is consistent with how the corresponding output
- typemap works (SF#2025719).
- If you want to keep the old behaviour, add the following typemap
- to your interface file (PHP's convert_to_string_ex() function does
- the converting from PHP Null to an empty string):
- %typemap(in) char * {
- convert_to_string_ex($input);
- $1 = Z_STRVAL_PP($input);
- }
- 2008-09-18: olly
- [PHP5] Fix extra code added to proxy class constructors in the case
- where the only constructor takes no arguments.
- 2008-09-18: olly
- [PHP5] Fix wrapping of a renamed enumerated value of an enum class
- member (SF#2095273).
- 2008-09-17: mutandiz (Mikel Bancroft)
- [allegrocl]
- - Fix how forward reference typedefs are handled, so as not to conflict
- with other legit typedefs.
- - Don't (for now) perform an ffitype typemap lookup when trying to
- when calling compose_foreign_type(). This is actually a useful thing
- to do in certain cases, the test cases for which I can't currently
- locate :/. It's breaking some wrapping behavior that is more commonly
- seen, however. I'll readd in a more appropriate way when I can
- recreate the needed test case, or a user complains (which means
- they probably have a test case).
- - document the -isolate command-line arg in the 'swig -help' output.
- It was in the html docs, but not there.
- - small amount of code cleanup, removed some unused code.
- - some minor aesthetic changes.
- 2008-09-12: bhy
- [Python] Python 3.0 support branch merged into SWIG trunk. Thanks to
- Google Summer of Code 2008 for supporting this project! By default
- SWIG will generate interface files compatible with both Python 2.x
- and 3.0. And there's also some Python 3 new features that can be
- enabled by passing a "-py3" command line option to SWIG. These
- features are:
- - Function annotation support
- Also, the parameter list of proxy function will be generated,
- even without the "-py3" option. However, the parameter list
- will fallback to *args if the function (or method) is overloaded.
- - Buffer interface support
- - Abstract base class support
- For details of Python 3 support and these features, please see the
- "Python 3 Support" section in the "SWIG and Python" chapter of the SWIG
- documentation.
- The "-apply" command line option and support of generating codes
- using apply() is removed. Since this is only required by very old
- Python.
- This merge also patched SWIG's parser to solve a bug. By this patch,
- SWIG features able to be correctly applied on C++ conversion operator,
- such like this:
-
- %feature("shadow") *::operator bool %{ ... %}
- 2008-09-02: richardb
- [Python] Commit patch #2089149: Director exception handling mangles
- returned exception. Exceptions raised by Python code in directors
- are now passed through to the caller without change. Also, remove
- the ": " prefix which used to be added to other director exceptions
- (eg, those due to incorrect return types).
- 2008-09-02: wsfulton
- [Python] Commit patch #1988296 GCItem multiple module linking issue when using
- directors.
- 2008-09-02: wsfulton
- [C#] Support for 'using' and 'fixed' blocks in the 'csin' typemap is now
- possible through the use of the pre attribute and the new terminator attribute, eg
- %typemap(csin,
- pre=" using (CDate temp$csinput = new CDate($csinput)) {",
- terminator=" } // terminate temp$csinput using block",
- ) const CDate &
- "$csclassname.getCPtr(temp$csinput)"
- See CSharp.html for more info.
- 2008-09-01: wsfulton
- [CFFI] Commit patch #2079381 submitted by Boris Smilga - constant exprs put into
- no-eval context in DEFCENUM
- 2008-08-02: wuzzeb
- [Chicken,Allegro] Commit Patch 2019314
- Fixes a build error in chicken, and several build errors and other errors
- in Allegro CL
- 2008-07-19: wsfulton
- Fix building of Tcl examples/test-suite on Mac OS X reported by Gideon Simpson.
- 2008-07-17: wsfulton
- Fix SF #2019156 Configuring with --without-octave or --without-alllang
- did not disable octave.
- 2008-07-14: wsfulton
- [Java, C#] Fix director typemaps for pointers so that NULL pointers are correctly
- marshalled to C#/Java null in director methods.
- 2008-07-04: olly
- [PHP] For std_vector.i and std_map.i, rename empty() to is_empty()
- since "empty" is a PHP reserved word. Based on patch from Mark Klein
- in SF#1943417.
- 2008-07-04: olly
- [PHP] The deprecated command line option "-make" has been removed.
- Searches on Google codesearch suggest that nobody is using it now
- anyway.
- 2008-07-04: olly
- [PHP] The SWIG cdata.i library module is now supported.
- 2008-07-03: olly
- [PHP] The deprecated command line option "-phpfull" has been
- removed. We recommend building your extension as a dynamically
- loadable module.
- 2008-07-02: olly
- [PHP4] Support for PHP4 has been removed. The PHP developers are
- no longer making new PHP4 releases, and won't even be providing
- patches for critical security issues after 2008-08-08.
- 2008-07-02: olly
- [Python] Import the C extension differently for Python 2.6 and
- later so that an implicit relative import doesn't produce a
- deprecation warning for 2.6 and a failure for 2.7 and later.
- Patch from Richard Boulton in SF#2008229, plus follow-up patches
- from Richard and Haoyu Bai.
- Version 1.3.36 (24 June 2008)
- =============================
- 06/24/2008: wsfulton
- Remove deprecated -c commandline option (runtime library generation).
- 06/24/2008: olly
- [PHP] Fix assertion failure when handling %typemap(in,numinputs=0)
- (testcase ignore_parameter).
- 06/24/2008: olly
- [PHP] Fix segfault when wrapping a non-class function marked with
- %newobject (testcase char_strings).
- 06/22/2008: wsfulton
- [Java] Add a way to use AttachCurrentThreadAsDaemon instead of AttachCurrentThread
- in director code. Define the SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON macro, see
- Lib/java/director.swg.
- 06/21/2008: wsfulton
- [Ruby] Fix crashing in the STL wrappers (reject! and delete_if methods)
- 06/19/2008: wsfulton
- [Java, C#] C# and Java keywords will be renamed instead of just issuing a warning
- and then generating uncompilable code. Warning 314 gives the new name when a
- keyword is found.
- 06/19/2008: wsfulton
- [R] Keyword handling added. R Keywords will be renamed as necessary.
- Warning 314 gives the new name when a keyword is found.
- 06/17/2008: mgossage
- [Lua] Added missing support for bool& and bool*. Added runtest for li_typemaps testcase.
- (Bug #1938142)
- 06/07/2008: bhy
- Added test case keyword_rename, then made the keyword renaming works properly
- by fixing Swig_name_make() for a incomplete condition checking.
- 06/02/2008: wsfulton
- [Java, C#] Fix enum wrappers when using -noproxy.
- 05/30/2008: bhy
- Added std::wstring into Lib/typemaps/primtypes.swg, since it is also a primitive
- type in SWIG - fixed SF #1976978.
- 05/29/2008: wsfulton
- [Java, C#] Fix variable wrappers when using -noproxy.
- 05/29/2008: bhy
- [Python] Fixed a typo of %#ifdef in Lib/python/pycontainer.swg, which is related
- to -extranative SWIG option - SF #1971977.
- 05/20/2008: wsfulton
- New partialcheck makefile targets for partial testing of the test-suite. These
- just invoke SWIG, ie no compilation and no runtime testing. It can be faster
- when developing by just doing a directory diff of the files SWIG generates
- against those from a previous run. Example usage from the top level directory:
- make partialcheck-test-suite
- make partialcheck-java-test-suite
- This change also encompasses more flexibility in running the test-suite, eg
- it is possible to prefix the command line which runs any target language test
- with a tool. See the RUNTOOL, COMPILETOOL and SWIGTOOL targets in the common.mk
- file and makefiles in the test-suite directory. For example it is possible to
- run the runtime tests through valgrind using:
- make check RUNTOOL="valgrind --leak-check=full"
- or invoke SWIG under valgrind using:
- make check SWIGTOOL="valgrind --tool=memcheck"
- 05/19/2008: drjoe
- [R] Fixed define that was breaking pre-2.7. Checked in
- patch from Soren Sonnenburg that creates strings in
- version independent way
- 05/15/2008: wsfulton
- [Java] Fix variable name clash in directors - SF #1963316 reported by Tristan.
- 05/14/2008: wsfulton
- Add an optimisation for functions that return objects by value, reducing
- the number of copies of the object that are made. Implemented using an
- optional attribute in the "out" typemap called "optimal". Details in
- Typemaps.html.
- 05/11/2008: olly
- [PHP] Check for %feature("notabstract") when generating PHP5 class
- wrapper.
- 05/11/2008: wsfulton
- Fix SF #1943608 - $self substitution in %contract, patch submitted by
- Toon Verstraelen.
- 05/09/2008: olly
- [PHP] Fix char * typemaps to work when applied to signed char * and
- unsigned char * (uncovered by testcase apply_strings).
- 05/09/2008: wsfulton
- Fix wrapping of char * member variables when using allprotected mode.
- Bug reported by Warren Wang.
- 05/09/2008: olly
- [PHP] Fix bad PHP code generated when wrapping an enum in a
- namespace (uncovered by testcase arrays_scope).
- 05/09/2008: olly
- [PHP] SWIG now runs the PHP testsuite using PHP5, not PHP4. PHP4
- is essentially obsolete now, so we care much more about solid PHP5
- support.
- 05/07/2008: wsfulton
- STL fixes when using %import rather than %include and the Solaris Workshop
- compiler and the Roguewave STL.
- 05/07/2008: wsfulton
- Fix wrapping of overloaded protected methods when using allprotected mode.
- Bug reported by Warren Wang.
- 05/03/2008: wsfulton
- Commit patch #1956607 to add -MT support from Richard Boulton.
- This patch mirrors the gcc -MT option which allows one to change the default
- Makefile target being generated when generating makefiles with the -M family
- of options. For example:
- $ swig -java -MM -MT overriddenname -c++ example.i
- overriddenname: \
- example.i \
- example.h
- 04/30/2008: mgossage
- [Lua] Removed generation of _wrap_delete_XXXXX (wrappered destructor)
- which was unused and causing warning with g++ -Wall.
- Removed other unused warning in typemaps.i and other places.
- Added Examples/lua/embed3, and run tests a few test cases.
- 04/24/2008: olly
- [Python] Fix generated code for IBM's C++ compiler on AIX (patch
- from Goeran Uddeborg in SF#1928048).
- 04/24/2008: olly
- Rename BSIZE in Examples/test-suite/arrays_scope.i to BBSIZE to
- avoid a clash with BSIZE defined by headers on AIX with Perl
- (reported in SF#1928048).
- 04/20/2008: wsfulton
- Add the ability to wrap all protected members when using directors.
- Previously only the virtual methods were available to the target language.
- Now all protected members, (static and non-static variables, non-virtual methods
- and static methods) are wrapped when using the allprotected mode. The allprotected
- mode is turned on in the module declaration:
- %module(directors="1", allprotected="1") modulename
- Version 1.3.35 (7 April 2008)
- =============================
- 04/07/2008: wsfulton
- [Lua] Add missing pointer reference typemaps
- 04/06/2008: wsfulton
- Fix stack overflow when using typemap warning suppression, eg
- %warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG)
- 04/05/2008: wsfulton
- [Python] Fix shared_ptr typemaps so that %pythonnondynamic can be used. Also corrects
- display of the proxy class type. Reported by Robert Lupton.
- 04/04/2008: olly
- [Python] Add %newobject reference to python memory management subsection of manual
- (patch from mdbeachy in SF#1894610).
- 03/27/2008: wsfulton
- [Python] Fix shared_ptr typemaps where the pointer type is a templated type with
- with more than one parameter. Reported by Robert Lupton.
- 03/27/2008: mgossage
- [Lua] Added a typemap DISOWN for SWIGTYPE* and SWIGTYPE[], and support for %delobject feature.
- Added Examples/lua/owner which demonstrates the use of the memory management.
- 03/26/2008: wsfulton
- [Java] Apply patch #1844301 from Monty Taylor to suppress enum constructor
- unused warnings.
- 03/26/2008: wsfulton
- [Python] Apply patch #1924524 from Casey Raymondson which ensures the
- "No constructor defined" message is displayed when attempting to call a
- constructor on a class that doesn't have a constructor wrapper, eg if
- the C++ class is abstract.
- 03/26/2008: wsfulton
- [Python] Apply patch #1925702 from Casey Raymondson which removes warning 512
- for std::vector wrappers.
- 03/26/2008: olly
- [Python] Apply GCC 4.3 warnings patch from Philipp Thomas
- (SF#1925122).
- 03/21/2008: wsfulton
- [Python] Thread safety patch for STL iterators from Abhinandan Jain.
- 03/17/2008: mgossage
- [Lua] Added %luacode feature to add source code into wrappers.
- Updated documentation to document this.
- Added Examples/lua/arrays to show its use (and typemaps)
- 03/17/2008: olly
- Fix nonportable sed usage which failed on Mac OS X (and probably
- other platforms). Fixes SF#1903612.
- 03/17/2008: olly
- Fix memory leak in SWIG's parser (based on patch from Russell
- Bryant in SF#1914023).
- 03/12/2008: wsfulton
- Fix bug #1878285 - unnecessary cast for C struct creation wrappers.
- 03/12/2008: wsfulton
- [Python] Remove debugging info when using shared_ptr support
- 03/06/2008: mgossage
- [Lua] Updated documentation for Lua exceptions.
- Added Examples/lua/exception and Examples/lua/embed2.
- Small updates to the typemaps.
- 03/04/2008: wsfulton
- [Java, C#] Add char *& typemaps.
- 03/04/2008: wsfulton
- Fix occasional seg fault when attempting to report overloaded methods as being ignored.
- 02/29/2008: wsfulton
- [Perl] Fix #1904537 Swig causes a Perl warning "x used only once" in Perl 5.10
- reported by Ari Jolma
- 02/29/2008: wsfulton
- [Python] Add shared_ptr varin/varout typemaps for wrapping global variables.
- 02/25/2008: wsfulton
- Fix $wrapname to work in %exception (fixes some wrap:name assertions)
- Version 1.3.34 (27 February 2008)
- =================================
- 02/13/2008: wsfulton
- [R] Fix wrapping of global function pointer variables.
- 02/13/2008: wsfulton
- Add new special variables for use within %exception:
- $wrapname - language specific wrapper name
- $overname - if a method is overloaded this contains the extra mangling used on
- the overloaded method
- $decl - the fully qualified C/C++ declaration of the method being wrapped
- without the return type
- $fulldecl - the fully qualified C/C++ declaration of the method being wrapped
- including the return type
- 02/12/2008: drjoe
- [R] Now setting S4 flag in SWIG created objects. This
- fixes R-SWIG for 2.6 and warning for 2.6 failure has been removed.
- 02/11/2008: mgossage
- [Lua] Added a patch by Torsten Landschoff to fix the unary minus issue
- Ran 'astyle --style=kr -2' across lua.cxx to neaten it up
- 02/10/2008: wsfulton
- Bump SWIG_RUNTIME_VERSION to 4. This is because of the recently introduced API
- change in the conversion functions, ie change in definition of swig_converter_func.
- Anyone calling SWIG_TypeCast must pass in a valid value for the new additional
- (third) parameter and then handle the newly created memory if the returned value
- is set to SWIG_CAST_NEW_MEMORY else a memory leak will ensue.
- 02/09/2008: wsfulton
- [Python] Experimental shared_ptr typemaps added. Usage is the same as the recently
- added Java and C# shared_ptr typemaps. Two macros are available, although these
- may well change in a future version:
- For base classes or classes not in an inheritance chain:
- SWIG_SHARED_PTR(PROXYCLASS, TYPE)
- For derived classes:
- SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE)
- The PROXYCLASS is the name of the proxy class, but is only required for Java/C#.
- Example usage:
- %include "boost_shared_ptr.i"
- SWIG_SHARED_PTR(Klass, Space::Klass)
- SWIG_SHARED_PTR_DERIVED(KlassDerived, Space::Klass, Space::KlassDerived)
- namespace Space {
- struct Klass { ... };
- struct KlassDerived : Klass { ... };
- }
- Further details to follow in future documentation, but the following features
- should be noted:
- - Not restricted to boost::shared_ptr, eg std::tr1::shared_ptr can also be used.
- - Available typemap groups:
- (a) Typemaps for shared_ptr passed by value, reference, pointer and pointer
- reference.
- - (b) Typemaps for passing by raw value, raw pointer, raw reference, raw pointer
- reference.
- - The code being wrapped does not even have to use shared_ptr, SWIG can use
- shared_ptr as the underlying storage mechanism instead of a raw pointer due to
- the typemaps in group (b) above.
- - No array support as shared_ptr does not support arrays.
- - This works quite differently to the usual SWIG smart pointer support when
- operator-> is parsed by SWIG:
- - An additional smart pointer class is not generated reducing code bloat in
- the wrappers.
- - Using smart pointers and raw pointers can be mixed seamlessly.
- - Missing constructors for the smart pointers is no longer a problem and so
- separate factory type functions do not have to be written and wrapped.
- - The implicit C++ shared_ptr< derived class > to shared_ptr< base class >
- cast also works in the target language. This negates the necessity to write
- an explicit helper cast function providing the upcast which would need
- calling prior to passing a derived class to a method taking a shared_ptr to
- a base class.
- 02/09/2008: wsfulton
- [Python] Add support for overriding the class registration function via a new
- "smartptr" feature. This is a very low level of customisation most users
- would never need to know. The feature will typically be used for intrusive
- smart pointers along with additional typemaps. Example usage of the feature:
- %feature("smartptr", noblock=1) Foo { boost::shared_ptr< Foo > }
- class Foo {};
- The generated Foo_swigregister function will then register boost::shared < Foo >
- (SWIGTYPE_p_boost__shared_ptrTFoo_t instead of SWIGTYPE_p_Foo) as the underlying
- type for instantiations of Foo.
- 02/09/2008: wsfulton
- Features now supports the optional 'noblock' attribute for all usage of %feature.
- When specified, the { } braces are removed from the feature code. This is identical
- in behaviour to usage of 'noblock' in typemaps and is used when the preprocessor
- is required to operate on the code in the feature and the enclosing { } braces
- are not required. Example:
- #define FOO foo
- %feature("smartptr", noblock="1") { FOO::bar }
- The preprocessor then reduces this as if this had been used instead:
- %feature("smartptr") "foo::bar"
- 02/01/2008: olly
- [Python] Fix format string bug (SF#1882220).
- 01/31/2008: wsfulton
- Additions to the %types directive. Now the conversion / casting code can be
- overridden to some custom code in the %types directive, like so:
- %types(fromtype = totype) %{
- ... code to convert fromtype to totype and return ...
- %}
- The special variable $from will be replaced by the name of the parameter of the
- type being converted from. The code must return the totype cast to void *. Example:
- class Time;
- class Date;
- Date &Time::dateFromTime();
- %types(Time = Date) %{
- Time *t = (Time *)$from;
- Date &d = t->dateFromTime();
- return (void *) &d;
- %}
- resulting in the conversion / casting code looking something like:
- static void *_p_TimeTo_p_Date(void *x) {
- Time *t = (Time *)x;
- Date &d = t->dateFromTime();
- return (void *) &d;
- }
- This is advanced usage, please use only if you understand the runtime type system.
- 01/30/2008: mgossage
- Small update to documentation in Typemaps.html, to warn about use of local
- variables in typemaps for multiple types.
- 01/25/2008: wsfulton
- [Java] Fix bug reported by Kevin Mills in ARRAYSOFCLASSES typemaps where any
- changes made to an array element passed from Java to C are not reflected back
- into Java.
- 01/24/2008: mgossage
- More updates to the configure script for detecting lua.
- Also looks in /usr/include/lua*
- Also changed typemaps.i not to check for NULL before freeing a pointer
- 01/21/2008: wsfulton
- [Python] For STL containers, SWIG no longer attempts to convert from one
- STL container to another, eg from std::vector<int> to std::vector<double>
- or std::list<int> to std::vector<int> or even std::vector<Foo> to
- std::vector<Bar> as it previously did. In fact SWIG no longer attempts to
- convert any SWIG wrapped C++ proxy class that is also a Python sequence,
- whereas previously it would. Any non-SWIG Python sequence will still be
- accepted wherever an STL container is accepted. Overloaded methods using
- containers should be faster.
- 01/18/2008: wsfulton
- [C#] Add 'directorinattributes' and 'directoroutattributes' typemap attributes
- for the imtype typemap. These should contain C# attributes which will
- be generated into the C# director delegate methods.
- 01/18/2008: olly
- Fix handling of byte value 255 in input files on platforms where
- char is signed (it was getting mapped to EOF). Fixes SF#1518219.
- 01/16/2008: wsfulton
- Fix template member variables wrapped by a smart pointer. Bug reported
- by Robert Lupton.
- 01/14/2008: mgossage
- Substantial changes to configure script for detecting lua.
- Code can now link to liblua.a, liblua50.a or liblua51.a
- It's also a lot neater now.
- 12/16/2007: wsfulton
- [Perl] Backed out #1798728 - numbers can be passed to functions taking char *
- 12/16/2007: wsfulton
- Fix #1832613 - Templates and some typedefs involving pointers or function pointers
- 12/12/2007: wsfulton
- [Java] Fix #1632625 - Compilation errors on Visual C++ 6 when using directors.
- 12/12/2007: wsfulton
- [Perl] Fix #1798728 - numbers can be passed to functions taking char *.
- 12/12/2007: wsfulton
- Fix #1819847 %template with just one default template parameter
- template<typename T = int> class Foo {...};
- %template(FooDefault) Foo<>;
- 12/12/2007: mgossage
- [Lua] Small correction on Lua.html
- 12/09/2007: wsfulton
- Apply patch #1838248 from Monty Taylor for vpath builds of SWIG.
- 12/08/2007: wsfulton
- [Lua] Fixes to remove gcc-4.2 warnings
- 12/06/2007: wsfulton
- Fix #1734415 - template template parameters with default arguments such as:
- template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast >
- class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > { ... };
- 12/04/2007: mgossage
- [lua] Fix a bug in the class hierachy code, where the methods were not propagated,
- if the name ordering was in a certain order.
- Added new example programs (dual, embed) and runtime tests for test-suite.
- 11/30/2007: wsfulton
- Fix using statements using a base class method where the methods were overloaded.
- Depending on the order of the using statements and method declarations, these
- were previously generating uncompilable wrappers, eg:
- struct Derived : Base {
- virtual void funk();
- using Base::funk;
- };
- Version 1.3.33 (November 23, 2007)
- ==================================
- 11/21/2007: mikel
- [allegrocl] omit private slot type info in the classes/types
- defined on the lisp side. Fix bug in mapping of C/++ types
- to lisp types. Fix typo in modules generated defpackage form.
- Have std::string *'s automatically marshalled between foreign
- and lisp strings.
-
- 11/20/2007: olly
- [Python] Fill in Python Dictionary functions list (patch from
- Jelmer Vernooij posted to swig-devel).
- 11/20/2007: beazley
- Fixed a bug in the C scanner related to backslash characters.
- 11/19/2007: wsfulton
- [Perl] Fix broken compilation of C++ wrappers on some compilers.
- 11/16/2007: olly
- [Python] Don't pass Py_ssize_t for a %d printf-like format as
- that's undefined behaviour when sizeof(Py_ssize_t) != sizeof(int).
- Version 1.3.32 (November 15, 2007)
- ==================================
- 11/14/2007: wsfulton
- [R] Package name and dll name is now the same as the SWIG module
- name. It used to be the module name with _wrap as a suffix. The package
- and dll names can be modified using the -package and -dll commandline
- options.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/11/2007: wsfulton
- [R] Add support for Windows (Visual C++ 8 tested)
- 11/10/2007: olly
- [php] Fix makefile generated by -make (SF#1633679). Update
- documentation to mark "-make" as deprecated (none of the other
- SWIG backends seem to offer such a feature, it can't realistically
- generate a fully portable makefile, and the commands to build an
- extension are easy enough to write for the user's preferred build
- tool). Also recommend against the use of "-phpfull" (it's only
- really useful when static linking, and a dynamically loadable
- module is virtually always the better approach).
- 11/09/2007: olly
- Fix --help output to note that `export SWIG_FEATURES' is required.
- 10/29/2007: wsfulton
- [R] Fix seg fault on Windows
- [R] Examples R scripts are now platform independent
- 10/30/2007: mgossage
- [lua] fixed bug in template classes which cases template_default2
- and template_specialization_defarg to fail.
- Added several warning filters into the overload's test cases.
- Added runtime tests for several codes.
- You can now make check-lua-test-suite with no errors and only a few warnings.
- 10/30/2007: olly
- [guile] Fix the configure test to put GUILELINK in LIBS not LDFLAGS
- (SF#1822430).
- 10/30/2007: olly
- [guile] Fix the guile examples on 64-bit platforms.
- 10/29/2007: wsfulton
- [C#] Fix member pointers on 64 bit platforms.
- 10/28/2007: olly
- [lua] Fix swig_lua_class instances to be static to allow multiple
- SWIG wrappers to be compiled into the same executable statically.
- Patch from Andreas Fredriksson (posted to the swig mailing list).
- 10/28/2007: olly
- [lua] Fix Examples/lua to pass SRCS for C tests rather than CXXSRCS.
- The code as it was happened to work on x86, but broke on x86_64 (and
- probably any other platforms which require -fPIC).
- 10/28/2007: wsfulton
- [Java, C#] New approach for fixing uninitialised variable usage on error in director
- methods using the new templated initialisation function SwigValueInit().
- 10/28/2007: wsfulton
- [Perl] Use more efficient SvPV_nolen(x) instead of SvPV(x,PL_na) if SvPV_nolen is
- supported.
- 10/26/2007: wuzzeb
- [Chicken] Fix global variables of class member function pointers.
- Other minor fixes, so all tests in the chicken test suite now pass
- 10/25/2007: olly
- Fix UTL typecheck macro for a function taking char[] or const
- char[] (SF#1820132).
- 10/22/2007: mkoeppe
- [Guile] Filter out -ansi -pedantic from CFLAGS while compiling test programs for Guile
- in configure. This enables running the test suite for Guile if it is installed and
- usable.
- 10/22/2007: mkoeppe
- [Guile -scm] Fix testcases apply_signed_char and apply_strings
- by adding explicit casts to the appropriate $ltype.
- 10/22/2007: wsfulton
- [Java, C#] Fix uninitialised variable usage on error in director methods.
- 10/19/2007: wsfulton
- [Java, C#] Bug #1794247 - fix generated code for derived classes when csbase or javabase
- typemaps are used with the replace="1" attribute.
- 10/19/2007: wsfulton
- [Python] Docs updated to suggest using distutils. Patch #1796681 from Christopher Barker.
- 10/19/2007: olly
- [perl5] Clear errno before calls to strtol(), strtoul(), strtoll()
- and strtoull() which we check errno after to avoid seeing a junk
- value of errno if there isn't an error in the call.
- 10/16/2007: wsfulton
- Deprecate %attribute_ref and replace with %attributeref. There is just an argument
- order change in order to maintain consistency with %attribute, from:
- %attribute_ref(Class, AttributeType, AccessorMethod, AttributeName)
- to
- %attributeref(Class, AttributeType, AttributeName, AccessorMethod)
- 10/16/2007: olly
- [Tcl] Fix several occurrences of "warning: deprecated conversion
- from string constant to 'char*'" from GCC 4.2 in generated C/C++
- code.
- 10/16/2007: olly
- [PHP] Fix many occurrences of "warning: deprecated conversion from
- string constant to 'char*'" from GCC 4.2 in generated C/C++ code
- when compiling with a new enough version of PHP 5 (tested with
- PHP 5.2.3, but PHP 5.2.1 is probably the minimum requirement).
- 10/15/2007: wsfulton
- Patch #1797133 from David Piepgrass fixes %attribute when the getter has the same name
- as the attribute name and no longer generate non-functional setter for read-only attributes.
- 10/15/2007: olly
- [Tcl] Prevent SWIG_Tcl_ConvertPtr from calling the unknown proc.
- Add Examples/tcl/std_vector/ which this change fixes. Patch
- is from "Cliff C" in SF#1809819.
- 10/12/2007: wsfulton
- [Java] Add DetachCurrentThread back in for directors. See entry dated 08/11/2006 and
- search for DetachCurrentThread on the mailing lists for details. The crashes on Solaris
- seem to be only present in jdk-1.4.2 and lower (jdk-1.5.0 and jdk-1.6.0 are okay), so
- anyone using directors should use a recent jdk on Solaris, or define (see director.swg)
- SWIG_JAVA_NO_DETACH_CURRENT_THREAD to the C++ compiler to get old behaviour.
- 10/12/2007: wsfulton
- [Java] Ensure the premature garbage collection prevention parameter (pgcpp) is generated
- when there are C comments in the jtype and jstype typemaps.
- 10/12/2007: wuzzeb
- Added a testsuite entry for Bug #1735931
- 10/09/2007: olly
- Automatically rerun autogen.sh if configure.in is modified.
- 10/09/2007: olly
- Enhance check-%-test-suite rule and friends to give a more helpful
- error message if you try them for a language which doesn't exist
- (e.g. "make check-php-test-suite" rather than the correct
- "make check-php4-test-suite").
- 10/09/2007: olly
- Add make rule to regenerate Makefile from Makefile.in if it has
- changed.
- 10/09/2007: olly
- [php] Fix long-standing memory leak in wrapped constructors and
- wrapped functions/methods which return an object.
- 10/08/2007: olly
- Fix Makefile.in to read check.list files correctly in a VPATH
- build.
- 10/07/2007: wsfulton
- [C#, Java] Experimental shared_ptr typemaps added
- 09/27/2007: mgossage
- [lua] added more verbose error messages for incorrect typechecks.
- Added a routine which checks the exact number of parameters passed to a function
- (breaks operator_overloading for unary minus operator, currently disabled).
- Reorganised the luatypemaps.swg to tidy it up.
- Added a lot of %ignores on the operators not supported by lua.
- Added support for constant member function pointers & runtest for member_pointer.i
- Added first version of wchar.i
- 09/25/2007: wsfulton
- [C#, Java] throws typemaps for std::wstring using C# patch #1799064 from David Piepgrass
- 09/24/2007: wsfulton
- [Tcl] Apply #1771313 to fix bug #1650229 - fixes long long and unsigned long long
- handling.
- 09/20/2007: olly
- [Java] Eliminate some unnecessary uses of a temporary buffer
- allocated using new[]. SF#1796609.
- 09/19/2007: wsfulton
- [C#] The $csinput special variable can be used in the csvarin typemap where it is always
- expanded to 'value'.
- 09/19/2007: wsfulton
- [C#] Fix bug reported by Glenn A Watson and #1795260 where the cstype typemap used the 'ref'
- keyword in the typemap body, it produced uncompilable C# properties (variable wrappers).
- The type for the property now correctly comes from the 'out' attribute in the cstype typemap.
- 09/19/2007: wsfulton
- [Java] Fix const std::wstring& typemaps
- 09/19/2007: wsfulton
- [Java] Ensure the premature garbage collection prevention parameter (pgcpp) is generated
- where a parameter is passed by pointer reference, eg in the std::vector wrappers. The pgcpp
- is also generated now when user's custom typemaps use a proxy class in the jstype typemap
- and a 'long' in the jtype typemap.
- 09/18/2007: olly
- [php] Add typemaps for handling parameters of type std::string &
- which are modified by the wrapped function.
- 09/17/2007: olly
- [python] Split potentially long string literals to avoid hitting
- MSVC's low fixed limit on string literal length - patch from
- SF#1723770, also reported as SF#1630855.
- 09/17/2007: olly
- [ocaml] Fix renaming of overloaded methods in the method_table -
- my patch from SF#940399.
- 09/17/2007: olly
- [python] Simpler code for SWIG_AsVal_bool() which fixes a "strict
- aliasing" warning from GCC - patch from SF#1724581 by Andrew
- Baumann.
- 09/17/2007: olly
- [perl5] Use sv_setpvn() to set a scalar from a pointer and length
- - patch from SF#174460 by "matsubaray".
- 09/17/2007: olly
- When wrapping C++ code, generate code which uses
- std::string::assign(PTR, LEN) rather than assigning
- std::string(PTR, LEN). Using assign generates more efficient code
- (tested with GCC 4.1.2).
- 09/07/2007: wsfulton
- Fix %ignore on constructors which are not explicitly declared [SF #1777712]
- 09/05/2007: wuzzeb (John Lenz)
- - Change r_ltype in typesys.c to store a hashtable instead of a single value.
- several very subtle bugs were being caused by multiple ltypes being mapped
- to a single mangled type, mostly when using typedefed template parameters.
- Now, r_ltype stores a hashtable of possible ltypes, and when generating the
- type table, all the ltypes are added into the swig_type_info structure.
- 08/31/2007: wsfulton
- SF #1754967 from James Bigler.
- - Fix bug in turning on warnings that were turned off by default. Eg 'swig -w+309' will now
- turn on the normally suppressed warning 309.
- - New -Wextra commandline option which enables the extra warning numbers:
- 202,309,403,512,321,322 (this is the list of warnings that have always been suppressed by
- default). By specifying -Wextra, all warnings will be turned on, but unlike -Wall,
- warnings can still be selectively turned on/off using %warnfilter,
- #pragma SWIG nowarn or further -w commandline options, eg:
- swig -Wextra -w309
- will turn on all warnings except 309.
- 08/28/2007: wsfulton
- - New debugging options, -debug-module <n> and -debug-top <n> to display the parse tree at
- various stages, where <n> is a comma separated list of stages 1-4.For example, to
- display top of parse tree at stages 1 and 3:
- swig -debug-top 1,3
- - Deprecate the following options which have equivalents below:
- -dump_parse_module => -debug-module 1
- -dump_module => -debug-module 4
- -dump_parse_top => -debug-top 1
- -dump_top => -debug-top 4
- - Renamed some commandline options for naming consistency across all options:
- -debug_template => -debug-template
- -debug_typemap => -debug-typemap
- -dump_classes => -debug-classes
- -dump_tags => -debug-tags
- -dump_typedef => -debug-typedef
- -dump_memory => -debug-memory
- 08/25/2007: olly
- [PHP5] Fix handling of double or float parameters with an integer
- default value.
- 08/25/2007: olly
- [PHP5] Generate __isset() methods for setters for PHP 5.1 and later.
- 08/20/2007: wsfulton
- [Java C#] Fix director bug #1776651 reported by Stephane Routelous which occurred when
- the director class name is the same as the start of some other symbols used within
- the director class.
- 08/17/2007: wsfulton
- Correct behaviour for templated methods used with %rename or %ignore and the empty
- template declaration - %template(). A warning is issued if the method has not been
- renamed.
- 08/16/2007: mutandiz (Mikel Bancroft)
- [allegrocl] Name generated cl file based on input file rather than by
- module name. It was possible to end up with a mypackage.cl and a test_wrap.c
- when parsing a test.i input file. Confusing. Also, include external-format
- templates for :fat and :fat-le automatically to avoid these being compiled
- at runtime.
- 08/15/2007: efuzzyone
- [cffi] Apply patch #1766076 from Leigh Smith adding support for newly introduced
- in cffi :long-long and :unsigned-long-long.
- 08/10/2007: wsfulton
- [Java] Add documentation patch #1743573 from Jeffrey Sorensen. It contains a neat
- idea with respect to better memory management by the JVM of C++ allocated memory.
- 08/10/2007: wsfulton
- [Perl] Apply patch #1771410 from Wade Brainerd to fix typedef XS(SwigPerlWrapper) in
- perlrun.swg for ActiveState Perl build 822 and Perl 5.8.9 and 5.10 branches.
- 08/10/2007: wsfulton
- [Lua] const enum reference typemaps fixed.
- 08/09/2007: wsfulton
- [C#] Added missing support for C++ class member pointers.
- 08/09/2007: wsfulton
- [C#, Java] Add support for $owner in the "out" typemaps like in the scripting
- language modules. Note that $owner has always been supported in the "javaout" / "csout"
- typemaps.
- 08/01/2007: wsfulton
- Fix smart pointer handling for classes that have templated methods within the smart
- pointer type. Problem reported by craigdo at ee.washington.edu.
- 07/31/2007: efuzzyone
- [cffi] fixed memory access after being freed bug. thanks to Martin Percossi.
- package name clos changed to cl. thanks to Ralf Mattes
- 07/24/2007: wsfulton
- Parallel make support added for the examples and test-suite for developers who have
- more than one CPU. Now parallel make can be used for checking in addition to building
- the SWIG executable. Some typical checking examples:
- make -j8 -k check
- make -j4 check-java-test-suite
- make -j2 check-java-examples
- 07/19/2007: mgossage
- Fixed bug that stopped configure working on mingw (applied dos2unix to configure.in)
- 07/10/2007: mgossage
- [lua] Extra compatibility with Lua 5.1 (updated SWIG_init, docs, examples, test suite)
- Removed name clash for static link of multiple modules
- 07/05/2007: mgossage
- [lua] Fix a bug in SWIG_ALLOC_ARRAY()
- improved the error messages for incorrect arguments.
- Changed the output of swig_type() to use the human readable form of the type,
- rather than the raw swig type.
- 07/03/2007: wsfulton
- [C#] Fix directors for some overloaded methods where the imtype resulted in identical
- methods being generated in the C# director class, eg void foo(int *) and void foo(double *)
- used to generated two of these:
- private void SwigDirectorfoo(IntPtr p) { ... }
- 06/25/2007: wsfulton
- [Java, C#] Some parameter name changes in std_vector.i allowing better targeting
- of typemaps for method parameters (for memory management of containers of pointers).
- 06/07/2007: mutandiz (Mikel Bancroft)
- [allegrocl]
- fix foreign-type constructor to properly look for ffitype typemap
- bindings. fix inout_typemaps.i for strings.
- 06/06/2007: olly
- [Ruby]
- Use whichever of "long" or "long long" is the same size as "void*"
- to hold pointers as integers, rather than whichever matches off_t.
- Fixes compilation on OS X and GCC warnings on platforms where
- sizeof(void*) < sizeof(off_t) (SF patch #1731979).
- 06/06/2007: olly
- [PHP5]
- Fix handling of a particular case involving overloaded functions
- with default parameters.
- 06/05/2007: mutandiz (Mikel Bancroft)
- [allegrocl]
- Fix case where we'd pass fully qualified identifiers
- (i.e. NS1::NS2::FOO) to swig-insert-id. All namespaces
- should be stripped.
- Fix bug in TypedefHandler introduced by last fix.
- 06/05/2007: olly
- Fix reporting of filenames in errors after %include (patch from
- Leigh Smith in #1731040; also reported as #1699940).
- 05/31/2007: olly
- [Python]
- Fix "missing initialiser" warning when compiling generated C/C++
- wrapper code with Python 2.5 with warnings enabled (patch from
- bug#1727668 from Luke Moore).
- 05/29/2007: olly
- [Python]
- Split docstrings into separate string literals at each newline when
- generating C/C++ wrapper code (the C/C++ compiler will just combine
- them back into a single string literal). This avoids MSVC
- complaining that the strings are too long (problem reported by
- Bo Peng on the mailing list).
- 05/28/2007: olly
- [Python]
- Escape backslashes in docstrings.
- 05/26/2007: olly
- [Python]
- Fix autodoc generation of enums to be more consistent with how the
- enums are wrapped - patch #1697226 from Josh Cherry.
- 05/26/2007: olly
- [PHP5]
- Fix wrapping of methods and functions which return a pointer to a
- class (bug#1700788) and those which have overloaded forms returning
- both classes and non-classes (bug#1712717, thanks to Simon
- Berthiaume for the patch).
- 05/25/2007: wsfulton
- Fixed %rename inconsistency in conversion operators as reported by Zhong Ren. The matching
- is now done on the operator name in the same way as it is done for parameters. For example:
- %rename(opABC) Space::ABC::operator ABC() const;
- %rename(methodABC) Space::ABC::method(ABC a) const;
- namespace Space {
- class ABC {
- public:
- void method(ABC a) const {}
- operator ABC() const { ABC a; return a; }
- };
- }
- Note that qualifying the conversion operator previously may or may not have matched.
- Now it definitely won't, so this will not match:
- %rename(opABC) Space::ABC::operator Space::ABC() const;
- in the same way that this does not match:
- %rename(methodABC) Space::ABC::method(Space::ABC a) const;
- The documentation has been improved with respect to %rename, namespaces and templates.
- Conversion operators documentation too.
- *** POTENTIAL INCOMPATIBILITY ***
- 05/16/2007: mutandiz
- [allegrocl]
- Fix bad generation of local var ltype's in functionWrapper().
- Try to work better with the backward order in which swig
- unrolls nested class definitions.
- cleaned up a little unnecessary code/debug printf's.
- Remove warning when replacing $ldestructor for ff:foreign-pointer
- 05/12/2007: olly
- [Python]
- swig -python -threads now generates C/C++ code which uses Python's
- own threading abstraction (from pythread.h) rather than OS specific
- code. The old code failed to compile on MS Windows. (See SF patch
- tracker #1710341).
- 05/04/2007: gga
- [Ruby]
- Changed STL renames to be global renames. This fixes
- STL functions not being renamed when autorename is on.
- This is a not a totally perfect work-around, but better.
- Someone really needs to fix the template renaming code.
- (See bug #1545634)
- 05/04/2007 gga
- [All]
- Changed %rename("%(undercase)s") a little so that single
- numbers at the end of a function are not undercased. That is:
- getSomething -> get_something
- get2D -> get_2d
- get234 -> get_234
- BUT:
- asFloat2 -> as_float2
- (Bug #1699714)
- 05/03/2007: gga
- [Ruby]
- Made __swigtype__ => @__swigtype__ so it can be accessed
- from the scripting language (and follows Ruby's official
- documentation, just in case).
- Made tracking => @__trackings__ for same reason.
- Currently storing ivars without the @ seems valid, but
- the PickAxe says this is not correct, so just in case...
- 05/03/2007: gga
- [Ruby]
- Applied patch for -minherit bug and exception classes.
- This issue should be revisited more closely, as Multiple
- Inheritance in Ruby is still problematic.
- (patch/bug #1604878)
- 05/03/2007: gga
- [Ruby]
- Overloaded functions in ruby will now report to the user
- the possible prototypes when the user mistypes the number or
- type of a parameter.
- 05/03/2007: gga
- [Ruby]
- Forgot to document the bug fixing of an old bug regarding
- exceptions.
- (bug #1458247)
- 05/03/2007: gga
- [Ruby]
- Fixed Ruby documentation to use the proper css styles for
- each section. Added autodoc section to Ruby's docs to
- document the features supported by Ruby in documenting its modules.
- Made rdoc documentation spit out the full name of the class +
- method name. Albeit this will make the current rdoc not recognize
- the method, this is still needed to disambiguate between different
- classes with similar methods (rdoc was created to document the
- ruby source which only contains one class per c file, unlike swig)
- I have patched rdoc to make it more friendly to swig. This
- patch needs to be merged in the ruby std library now.
- 05/03/2007: gga
- [Ruby]
- Changed flag -feature to be -init_name to better reflect its
- purpose and avoid confusion with -features.
- 05/03/2007: gga
- [Ruby]
- Improved autodoc generation.
- Added autodoc .swg files to Ruby library for easily adding
- documentation to common Ruby methods and STL methods.
- Fixed autodoc documenting of getters and setters and module.
- Made test suite always generate autodocs.
- 05/03/2007: gga
- [Ruby]
- Removed some warnings from STL and test suite.
- 05/02/2007: mgossage
- [Lua] Fixed issues with C++ classes and hierachies across multiple
- source files. Fixed imports test case & added run test.
- Added Examples/imports.
- Added typename for raw lua_State*
- Added documentation on native functions.
- 05/02/2007: gga
- [Ruby]
- Docstrings are now supported.
- %feature("autodoc") and %feature("docstring") are now
- properly supported in Ruby. These features will generate
- a _wrap.cxx file with rdoc comments in them.
- 05/02/2007: gga
- [Ruby]
- STL files have been upgraded to follow the new swig/python
- Lib/std conventions.
- This means std::vector, std::set, std::map, set::multimap,
- std::multiset, std::deque and std::string are now properly
- supported, including their iterators, support for containing
- ruby objects (swig::GC_VALUE) and several other ruby
- enhancements.
- std::complex, std::ios, std::iostream, std::iostreambuf and
- std::sstream are now also supported.
- std::wstring, std::wios, std::wiostream, std::wiostreambuf
- and std::wsstream are supported verbatim with no unicode
- conversion.
- std_vector.i now mimics the behavior of Ruby Arrays much more
- closely, supporting slicing, shifting, unshifting,
- multiple indexing and proper return values on assignment.
- COMPATABILITY NOTE: this changes the older api a little bit in
- that improper indexing would previously (incorrectly) raise
- exceptions. Now, nil is returned instead, following ruby's
- standard Array behavior.
- 05/02/2007: gga
- [Ruby]
- Changed the value of SWIG_TYPECHECK_BOOL to be 10000 (ie. higher
- than that of all integers).
- This is because Ruby allows typecasting
- integers down to booleans which can make overloaded functions on
- bools and integers to fail.
- (bug# 1488142)
- 05/02/2007: gga
- [Ruby]
- Fixed a subtle bug in multiple argouts that could get triggered if
- the user returned two or more arguments and the first one was an
- array.
- 05/01/2007: gga
- [Ruby]
- Improved the documentation to document the new features
- added, add directorin/out/argout typemaps, etc.
- 05/01/2007: gga
- [Ruby]
- Added %initstack and %ignorestack directives for director
- functions. These allow you to control whether a director
- function should re-init the Ruby stack.
- This is sometimes needed for an embedded Ruby where the
- director method is used as a C++ callback and not called
- by the user from ruby code.
- Explanation:
- Ruby's GC needs to be aware of the running OS stack in order to
- mark any VALUE (Ruby objects) it finds there to avoid collection
- of them. This allows the ruby API to be very simple and allows
- you to write code like "VALUE a = sth" anywhere without needing
- to do things like refcounting like python.
- By default, the start of the stack is set when ruby_init() is
- called. If ruby is inited within main(), as it usually is the
- case with the main ruby executable, ruby will be able to calculate
- its stack properly. However, when this is not possible, as when
- ruby is embedded as a plugin to an application where main is not
- available, ruby_init() will be called in the wrong place, and
- ruby will be incorrectly tracking the stack from the function
- that called ruby_init() forwards only, which can lead to
- all sorts of weird crashes or to ruby thinking it has run out of
- stack space incorrectly.
- To avoid this, director (callback) functions can now be tagged
- to try to reset the ruby stack, which will solve the issues.
- NOTE: ruby1.8.6 still contains a bug in it in that its function
- to reset the stack will not always do so. This bug is triggered
- very rarely, when ruby is called from two very distinct places
- in memory, like a branch of main() and another dso. This bug
- has now been reported to ruby-core and is pending further
- investigation.
- (bug #1700535 and patch #1702907)
- 04/30/2007: wsfulton
- Fix #1707582 - Restore building from read-only source directories.
- 04/30/2007: gga
- [Ruby]
- Ruby will now report the parameter index properly on type
- errors as well as the class and value of the incorrect
- argument passed.
- (feature request #1699670)
- 04/30/2007: gga
- [Ruby]
- Ruby no longer creates the free_Class function if the class
- contains its own user defined free function (%freefunc).
- (bug #1702882)
- 04/30/2007: gga
- [Ruby]
- Made directors raise a ruby exception for incorrect argout
- returned values if RUBY_EMBEDDED is set, instead of throwing
- an actual SwigDirector exception.
- This will prevent crashes when ruby is embedded and unaware
- of the SwigDirector exception.
- 04/30/2007: gga
- [Ruby]
- Removed the need for -DSWIGEXTERN.
- Changed swig_ruby_trackings to be a static variable, but also
- be kept within a hidden instance variable in the SWIG module.
- This allows properly dealing with trackings across multiple
- DSOs, which was previously broken.
- (bug #1700535 and improvement to patch #1702907)
- 04/29/2007: gga
- [Ruby] Fixed GC memory issues with trackings that could lead
- to segfaults when dealing, mainly, with static variables.
- (bug #1700535 and patch #1702907)
- 04/29/2007: gga
- [Ruby]
- Fixed String conversion using old ruby1.6 macros. Now
- StringValuePtr() is used if available. This removes warnings
- when converting strings with \0 in them.
- (bug #1700535 and patch #1702907)
- 04/29/2007: gga
- [Ruby]
- Fixed the argout count in directors for Ruby. Previously,
- ignored or "numinputs=0" typemaps would incorrectly not get
- counted towards the argout count.
- (bug/patch #1545585)
- 04/29/2007: gga
- [Ruby]
- Upgraded Ruby converter to recognize "numinputs=0". Previously,
- only the old "ignore" flag was checked (which would currently
- still work properly, but is deprecated).
- 04/29/2007: gga
- [Ruby - but should be made generic]
- %feature("numoutputs","0") added.
- This feature allows you to ignore the output of a function so
- that it is not added to a list of output values
- ( ie. argouts ).
- This should also become a feature of %typemap(directorout)
- as "numoutputs"=0, just like "numinputs"=0 exists.
- %feature("directors"=1)
- %include <typemaps.i>
- %feature("numoutputs","0") { Class::member_function1 };
- %typemap(out) MStatus { // some code, like check mstatus
- // and raise exception if wrong };
- %inline %{
- typedef int MStatus;
- class Class {
- // one argument returned, but director out code added
- // MStatus is discarded as a return (out) parameter.
- virtual MStatus member_function1( int& OUTPUT );
- // two arguments returned, director out code added
- // MStatus is not discarded
- virtual MStatus member_function2( int& OUTPUT );
- };
- %}
- 04/21/2007: olly
- Fix parsing of float constants with an exponent (e.g. 1e-02f)
- (bug #1699646).
- 04/20/2007: olly
- [Python] Fix lack of generation of docstrings when -O is used.
- Also, fix generation of docstrings containing a double quote
- character. Patch from Richard Boulton in bug#1700146.
- 04/17/2007: wsfulton
- [Java, C#] Support for adding in Java/C# code before and after the intermediary call,
- specifically related to the marshalling of the proxy type to the intermediary type.
- The javain/csin typemap now supports the 'pre' and 'post' attributes to achieve this.
- The javain typemap also supports an optional 'pgcppname' attribute for premature garbage
- collection prevention parameter naming and the csin typemap supports an optional 'cshin'
- attribute for the parameter type used in a constructor helper generated when the type is used
- in a constructor. Details in the Java.html and CSharp.html documentation.
- 04/16/2007: olly
- Don't treat `restrict' as a reserved identifier in C++ mode
- (bug#1685534).
- 04/16/2007: olly
- [PHP5] Fix how zend_throw_exception() is called (bug #1700785).
- 04/10/2007: olly
- Define SWIGTEMPLATEDISAMBIGUATOR to template for aCC (reported on
- swig-user that this is needed).
- 04/04/2007: olly
- [PHP5] If ZTS is enabled, release <module>_globals_id in MSHUTDOWN
- to avoid PHP interpreter crash on shutdown. This solution was
- suggested here: http://bugs.php.net/bug.php?id=40985
- 04/03/2007: olly
- [PHP4] Add missing ZTS annotations to generated C++ wrapper code
- to fix compilation failures when using ZTS enabled SWIG (Linux
- distributions tend to disable ZTS, but notably the Windows build
- uses it by default).
- 04/01/2007: efuzzyone
- [CFFI] Patch #1684261: fixes handling of unsigned int literals, thanks Leigh Smith.
- Also, improved documentation.
- 03/30/2007: olly
- Avoid generating '<:' token when using SwigValueWrapper<> on a type
- which starts with '::' (patch #1690948).
- 03/25/2007: wuzzeb (John Lenz)
- [perl5] Add SWIG_fail to the SWIG_exception macro. Fixes a few problems reported
- on the mailing list.
- 03/23/2007: wsfulton
- String copying patch from Josh Cherry reducing memory consumption by about 25%.
- 03/21/2007: wsfulton
- [Java] Apply patch #1631987 from Ulrik Peterson - bool INOUT typemaps
- fail on big endian machines.
- 03/16/2007: wsfulton
- Fix seg fault given dodgy C++ code: namespace abc::def { }
- 03/16/2007: wsfulton
- [Java] Fixes so that ARRAYSOFCLASSES and ARRAYSOFENUMS in arrays_java.i can be applied
- to pointer types.
- 03/03/2007: olly
- [PHP5] When we know the literal numeric value for a constant, use
- that to initialise the const member in the PHP wrapper class.
- 03/02/2007: olly
- [PHP5] Fix PHP wrapper code generated for certain cases of
- overloaded forms with default arguments.
- 02/26/2007: efuzzyone
- [CFFI] Patch #1656395: fixed hex and octal values bug, thanks to Arthur Smyles.
- 02/22/2007: mgossage
- [Lua] Fixed bug in typemaps which caused derived_byvalue and rname test cases to fail.
- Updated derived_byvalue.i to explain how to find and fix the problem
- 01/25/2007: wsfulton
- Fix #1538522 and #1338527, forward templated class declarations without a
- name for the templated class parameters, such as:
- template <typename, class> class X;
- 01/23/2007: mgossage
- [Lua] Patch #1640862: <malloc.h> replaced by <stdlib.h>
- Patch #1598063 Typo in typemaps.i
- 01/22/2007: mgossage
- [Lua] Added a lua specific carrays.i which adds the operator[] support.
- modified the main code to make it not emit all the class member functions & accessors
- Note: C structs are created using new_XXX() while C++ classes use XXX() (should be standardised)
- Updated test case: li_carrays
- Updated the documentation.
- 01/12/2007: wsfulton
- [Php] Add support for newfree typemaps (sometimes used by %newobject)
- 01/12/2007: beazley
- New command line option -macroerrors. When supplied, this will force
- the C scanner/parser to report proper location information for code contained
- inside SWIG macros (defined with %define). By default, SWIG merely reports
- errors on the line at which a macro is used. With this option, you
- can expand the error back to its source---something which may simplify
- debugging.
- 01/12/2007: beazley
- [Internals] Major overhaul of C/C++ scanning implementation. For quite
- some time, SWIG contained two completely independent C/C++ tokenizers--
- the legacy scanner in CParse/cscanner.c and a general purpose scanner
- in Swig/scanner.c. SWIG still has two scanning modules, but the C parser
- scanner (CParse/cscanner.c) now relies upon the general purpose
- scanner found in Swig/scanner.c. As a result, it is much smaller and
- less complicated. This change also makes it possible to maintain all
- of the low-level C tokenizing in one central location instead of two
- places as before.
- ***POTENTIAL FLAKINESS***
- This change may cause problems with accurate line number reporting
- as well as error reporting more generally. I have tried to resolve this
- as much as possible, but there might be some corner cases.
- 01/12/2007: mgossage
- [Lua] Added typemap throws for std::string*, typemap for SWIGTYPE DYNAMIC,
- changed the existing throws typemap to throw a string instead of making a copy of
- the object (updating a few test cases to deal with the change).
- fixed test case: dynamic_casts, exception_partial_info, li_std_string, size_t
- 01/03/2007: beazley
- [Internals]. Use of swigkeys.c/.h variables is revoked. Please use
- simple strings for attribute names.
- 12/30/2006: beazley
- Internal API functions HashGetAttr() and HashCheckAttr() have been revoked.
- Please use Getattr() to retrieve attributes. The function Checkattr() can
- be used to check attributes. Note: These functions have been revoked
- because they only added a marginal performance improvement at the expense
- code clarity.
- 12/26/2006: mgossage
- [Lua] Added more STL (more exceptions, map, size_t),
- fixed test case: conversion_ns_template.
- 12/21/2006: mgossage
- [Lua] Update to throw errors when setting immutables,
- and allowing user addition of module variables.
- 12/20/2006: wsfulton
- Fix typedef'd variable wrappers that use %naturalvar, eg, std::string.
- 12/14/2006: wsfulton
- [C#] Add std::wstring and wchar_t typemaps
- 12/14/2006: olly
- [php] Fix bug #1613673 (bad PHP5 code generated for getters and
- setters).
- 12/02/2006: wsfulton, John Lenz, Dave Beazley
- Move from cvs to Subversion for source control
- 11/30/2006: beazley
- Cleaned up swigwarnings.swg file not to use nested macro
- definitions.
- 11/12/2006: wsfulton
- [Java, C#] Fix for %extend to work for static member variables.
- Version 1.3.31 (November 20, 2006)
- ==================================
- 11/12/2006: Luigi Ballabio
- [Python] Alternate fix for Python exceptions bug #1578346 (the previous one broke Python
- properties in modern classes)
- 11/12/2006: wsfulton
- -fakeversion commandline option now generates the fake version into the generated wrappers
- as well as displaying it when the -version commandline option is used.
- 14/11/2006: mgossage
- [lua] update to typemap for object by value, to make it c89 compliant
- Version 1.3.30 (November 13, 2006)
- ==================================
- 11/12/2006: wsfulton
- [java] Remove DetachCurrentThread patch from 08/11/2006 - it causes segfaults
- on some systems.
- 11/12/2006: wsfulton
- [python] Fix #1578346 - Python exceptions with -modern
- 11/10/2006: wsfulton
- Fix #1593291 - Smart pointers and inheriting from templates
- 11/09/2006: wsfulton
- Fix director operator pointer/reference casts - #1592173.
- 11/07/2006: wsfulton
- Add $self special variable for %extend methods. Please use this instead of just 'self'
- as the C++ 'this' pointer.
- 11/07/2006: mutandiz
- [allegrocl]
- allegrocl.swg: swig-defvar updated to allow specifying of
- non-default foreign type (via :ftype keyword arg).
- allegrocl.cxx: Specify proper access type for enum values.
- 11/03/2006: wsfulton
- [Java/C#] Fix const std::string& return types for directors as reported by
- Mark Donselzmann
- 10/29/2006: wsfulton
- [Java] Remove DeleteLocalRef from end of director methods for now as it is causing a
- seg fault when run on Solaris 8.
- 10/29/2006: wuzzeb (John Lenz)
- [Guile] Patch from Chris Shoemaker to clean up some warnings in the generated code.
- 10/29/2006: wsfulton
- [Java] Important fix to prevent early garbage collection of the Java proxy class
- while it is being used in a native method. The finalizer could destroy the underlying
- C++ object while it was being used. The problem occurs when the proxy class is no
- longer strongly reachable after a native call. The problem seems to occur in
- memory stress situations on some JVMs. It does not seem to occur on the
- Sun client JVM up to jdk 1.5. However the 1.6 client jdk has a more aggressive garbage
- collector and so the problem does occur. It does occur on the Sun server
- JVMs (certainly 1.4 onwards). The fix entails passing the proxy class into the native
- method in addition to the C++ pointer in the long parameter, as Java classes are not
- collected when they are passed into JNI methods. The extra parameter can be suppressed
- by setting the nopgcpp attribute in the jtype typemap to "1" or using the new -nopgcpp
- commandline option.
- See Java.html#java_pgcpp for further details on this topic.
- 10/24/2006: wsfulton
- [C#] Fix smart pointer wrappers. The virtual/override/new keyword is not generated
- for each method as the smart pointer class does not mirror the underlying pointer
- class inheritance hierarchy. SF #1496535
- 10/24/2006: mgossage
- [lua] added support for native methods & member function pointers.
- fixed test cases arrays_dimensionless & cpp_basic. Added new example (functor).
- tidied up a little of the code (around classHandler).
- 10/17/2006: wsfulton
- [C#, Java] directorout typemap changes to fall in line with the other director
- languages. $result is now used where $1 used to be used. Please change your typemaps
- if you have a custom directorout typemap.
- 10/18/2006: wsfulton
- Some fixes for applying the char array typemaps to unsigned char arrays.
- 10/17/2006: wsfulton
- [C#, Java] Add in const size_t& and const std::size_t& typemaps.
- 10/15/2006: efuzzyone
- [CFFI] Suppress generating defctype for enums, thanks to Arthur Smyles. Patch 1560983.
- 10/14/2006: wuzzeb (John Lenz)
- [Chicken] Minor fix to make SWIG work with the (as yet unreleased) chicken 2.5
- [Guile,Chicken] Fix SF Bug 1573892. Added an ext_test to the test suite to test
- this bug, but this test can not really be made generic because the external code must
- plug into the target language interpreter directly.
- See Examples/test-suite/chicken/ext_test.i and ext_test_external.cxx
- Added a %.externaltest to common.mk, and any interested language modules can
- copy and slightly modify either the chicken or the guile ext_test.i
- 10/14/2006: mgossage
- [Lua] added OUTPUT& for all number types, added a long long type
- fixed several test cases.
- update: changed typemaps to use SWIG_ConvertPtr rather than SWIG_MustGetPointer
- started spliting lua.swg into smaller parts to make it neater
- 10/13/2006: wsfulton
- [C#, Java] Marginally better support for multiple inheritance only in that you can
- control what the base class is. This is done using the new 'replace' attribute in the
- javabase/csbase typemap, eg in the following, 'Me' will be the base class,
- no matter what Foo is really derived from in the C++ layer.
- %typemap(javabase, replace="1") Foo "Me"
- %typemap(csbase, replace="1") Foo "Me"
- Previously it was not possible for the javabase/csbase typemaps to override the C++ base.
- 10/12/2006: wsfulton
- [Java] Remove potential race condition on the proxy class' delete() method
- (it is now a synchronized method, but is now customisable by changing the
- methodmodifiers attribute in the javadestruct or javadestruct_derived typemap)
- [C#] Remove potential race condition on the proxy class' Dispose() method,
- similar to Java's delete() above.
- *** POTENTIAL INCOMPATIBILITY ***
- 10/12/2006: wsfulton
- [Ruby, Python] Remove redundant director code in %extend methods (%extend
- methods cannot be director methods)
- 10/12/2006: wsfulton
- [Ruby, Python] Fix #1505594 - director objects not returned as director objects
- in %extend methods.
- 10/11/2006: wsfulton
- [Java] Fix #1238798 - Directors using unsigned long long or any other type
- marshalled across the JNI boundary using a Java class (where the jni typemap
- contains jobject).
- 10/06/2006: wsfulton
- Fix #1162194 - #include/%include within a structure
- 10/06/2006: wsfulton
- Fix #1450661, string truncation in String_seek truncating Java/C# enums.
- 10/06/2006: mgossage
- [Lua] Fix #1569587. The name is now correct.
- 10/04/2006: wsfulton
- Director fixes for virtual conversion operators
- 10/04/2006: olly
- [php] Fix #1569587 for PHP. Don't use sizeof() except with string
- literals. Change some "//" comments to "/* */" for portability.
- 10/04/2006: mgossage
- [Lua] Partial Fix #1569587. The type is now correct, but the name is still not correct.
- 10/03/2006: wsfulton
- [Ruby] Fix #1527885 - Overloaded director virtual methods sometimes produced
- uncompilable code when used with the director:except feature.
- 10/03/2006: wsfulton
- Directors: Directors are output in the order in which they are declared in
- the C++ class rather than in some pseudo-random order.
- 10/03/2006: mmatus
- Fix #1486281 and #1471039.
- 10/03/2006: olly
- [Perl] Fix for handling strings with zero bytes from Stephen Hutsal.
- 09/30/2006: efuzzyone
- [CFFI] Bitfield support and vararg support due to Arthur Smyles.
- C expression to Lisp conversion, thanks to Arthur Smyles for the initial
- idea, it now supports conversion for a whole range of C expressions.
- 09/28/2006: wsfulton
- Fix #1508327 - Overloaded methods are hidden when using -fvirtual optimisation.
- Overloaded methods are no longer candidates for elimination - this mimics
- C++ behaviour where all overloaded methods must be defined and implemented
- in a derived class in order for them to be available.
- 09/25/2006: wsfulton
- [Ruby, Python, Ocaml] Fix #1505591 Throwing exceptions in extended directors
- 09/25/2006: wsfulton
- Fix #1056100 - virtual operators.
- 09/24/2006: olly
- Don't accidentally create a "<:" token (which is the same as "[" in C++).
- Fixes bug # 1521788.
- 09/23/2006: olly
- [Ruby] Support building with recent versions of the Ruby 1.9
- development branch. Fixes bug #1560092.
- 09/23/2006: olly
- Templates can now be instantiated using negative numbers and
- constant expressions, e.g.:
- template<int q> class x {};
- %template(x_minus1) x<-1>;
- %template(x_1plus2) x<1+2>;
- Also, constant expressions can now include comparisons (>, <, >=,
- <=, !=, ==), modulus (%), and ternary conditionals (a ? b : c).
- Fixes bugs #646275, #925555, #956282, #994301.
- 09/22/2006: wsfulton
- Fix %ignore on director methods - Bugs #1546254, #1543533
- 09/20/2006: wsfulton
- Fix %ignore on director constructors
- 09/20/2006: wsfulton
- Fix seg faults and asserts when director methods are ignored (#1543533)
- 09/20/2006: wsfulton
- Fix out of source builds - bug #1544718
- 09/20/2006: olly
- Treat a nested class definition as a forward declaration rather
- than ignoring it completely, so that we generate correct code for
- passing opaque pointers to the nested class (fixes SF bug #909387).
- 09/20/2006: olly
- *** POTENTIAL INCOMPATIBILITY ***
- [php] Overload resolution now works. However to allow this, SWIG
- generated wrappers no longer coerce PHP types (which reverts a change
- made in 1.3.26). So for example, if a method takes a string, you
- can no longer pass a number without explicitly converting it to a
- string in PHP using: (string)x
- 09/18/2006: mgossage
- [ALL] fix on swiginit.swg, has been reported to crash on several test cases
- found and fixed problem in imports under python (mingw)
- 09/16/2006: wsfulton
- [Python] Patch from Michal Marek for Python 2.5 to fix 64 bit array indexes on
- 64 bit machines.
- 09/13/2006: wsfulton
- The explicitcall feature has been scrapped. This feature was introduced primarily
- to solve recursive director method calls. Director upcall improvements made instead:
- [Python, Ruby, Ocaml] The swig_up flag is no longer used. The required mutexes
- wrapping this flag are also no longer needed. The recursive calls going from C++
- to the target language and back again etc are now avoided by a subtlely different
- approach. Instead of using the swig_up flag in each director method to indicate
- whether the explicit C++ call to the appropriate base class method or a normal
- polymorphic C++ call should be made, the new approach makes one of these calls
- directly from the wrapper method.
- [Java, C#] The recursive call problem when calling a C++ base class method from
- Java/C# is now fixed. The implementation is slightly different to the other languages
- as the detection as to whether the explicit call or a normal polymorphic call is made
- in the Java/C# layer rather than in the C++ layer.
- 09/11/2006: mgossage
- [ALL] updated swiginit.swg to allow multiple interpreters to use multiple
- swig modules at once. This has been tested in Lua (mingw & linux),
- perl5 & python (linux) only.
- 09/11/2006: mgossage
- [lua] added support for passing function pointers as well as native lua object
- into wrappered function.
- Added example funcptr3 to demonstrate this feature
- 09/05/2006: olly
- [php] Rename ErrorCode and ErrorMsg #define-s to SWIG_ErrorCode
- and SWIG_ErrorMsg to avoid clashes with code the user might be
- wrapping (patch from Darren Warner in SF bug #1466086). Any
- user typemaps which use ErrorCode and/or ErrorMsg directly will
- need adjusting - you can easily fix them to work with both old
- and new SWIG by changing to use SWIG_ErrorMsg and adding:
- #ifndef SWIG_ErrorMsg
- #define SWIG_ErrorMsg() ErrorMsg()
- #endif
- 08/29/2006: olly
- [php] Move constant initialisation from RINIT to MINIT to fix a
- warning when using Apache and mod_php. We only need to create
- PHP constants once when we're first initialised, not for every HTTP
- request.
- 08/21/2006: mgossage
- [Lua]
- Bugfix #1542466 added code to allow mapping Lua nil's <-> C/C++ NULL's
- updated various typemaps to work correctly with the changes
- added voidtest_runme.lua to show the features working
- 08/19/2006: wuzzeb (John Lenz)
- [Guile] Add feature:constasvar to export constants as variables instead of functions
- that return the constant value.
- 08/11/2006: wsfulton
- [Java] DetachCurrentThread calls have been added so that natively created threads
- no longer prevent the JVM from exiting. Bug reported by Thomas Dudziak and
- Paul Noll.
- 08/10/2006: wsfulton
- [C#] Fix director protected methods so they work
- 07/25/2006: mutandiz
- [allegrocl]
- more additions to std::string, some tweaks and small bug fixes
- -nocwrap mode.
- 07/21/2006: mgossage
- [Lua]
- Bugfix #1526022 pdated std::string to support strings with '\0' inside them
- updated typemaps.i to add support for pointer to pointers
- 07/19/2006: mutandiz
- [allegrocl]
- - Add std_string.i support.
- - Add newobject patch submitted by mkoeppe (thanks!)
- - Fix type name mismatch issue for nested type definitions.
- specifically typedefs in templated class defns.
- 07/18/2006: mgossage
- Bugfix #1522858
- updated lua.cxx to support -external-runtime command
- 07/14/2006: wuzzeb (John Lenz)
- Increment the SWIG_RUNTIME_VERSION to 3, because of the
- addition of the owndata member in swig_type_info.
- Reported by: Prabhu Ramachandran
- 07/05/2006: wsfulton
- Search path fixes:
- - Fix search path for library files to behave as documented in Library.html.
- - Fix mingw/msys builds which did not find the SWIG library when installed.
- - Windows builds also output the mingw/msys install location when running
- swig -swiglib.
- - The non-existent and undocumented config directory in the search path has
- been removed.
- 07/05/2006: wsfulton
- Fix $symname special variable expansion.
- 07/04/2006: wuzzeb (John Lenz)
- [Chicken]
- Add %feature("constasvar"), which instead of exporting a constant as a
- scheme function, exports the constant as a scheme variable. Update the
- documentation as well.
- 07/04/2006: wsfulton
- [See entry of 09/13/2006 - explicitcall feature and documentation to it removed]
- New explicitcall feature which generates additional wrappers for virtual methods
- that call the method explicitly, not relying on polymorphism to make the method
- call. The feature is a feature flag and is enabled like any other feature flag.
- It also recognises an attribute, "suffix" for mangling the feature name, see
- SWIGPlus.html#SWIGPlus_explicitcall documentation for more details.
- [Java, C#]
- The explicitcall feature is also a workaround for solving the recursive calls
- problem when a director method makes a call to a base class method. See
- Java.html#java_directors_explicitcall for updated documentation.
- 06/28/2006: joe (Joseph Wang)
- [r] Initial support for R
- 06/20/2006: wuzzeb (John Lenz)
- [Chicken]
- Minor fixes to get apply_strings.i testsuite to pass
- Remove integers_runme.scm from the testsuite, because SWIG and Chicken does
- handle overflows.
- 06/19/2005: olly
- [php] Add support for generating PHP5 class wrappers for C++
- classes (use "swig -php5").
- 06/17/2006: olly
- [php] Added some missing keywords to the PHP4 keyword list, and
- fixed __LINE__ and __FILE__ which were in the wrong category.
- Also added all the keywords new in PHP5, and added comments
- noting the PHP4 keywords which aren't keywords in PHP5.
- 06/17/2006: olly
- [php] Don't segfault if PHP Null is passed as this pointer (e.g.
- Class_method(Null)) - give a PHP Error instead.
- 06/15/2006: mutandiz
- [allegrocl]
- Add initial support for std::list container class.
- Fix a few bugs in helper functions.
- 05/13/2006: wsfulton
- [Java] Replace JNIEXPORT with SWIGEXPORT, thereby enabling the possibility
- of using gcc -fvisibility=hidden for potentially smaller faster loading wrappers.
- 05/13/2006: wsfulton
- Fix for Makefiles for autoconf-2.60 beta
- 05/13/2006: wsfulton
- Vladimir Menshakov patch for compiling wrappers with python-2.5 alpha.
- 05/12/2006: wsfulton
- Fix buffer overflow error when using large %feature(docstring) reported
- by Joseph Winston.
- 05/12/2006: wsfulton
- [Perl] Operator overload fix from Daniel Moore.
- 05/25/2006: mutandiz
- [allegrocl]
- Fix bug in generation of CLOS type declarations for unions
- and equivalent types.
- 05/24/2006: mutandiz
- [allegrocl]
- Don't require a full class definition to generate a CLOS wrapper.
- 05/20/2006: olly
- [php] GCC Visibility support now works with PHP.
- 05/19/2006: olly
- [php] Removed support for -dlname (use -module instead). Fixed
- naming of PHP extension module to be consistent with PHP
- conventions (no "php_" prefix on Unix; on PHP >= 4.3.0, handle Unix
- platforms which use something other than ".so" as the extension.)
- 05/13/2006: wsfulton
- [C#] Director support added
- 05/07/2006: olly
- [php] Don't segfault if PHP Null is passed where a C++ reference
- is wanted.
- 05/05/2006: olly
- [php] Fix wrappers generated for global 'char' variables to not
- include a terminating zero byte in the PHP string.
- 05/03/2006: wsfulton
- Modify typemaps so that char * can be applied to unsigned char * or signed char *
- types and visa versa.
- 05/03/2006: efuzzyone
- [cffi]Thanks to Luke J Crook for this idea.
- - a struct/enum/union is replaced with :pointer only if
- that slot is actually a pointer to that type. So,:
- struct a_struct { int x; } and
- struct b_struct { a_struct struct_1; };
- will be converted as:
- (cffi:defcstruct b_struct
- (struct_1 a_struct))
- - Other minor fixes in lispifying names.
- 05/02/2006: wsfulton
- Fix possible redefinition of _CRT_SECURE_NO_DEPRECATE for VC++.
- 04/14/2006: efuzzyone
- [cffi]
- Thanks to Thomas Weidner for the patch.
- - when feature export is set (export 'foo) is
- generated for every symbol
- - when feature inline is set (declaim (inline foo)) is
- generated before every function definition
- - when feature intern_function is set
- #.(value-of-intern-function "name" "nodeType" package)
- is emitted instead of the plain symbol. A sample swig-lispify
- is provided.
- - every symbol is prefixed by it's package.
- 04/13/2006: efuzzyone
- [cffi]
- Fixed the generation of wrappers for global variables.
- Added the option [no]swig-lisp which turns on/off generation
- of code for swig helper lisp macro, functions, etc.
- Version 1.3.29 (March 21, 2006)
- ===============================
- 04/05/2006: mutandiz
- [allegrocl]
- Fix output typemap of char so it produces a character instead
- of an integer. Also adds input/output typemaps for 'char *'.
- add command-line argument -isolate to generate an interface
- file that won't interfere with other SWIG generated files that
- may be used in the same application.
- 03/20/2005: mutandiz
- [allegrocl]
- More tweaks to INPUT/OUTPUT typemaps for bool.
- Fix constantWrapper for char and string literals.
- find-definition keybindings should work in ELI/SLIME.
- Output (in-package <module-name>) to lisp wrapper
- instead of (in-package #.*swig-module-name*).
- slight rework of multiple return values.
- doc updates.
- 03/17/2005: mutandiz
- [allegrocl]
- mangle names of constants generated via constantWrapper.
-
- When using OUTPUT typemaps and the function has a non-void
- return value, it should be first in the values-list, followed
- by the OUTPUT mapped values.
- Fix bug with boolean parameters, which needed to be
- passed in as int values, rather than T or NIL.
- 03/15/2006: mutandiz
- [allegrocl]
- Generate wrappers for constants when in C++ or -cwrap mode.
- Make -cwrap the default, since it is most correct. Users
- can use the -nocwrap option to avoid the creation of a .cxx
- file when interfacing to C code.
- When in -nocwrap mode, improve the handling of converting
- infix literals to prefix notation for lisp. This is very
- basic and not likely to be improved upon since this only
- applies to the -nocwrap case. Literals we can't figure out
- will result in a warning and be included in the generated
- code.
- validIdentifier now more closely approximates what may be
- a legal common lisp symbol.
- Fix typemap error in allegrocl.swg
-
- 03/12/2006: mutandiz
- [allegrocl]
- fix up INPUT/OUTPUT typemaps for bool.
- Generate c++ style wrapper functions for struct/union members
- when -cwrap option specified.
- 03/10/2006: mutandiz
- [allegrocl]
- Fix bug in C wrapper generation introduced by last allegrocl
- commit.
- 03/10/2006: wsfulton
- [Java]
- Commit #1447337 - Delete LocalRefs at the end of director methods to fix potential leak
- 03/10/2006: wsfulton
- Fix #1444949 - configure does not honor --program-prefix.
- Removed non-standard configure option --with-release-suffix. Fix the autoconf standard
- options --program-prefix and --program-suffix which were being shown in the help,
- but were being ignored. Use --program-suffix instead of --with-release-suffix now.
- 03/10/2006: wsfulton
- [Java]
- Fix #1446319 with patch from andreasth - more than one wstring parameter in director methods
- 03/07/2006: mkoeppe
- [Guile]
- Fix for module names containing a "-" in non-"shadow" mode.
- Patch from Aaron VanDevender (#1441474).
- 03/04/2006: mmatus
- - Add -O to the main program, which now enables -fastdispatch
-
- [Python]
- - Add the -fastinit option to enable faster __init__
- methods. Setting 'this' as 'self.this.append(this)' in the python
- code confuses PyLucene. Now the initialization is done in the
- the C++ side, as reported by Andi and Robin.
- - Add the -fastquery option to enable faster SWIG_TypeQuery via a
- python dict cache, as proposed by Andi Vajda
- - Avoid to call PyObject_GetAttr inside SWIG_Python_GetSwigThis,
- since this confuses PyLucene, as reported by Andi Vajda.
-
- 03/02/2006: wsfulton
- [Java]
- Removed extra (void *) cast when casting pointers to and from jlong as this
- was suppressing gcc's "dereferencing type-punned pointer will break strict-aliasing rules"
- warning. This warning could be ignored in versions of gcc prior to 4.0, but now the
- warning is useful as gcc -O2 and higher optimisation levels includes -fstrict-aliasing which
- generates code that doesn't work with these casts. The assignment is simply never made.
- Please use -fno-strict-aliasing to both suppress the warning and fix the bad assembly
- code generated. Note that the warning is only generated by the C compiler, but not
- the C++ compiler, yet the C++ compiler will also generate broken code. Alternatively use
- -Wno-strict-aliasing to suppress the warning for gcc-3.x. The typemaps affected
- are the "in" and "out" typemaps in java.swg and arrays_java.swg. Users ought to fix
- their own typemaps to do the same. Note that removal of the void * cast simply prevents
- suppression of the warning for the C compiler and nothing else. Typical change:
- From:
- %typemap(in) SWIGTYPE * %{ $1 = *($&1_ltype)(void *)&$input; %}
- To:
- %typemap(in) SWIGTYPE * %{ $1 = *($&1_ltype)&$input; %}
- From:
- %typemap(out) SWIGTYPE * %{ *($&1_ltype)(void *)&$result = $1; %}
- To:
- %typemap(out) SWIGTYPE * %{ *($&1_ltype)&$result = $1; %}
- 03/02/2006: mkoeppe
- [Guile -scm]
- Add typemaps for "long long"; whether the generated code compiles, however, depends
- on the version and configuration of Guile.
- 03/02/2006: wsfulton
- [C#]
- Add support for inner exceptions. If any of the delegates are called which construct
- a pending exception and there is already a pending exception, it will create the new
- exception with the pending exception as an inner exception.
- 03/02/2006: wsfulton
- [Php]
- Added support for Php5 exceptions if compiling against Php5 (patch from Olly Betts).
- 03/01/2006: mmatus
- Use the GCC visibility attribute in SWIGEXPORT.
- Now you can compile (with gcc 3.4 or later) using
- CFLAGS="-fvisibility=hidden".
-
- Check the difference for the 'std_containers.i' python
- test case:
-
- Sizes:
- 3305432 _std_containers.so
- 2383992 _std_containers.so.hidden
- Exported symbols (nm -D <file>.so | wc -l):
- 6146 _std_containers.so
- 174 _std_containers.so.hidden
- Execution times:
- real 0m0.050s user 0m0.039s sys 0m0.005s _std_containers.so
- real 0m0.039s user 0m0.026s sys 0m0.007s _std_containers.so.hidden
- Read http://gcc.gnu.org/wiki/Visibility for more details.
- 02/27/2006: mutandiz
- [allegrocl]
- Add support for INPUT, OUTPUT, and INOUT typemaps.
- For OUTPUT variables, the lisp wrapper returns multiple
- values.
- 02/26/2006: mmatus
- [Ruby] add argcargv.i library file.
-
- Use it as follow:
- %include argcargv.i
-
- %apply (int ARGC, char **ARGV) { (size_t argc, const char **argv) }
-
- %inline {
- int mainApp(size_t argc, const char **argv)
- {
- return argc;
- }
- }
-
- then in the ruby side:
-
- args = ["asdf", "asdf2"]
- n = mainApp(args);
-
- This is the similar to the python version Lib/python/argcargv.i
- 02/24/2006: mgossage
- Small update Lua documents on troubleshooting problems
-
- 02/22/2006: mmatus
- Fix all the errors reported for 1.3.28.
- - fix bug #1158178
- - fix bug #1060789
- - fix bug #1263457
- - fix 'const char*&' typemap in the UTL, reported by Geoff Hutchison
- - fixes for python 2.1 and the runtime library
- - fix copyctor + template bug #1432125
- - fix [ 1432152 ] %rename friend operators in namespace
- - fix gcc warning reported by R. Bernstein
- - avoid assert when finding a recursive scope inheritance,
- emit a warning in the worst case, reported by Nitro
- - fix premature object deletion reported by Paul in tcl3d
- - fix warning reported by Nitro in VC7
- - more fixes for old Solaris compiler
- - fix for python 2.3 and gc_refs issue reported by Luigi
- - fix fastproxy for methods using kwargs
- - fix overload + protected member issue reported by Colin McDonald
- - fix seterrormsg as reported by Colin McDonald
- - fix directors, now the test-suite runs again using -directors
- - fix for friend operator and Visual studio and bug 1432152
- - fix bug #1435090
- - fix using + %extend as reported by William
- - fix bug #1094964
- - fix for Py_NotImplemented as reported by Olly and Amaury
- - fix nested namespace issue reported by Charlie
- and also:
-
- - allow director protected members by default
- - delete extra new lines in swigmacros[UTL]
- - cosmetic for generated python code
- - add the factory.i library for UTL
- - add swigregister proxy method and move __repr__ to a
- single global module [python]
- 02/22/2006: mmatus
- When using directors, now swig will emit all the virtual
- protected methods by default.
- In previous releases, you needed to use the 'dirprot'
- option to achieve the same.
- If you want, you can disable the new default behaviour,
- use the 'nodirprot' option:
- swig -nodirprot ...
- and/or the %nodirector feature for specific methods, i.e.:
- %nodirector Foo::bar;
- struct Foo {
- virtual ~Foo();
- protected:
- virtual void bar();
- };
-
- As before, pure abstract protected members are allways
- emitted, independent of the 'dirprot/nodirprot' options.
- 02/22/2006: mmatus
- Add the factory.i library for languages using the UTL (python,tcl,ruby,perl).
-
- factory.i implements a more natural wrap for factory methods.
- For example, if you have:
-
- ---- geometry.h --------
- struct Geometry {
- enum GeomType{
- POINT,
- CIRCLE
- };
-
- virtual ~Geometry() {}
- virtual int draw() = 0;
-
- //
- // Factory method for all the Geometry objects
- //
- static Geometry *create(GeomType i);
- };
-
- struct Point : Geometry {
- int draw() { return 1; }
- double width() { return 1.0; }
- };
-
- struct Circle : Geometry {
- int draw() { return 2; }
- double radius() { return 1.5; }
- };
-
- //
- // Factory method for all the Geometry objects
- //
- Geometry *Geometry::create(GeomType type) {
- switch (type) {
- case POINT: return new Point();
- case CIRCLE: return new Circle();
- default: return 0;
- }
- }
- ---- geometry.h --------
-
-
- You can use the %factory with the Geometry::create method as follows:
-
- %newobject Geometry::create;
- %factory(Geometry *Geometry::create, Point, Circle);
- %include "geometry.h"
-
- and Geometry::create will return a 'Point' or 'Circle' instance
- instead of the plain 'Geometry' type. For example, in python:
-
- circle = Geometry.create(Geometry.CIRCLE)
- r = circle.radius()
-
- where 'circle' now is a Circle proxy instance.
- 02/17/2006: mkoeppe
- [MzScheme] Typemaps for all integral types now accept the full range of integral
- values, and they signal an error when a value outside the valid range is passed.
- [Guile] Typemaps for all integral types now signal an error when a value outside
- the valid range is passed.
- 02/13/2006: mgossage
- [Documents] updated the extending documents to give a skeleton swigging code
- with a few typemaps.
- [Lua] added an extra typemap for void* [in], so a function which requires a void*
- can take any kind of pointer
- Version 1.3.28 (February 12, 2006)
- ==================================
- 02/11/2006: mmatus
- Fix many issues with line counting and error reports.
- 02/11/2006: mmatus
- [Python] Better static data member support, if you have
-
- struct Foo {
- static int bar;
- };
- then now is valid to access the static data member, ie:
- f = Foo()
- f.bar = 3
- just as in C++.
- 02/11/2006: wsfulton
- [Perl]
- Fixed code generation to work again with old versions of Perl
- (5.004 and later tested)
- 02/04/2006: mmatus
- [Python] Add the %extend_smart_pointer() directive to extend
- SWIG smart pointer support in python.
- For example, if you have a smart pointer as:
-
- template <class Type> class RCPtr {
- public:
- ...
- RCPtr(Type *p);
- Type * operator->() const;
- ...
- };
-
- you use the %extend_smart_pointer directive as:
-
- %extend_smart_pointer(RCPtr<A>);
- %template(RCPtr_A) RCPtr<A>;
-
- then, if you have something like:
- RCPtr<A> make_ptr();
- int foo(A *);
- you can do the following:
- a = make_ptr();
- b = foo(a);
- ie, swig will accept a RCPtr<A> object where a 'A *' is
- expected.
- Also, when using vectors
-
- %extend_smart_pointer(RCPtr<A>);
- %template(RCPtr_A) RCPtr<A>;
- %template(vector_A) std::vector<RCPtr<A> >;
-
- you can type
- a = A();
- v = vector_A(2)
- v[0] = a
- ie, an 'A *' object is accepted, via implicit conversion,
- where a RCPtr<A> object is expected. Additionally
- x = v[0]
- returns (and sets 'x' as) a copy of v[0], making reference
- counting possible and consistent.
- %extend_smart_pointer is just a collections of new/old
- tricks, including %typemaps and the new %implicitconv
- directive.
- 02/02/2006: mgossage
- bugfix #1356577, changed double=>lua_number in a few places.
- added the std::pair wrapping
- 01/30/2006: wsfulton
- std::string and std::wstring member variables and global variables now use
- %naturalvar by default, meaning they will now be wrapped as expected in all languages.
- Previously these were wrapped as a pointer rather than a target language string.
- It is no longer necessary to add the following workaround to wrap these as strings:
- %apply const std::string & { std::string *}
- *** POTENTIAL INCOMPATIBILITY ***
- 01/28/2006: mkoeppe
- [Guile -scm]
- Add typemaps for handling of member function pointers.
- 01/24/2006: mmatus
- - Better support for the %naturalvar directive, now it
- works with the scripting languages as well as
- Java/C#.
-
- Now, it can also be applied to class types:
- %naturalvar std::string;
- %include <std_string.i>
-
- that will tell swig to use the 'natural' wrapping
- mechanism to all std::string global and member
- variables.
- - Add support for the %allowexcept feature along the
- scripting languages, which allows the %exception feature
- to be applied to the variable access methods. Also, add
- the %exceptionvar directive to specify a distintic
- exception mechanism only for variables.
-
-
- - Add more docs for the %delobject directive to mark a method as a
- destructor, 'disowning' the first argument. For example:
- %newobject create_foo;
- %delobject destroy_foo;
- Foo *create_foo() { return new Foo(); }
- void destroy_foo(Foo *foo) { delete foo; }
- or in a member method as:
- %delobject Foo::destroy;
- class Foo {
- public:
- void destroy() { delete this;}
- private:
- ~Foo();
- };
- 01/24/2006: mgossage
- [Lua]
- - Removed the type swig_lua_command_info & replace with luaL_reg
- (which then broke the code), fixed this
- - added an additional cast in the typemaps for enum's
- due to the issue that VC.Net will not allow casting of
- a double to an enum directly. Therefore cast to int then to enum
- (thanks to Jason Rego for this observation)
- 01/16/2006: mmatus (Change disabled... will be back in CVS soon)
- Add initial support for regexp via the external library
- RxSpencer. SWIG doesn't require this library to compile
- and/or run. But if you specify --with-rxspencer, and the
- library is found during installation, then swig will use
- it in three places:
- - In %renames rules, via the new rxsmatch rules, for example:
-
- %rename("%(lowercase)",rxsmatch$name="GSL_.*") "";
- %rename("%(lowercase)",rxsmatch$nodeType="enum GSL_.*") "";
-
- rxsmatch is similar to the match rule, it just uses
- the RxSpencer regexp library to decide if there is a
- match with the provided regexp. As with the match
- rule, you can also use the negate rule notrxsmatch.
- - In the %rename target name via the rxstarget option, for example:
-
- %rename("%(lowercase)",rxstarget=1) "GSL_.*";
- where the target name "GSL.*" is now understood as a
- regexp to be matched.
-
- - In the new encoder "rxspencer", which looks like:
- %(rxspencer:[regexp][replace])s
- where "regexp" is the regular expression and "replace"
- is a string used as a replacement, where the @0,@1,...,@9
- pseudo arguments are used to represent the
- corresponding matching items in the reg expression.
- For example:
-
- %(rxspencer:[GSL.*][@0])s <- Hello ->
- %(rxspencer:[GSL.*][@0])s <- GSLHello -> GSLHello
- %(rxspencer:[GSL(.*)][@1])s <- GSLHello -> Hello
- %(rxspencer:[GSL(.*)][gsl@1])s <- GSLHello -> gslHello
- Another example could be:
- %rename("%(lowercase)s",sourcefmt="%(rxspencer:[GSL_(.*)][@1])s",%$isfunction) "";
- which take out the prefix "GSL_" and returns all the
- function names in lower cases, as following:
- void GSL_Hello(); -> hello();
- void GSL_Hi(); -> hi();
- const int GSL_MAX; -> GSL_MAX; // no change, is not a function
-
- We use the RxSpencer as an initial test bed to
- implemention while we decide which library will be
- finally added to swig.
- You can obtain the RxSpencer library from
-
- http://arglist.com/regex (Unix)
- or
-
- http://gnuwin32.sourceforge.net/packages.html (Windows)
- Once installed, use "man rxspencer" to get more info
- about the regexp format, or just google rxspencer.
- Since now you can enable the rxsmatch rules (see above),
- the simple or '|' support for the match rules
- (01/12/2006: mmatus) is disabled. Still, if you have
- problems with the rxspencer library, you can re-enable
- the simple 'match or' support using
- -DSWIG_USE_SIMPLE_MATCHOR.
-
- 01/16/2006: mmatus
- Change the %rename predicates to use the prefix '%$', as in:
-
- %rename("%(utitle)s",%$isfunction,%$ismember) "";
-
- to avoid clashes with other swig macros/directives.
- 01/14/2006: cfisavage
- [Ruby]
- Added support for Ruby bang! methods via a new %bang feature.
- Bang methods end in exclamation points and indicate that the
- object being processed will be modified in-place as
- opposed to being copied.
- 01/12/2006: cfisavage
- [Ruby]
- Updated the Ruby module to automatically convert
- method names to lower_case_with_underscores using the
- new %rename functionality.
- 01/12/2006: mmatus
- - Add aliases for 'case' encoders used with %rename/%namewarn
- %(uppercase)s hello_world -> HELLO_WORLD
- %(lowercase)s HelloWorld -> helloworld
- %(camelcase)s hello_world -> HelloWorld
- %(undercase)s HelloWorld -> hello_world
- 01/12/2006: mmatus
- - Add the -dump_parse_module and -dump_parse_top options,
- which are similar to -dump_module and -dump_top, but they
- dump the node trees just after parsing, showing only the
- attributes visible at the parsing stage, and not the added
- later in typemap.cxx, allocate.cxx, lang.cxx or elsewhere.
-
- Besides debugging porpuses, these options are very useful
- if you plan to use %rename in an "advance way", since it
- shows only and all the node's attributes you can use
- inside the match rules.
- 01/12/2006: mmatus
- - Add predicates to %rename, so, you don't need to
- remember, for example, how to match a member function.
- Now it is easy, for example to use the 'utitle' encoder
- in all the member methods, you type:
- %rename("%(utitle)s",%isfunction,%ismember) "";
- or to ignore all the enumitems in a given class:
- %rename("$ignore", %isenumitem, %classname="MyClass") "";
- Available predicates are (see swig.swg):
- %isenum
- %isenumitem
- %isaccess
- %isclass
- %isextend
- %isextend
- %isconstructor
- %isdestructor
- %isnamespace
- %istemplate
- %isconstant
-
- %isunion
- %isfunction
- %isvariable
- %isimmutable
-
- %isstatic
- %isfriend
- %istypedef
- %isvirtual
- %isexplicit
- %isextern
-
- %ismember
- %isglobal
- %innamespace
- %ispublic
- %isprotected
- %isprivate
-
- %classname
- These predicates correspond to specific 'match'
- declarations, which sometimes are not as evident as the
- predicates names.
- - Add the or '|' operation in %rename match, for
- example to capitalize all the constants (%constant or
- const cdecl):
- %rename("%(upper)s",match="cdecl|constant",%isimmutable) "";
-
- 01/12/2006: mgossage
- - Partial fixed of errors under C89, bug #1356574
- (converted C++ style comments to C style)
- - Added patches from neomantra@users.sf.net #1379988 and #1388343
- missing a 'return' statement for error conditions
- also updated the %init block bug #1356586
-
- 01/10/2006: mmatus
- - Add the 'utitle' encoder, as an example of how to add
- your own encoder. I added the encoder method in misc.c
- but developers can add others, the same way, inside any
- target language.
-
- Well, 'utitle' is the reverse of 'ctitle', ie:
- %rename("%(ctitle)s") camel_case; -> CamelCase;
- %rename("%(utitle)s") CamelCase; -> camel_case;
-
- 01/10/2006: cfisavage
- [Ruby]
- Updated Ruby Exception handling. Classes that are specified in throws clauses,
- or are marked as %exceptionclass, are now inherited from rb_eRuntimeError.
- This allows instances of these classes to be returned to Ruby as exceptions.
- Thus if a C++ method throws an instance of MyException, the calling Ruby
- method will get back a MyException object. To see an example,
- look at ruby/examples/exception_class.
- 01/10/2006: mmatus
-
- - Add the %catches directive, which complements the %exception
- directive in a more automatic way. For example, if you have
- int foo() throw(E1);
- swig generates the proper try/catch code to dispatch E1.
-
- But if you have:
- int barfoo(int i) {
- if (i == 1) {
- throw E1();
- } else {
- throw E2();
- }
- return 0;
- }
- ie, where there is no explicit exception specification in the decl, you
- end up doing:
-
- %exception barfoo {
- try {
- $action
- } catch(E1) { ... }
- } catch(E2) { ... }
- }
-
- which is very tedious. Well, the %catches directive defines
- the list of exceptions to catch, and from swig:
-
- %catches(E1,E2) barfoo(int i);
- int barfoo(int i);
- is equivalent to
- int barfoo(int i) throw(E1,E2);
- Note, however, that the %catches list doesn't have to
- correspond to the C++ exception specification. For example, if you
- have:
- struct E {};
- struct E1 : E {};
- struct E2 : E {};
- int barfoo(int i) throw(E1,E2);
- you can define
-
- %catches(E) barfoo(int i);
-
- and swig will generate an action code equivalent to
- try {
- $action
- } catch(E &_e) {
- <raise _e>;
- }
- Of course, you still have to satisfy the C++ restrictions,
- and the catches list must be compatible (not the same)
- as the original list of types in the exception specification.
- Also, you can now specify that you want to catch the
- unknown exception '...', for example:
- %catches(E1,E2,...) barfoo(int);
- In any case, the %catches directive will emit the
- code to convert into the target language error/exception
- using the 'throws' typemap.
- For the '...' case to work, you need to
- write the proper typemap in your target language. In the
- UTL, this looks like:
- %typemap(throws) (...) {
- SWIG_exception(SWIG_RuntimeError,"unknown exception");
- }
- 01/09/2006: mutandiz
- [Allegrocl]
- Fixes a number of SEGVs primarily in the handling of
- various anonymous types. Found in a pass through the
- swig test-suite. Still more to do here, but this is a
- good checkpoint.
- Adds -cwrap and -nocwrap as an allegrocl specific
- command-line argument. Controls generating of a C
- wrapper file when wrapping C code. By default only a
- lisp file is created for C code wrapping.
- Doc updates for the command-line arguments and fixes as
- pointed out on swig-devel
- 01/05/2006: wsfulton
- [Java] Fix unsigned long long and const unsigned long long & typemaps
- - Bug #1398394 with patch from Dries Decock
- 01/06/2006: mmatus
- Add 'named' warning codes, now in addition to:
-
- %warnfilter(813);
-
- you can use
- %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE);
- just use the same code name found in Source/Include/swigwarn.h
- plus the 'SWIG' prefix.
- If a developer adds a new warning code, the Lib/swigwarn.swg file
- will be generated when running the top level make.
- 01/05/2006: cfisavage
- [Ruby]
- Reimplemented object tracking for Ruby. The new implementation works
- by expanding the swig_class structure for Ruby by adding a trackObjects
- field. This field can be set/unset via %trackobjects as explained
- in the Ruby documentation. The new implementation is more robust
- and takes less code to implement.
-
- 01/05/2006: wsfulton
- Fix for %extend and static const integral types, eg:
- class Foo {
- public:
- %extend {
- static const int bar = 42;
- }
- };
- 12/30/2005: mmatus
- - Add info for old and new debug options:
-
- -dump_top - Print information of the entire node tree, including system nodes
- -dump_module - Print information of the module node tree, avoiding system nodes
- -dump_classes - Print information about the classes found in the interface
- -dump_typedef - Print information about the types and typedefs found in the interface
- -dump_tags - Print information about the tags found in the interface
- -debug_typemap - Print information for debugging typemaps
- -debug_template - Print information for debugging templates
- - Add the fakeversion. If you have a project that uses
- configure/setup.py, or another automatic building system
- and requires a specific swig version, let say 1.3.22
- you can use:
- SWIG_FEATURES="-fakeversion 1.3.22"
- or
-
- swig -fakeversion 1.3.22
- and then swig -version will report 1.3.22 instead of the
- current version.
- Typical use would be
- SWIG_FEATURES="-fakeversion 1.3.22" ./configure
- 12/30/2005: mmatus
- - Add option/format support to %rename and %namewarn.
- Now %namewarn can force renaming, for example:
- %namewarn("314: import is a keyword",rename="_%s") "import";
-
- and rename can also support format forms:
- %rename("swig_%s") import;
- Now, since the format is processed via swig Printf, you
- can use encoders as follows:
- %rename("%(title)s") import; -> Import
- %rename("%(upper)s") import; -> IMPORT
- %rename("%(lower)s") Import; -> import
- %rename("%(ctitle)s") camel_case; -> CamelCase
-
- This will allow us to add more encoders, as the
- expected one for regular expressions.
- - Add the above 'ctitle' encoder, which does the camel case:
- camel_case -> CamelCase
-
- - Also, while we get the regexp support, add the 'command' encoder,
- you can use it as follows
- %rename("%(command:sed -e 's/\([a-z]\)/\U\\1/' <<< )s") import;
- then swig will popen the command
-
- "sed -e 's/\([a-z]\)/\U\\1/' <<< import"
-
- see below for anonymous renames for better examples.
- - The rename directive now also allows:
- - simple match: only apply the rename if a type match
- happen, for example
- %rename(%(title)s,match="enumitem") hello;
- enum Hello {
- hi, hello -> hi, Hello
- };
- int hello() -> hello;
- - extended match: only apply the rename if the 'extended attribute' match
- occurred, for example:
- // same as simple match
- %rename(%(title)s,match$nodeType="enumitem") hello;
- enum Hello {
- hi, hello -> hi, Hello
- };
- Note that the symbol '$' is used to define the attribute name in
- a 'recursive' way, for example:
- // match only hello in 'enum Hello'
- %rename(%(title)s,match$parentNode$type="enum Hello") hello;
- enum Hello {
- hi, hello -> hi, Hello // match
- };
- enum Hi {
- hi, hello -> hi, hello // no match
- };
- here, for Hello::hi, the "parentNode" is "Hello", and its "type"
- is "enum Hello".
-
-
- - Anonymous renames: you can use 'anonymous' rename directives, for example:
- // rename all the enum items in Hello
- %rename(%(title)s,match$parentNode$type="enum Hello") "";
- enum Hello {
- hi, hello -> Hi, Hello // match both
- };
- enum Hi {
- hi, hello -> hi, hello // no match
- };
-
- // rename all the enum items
- %rename(%(title)s,match$nodeType="enumitem") "";
- // rename all the items in given command (sloooow, but...)
- %rename(%(command:<my external cmd>)s) "";
-
- Anonymous renames with commands can be very powerful, since you
- can 'outsource' all the renaming mechanism (or part of it) to an
- external program:
-
- // Uppercase all (and only) the names that start with 'i'
- %rename("%(command:awk '/^i/{print toupper($1)}' <<<)s") "";
-
- int imported() -> IMPORTED;
- int hello() -> hello
- Note that if the 'command' encoder returns an empty string, swig
- understands that no rename is necessary.
- Also note that %rename 'passes' the matched name. For example, in
- this case
- namespace ns1 {
- int foo();
- }
- namespace ns2 {
- int bar();
- }
- the external program only receives "foo" and "bar". If needed,
- however, you can request the 'fullname'
-
- %rename("%(command:awk 'awk '/ns1::/{l=split($1,a,"::"); print toupper(a[l])}'' <<<)s",fullname=1) "";
-
- ns1::foo -> FOO
- ns2::bar -> bar
-
- - Mixing encoders and matching: of course, you can do mix commands
- and match fields, for example:
- %rename("%(<my encoder for fncs>)",match="cdecl") "";
- %rename("%(<my encoder for enums>)",match="enumitem") "";
- %rename("%(<my encoder for enums inside a class>)",match="enumitem",
- match$parentNode$parentNode$nodeType="class") "";
-
- Use "swig -dump_parse_module" to see the attribute names you can use to
- match a specific case.
-
- - 'sourcefmt' and 'targetfmt': sometimes you need to
- process the 'source' name before comparing, for example
- %namewarn("314: empty is a keyword",sourcefmt="%(lower)s") "empty";
- then if you have
- int Empty(); // "Empty" is the source
-
- you will get the keyword warning since 'Empty' will be
- lower cased, via the sourcefmt="%(lower)s" option,
- before been compared to the 'target' "empty".
- There is an additional 'targetfmt' option to process the
- 'target' before comparing.
- - complementing 'match': you can use 'notmatch', for example
-
- %namewarn("314: empty is a keyword",sourcefmt="%(lower)s",notmatch="namespace") "empty";
- here, the name warning will be applied to all the symbols except namespaces.
-
-
- 12/30/2005: mmatus
- - Add initial support for gcj and Java -> <target language> mechanism.
- See examples in:
-
- Examples/python/java
- Examples/ruby/java
- Examples/tcl/java
- to see how to use gcj+swig to export java classes into
- python/ruby/tcl.
-
- The idea is to put all the common code for gcj inside
- Lib/gcj
- and localize specific types such as jstring, as can be found
- in
- Lib/python/jstring.i
- Lib/ruby/jstring.i
- Lib/tcl/jstring.i
- Using the UTL, this is very easy, and the perl version for
- jstring.i will be next.
-
- 12/29/2005: mmatus
- - Add the copyctor feature/directive/option to enable the automatic
- generation of copy constructors. Use as in:
- %copyctor A;
- struct A {
- };
- then this will work
- a1 = A();
- a2 = A(a1);
- Also, since it is a feature, if you just type
- %copyctor;
- that will enable the automatic generation for all the
- classes. It is also equivalent to
- swig -copyctor -c++ ...
- Notes:
- 1.- The feature only works in C++ mode.
- 2.- The automatic creation of the copy constructor will
- usually produce overloading. Hence, if the target
- language doesn't support overloading, a special name
- will be used (A_copy).
-
- 3.- For the overloading reasons above, it is probably not
- a good idea to use the flag when, for example, you are
- using keywords in Python.
- 4.- The copyctor automatic mechanism follows more or less
- the same rules as the default constructor mechanism,
- i.e., a copy constructor will not be added if the
- class is abstract or if there is a pertinent non-public
- copy ctor in the class or its hierarchy.
- Hence, it might be necessary for you to complete the
- class declaration with the proper non-public copy ctor
- to avoid a wrong constructor addition.
-
- - Fix features/rename for templates ctor/dtor and other
- things around while adding the copyctor mechanism.
-
- 12/27/2005: mmatus
- - Add the 'match' option to typemaps. Assume you have:
- %typemap(in) SWIGTYPE * (int res) {..}
- %typemap(freearg) SWIGTYPE * { if (res$argnum) ...}
- then if you do
-
- %typemap(in) A * {...}
- swig will 'overload the 'in' typemap, but the 'freearg'
- typemap will be also applied, even when this is wrong. The old
- solutions is to write:
- %typemap(in) A * {...}
- %typemap(freeag) A * ""
- overload 'freearg' with an empty definition.
- The problem is, however, there is no way to know you need
- to do that until you start getting broken C++ code, or
- worse, broken runtime code.
- The same applies to the infamous 'typecheck' typemap,
- which always confuses people, since the first thing you do
- is to just write the 'in' typemap.
- The 'match' option solves the problem, and if instead you write:
- %typemap(in) SWIGTYPE * (int res) {..}
- %typemap(freearg,match="in") SWIGTYPE * { if (res$argnum) ...}
- %typemap(typecheck,match="in",precedence...) SWIGTYPE * {...}
-
- it will tell swig to apply the 'freearg/typecheck'
- typemaps only if they 'match' the type of the 'in'
- typemap. The same can be done with other typemaps as:
- %typemap(directorout) SWIGTYPE * {...}
- %typemap(directorfree,match="directorout") SWIGTYPE * {...}
-
- 12/27/2005: mmatus
- - Add the 'naturalvar' option/mode/feature to treat member
- variables in a more natural way, ie, similar to the global
- variable behavior.
- You can use it in a global way via the command line
- swig -naturalvar ...
- or the module mode option
-
- %module(naturalvar=1)
- both forms make swig treat all the member variables in the
- same way it treats global variables.
- Also, you can use it in a case by case approach for
- specific member variables using the directive form:
- %naturalvar Bar::s;
-
- Then, in the following case for example:
- std::string s;
- struct Bar {
- std::string s;
- };
- you can do:
- b = Bar()
- b.s ="hello"
- cvar.s = "hello"
-
- if (b.s != cvar.s):
- raise RuntimeError
-
- This is valid for all the languages, and the
- implementation is based on forcing the use of the
- const SWIGTYPE& (C++)/SWIGTYPE (C) typemaps for the
- get/set methods instead of the SWIGTYPE * typemaps.
- Hence, for 'naturalvar' to work, each target language
- must implement 'typemap(in/out) const Type&' properly.
- The 'naturalvar' option replaces or makes workarounds such as:
-
- %apply const std::string & { std::string *}
- unnecessary.
- Note1: If your interface has other kinds of workarounds to
- deal with the old 'unnatural' way to deal with member
- variables (returning/expecting pointers), the
- 'naturalvar' option could break them.
-
- Note2: the option has no effect on unnamed types, such
- as unnamed nested unions.
-
-
- 12/27/2005: mmatus
- - Add more 'expressive' result states for the typemap
- libraries.
- In the past, for scripting languages, you would do checking something like:
- if (ConvertPtr(obj,&vptr,ty,flags) != -1) {
- // success
- } else {
- // error
- }
- Now the result state can carry more information,
- including:
- - Error state: like the old -1/0, but with error codes from swigerrors.swg.
- int res = ConvertPtr(obj,&vptr,ty,flags);
- if (SWIG_IsOK(res)) {
- // success code
- } else {
- SWIG_Error(res); // res carries the error code
- }
- - Cast rank: when returning a simple successful
- conversion, you just return SWIG_OK, but if you need
- to do a 'cast', you can add the casting rank, ie:
-
- if (PyFloat_Check(obj)) {
- value = PyFloat_AsDouble(obj);
- return SWIG_OK;
- } else if (PyInt_Check(obj)) {
- value = (double) PyInt_AsLong(obj);
- return SWIG_AddCast(SWIG_OK);
- }
-
- later, the casting rank is used to properly dispatch
- the overloaded function, for example. This of course
- requires your language to support and use the new
- dispatch cast/rank mechanism (Now mainly supported in
- perl and python, and easily expandable to ruby and tcl).
-
- - [UTL] Add support for the new 'expressive' result states.
- 12/27/2005: mmatus
- - Add support for the C++ implicit conversion mechanism, which
- required some modifications in parser.y (to recognize
- 'explicit') and overload.cxx (to replace $implicitconv as
- needed).
-
- Still, real support in each target language requires each
- target language to be modified. Python provides an example,
- see below.
- - Add support for native C++ implicit conversions, ie, if you
- have
- %implicitconv A;
- struct A {
- int ii;
- A() {ii = 1;}
- A(int) {ii = 2;}
- A(double) {ii = 3;}
- explicit A(char *s) {ii = 4;}
- };
-
- int get(const A& a) {return a.ii;}
- you can call:
- a = A()
- ai = A(1)
- ad = A(1.0)
- as = A("hello")
-
- # old forms
- get(a) -> 1
- get(ai) -> 2
- get(ad) -> 3
- get(as) -> 4
-
- #implicit conversions
- get(1) -> 2
- get(1.0) -> 3
- get("hello") -> Error, explicit constructor
- Also, as in C++, now implicit conversions are supported in
- variable assigments, and if you have:
- A ga;
- struct Bar {
- A a;
- };
- you can do:
- cvar.ga = A(1)
- cvar.ga = 1
- cvar.ga = 1.0
- cvar.ga = A("hello")
- cvar.ga = "hello" -> error, explicit constructor
- b = Bar()
- b.a = A("hello")
- b.a = 1
- b.a = 1.0
- b.a = "hello" -> error, explicit constructor
- Note that the last case, assigning a member var directly,
- also requires the 'naturalvar' option.
- This support now makes the old '%implicit' macro, which
- was found in 'implicit.i' and it was fragile in many ways,
- obsolete, and you should use the new '%implicitconv'
- directive instead.
- Note that we follow the C++ conventions, ie, in the
- following the implicit conversion is allowed:
- int get(A a) {return a.ii;}
- int get(const A& a) {return a.ii;}
-
- but not in these cases:
- int get(A *a) {return a->ii;}
- int get(A& a) {return a.ii;}
-
- Also, it works for director methods that return a by value
- result, ie, the following will work:
- virtual A get_a() = 0;
- def get_a(self):
- return 1
- but not in this case:
- virtual const A& get_a() = 0;
- virtual A& get_a() = 0;
- virtual A* get_a() = 0;
-
- Notes:
- - the implicitconv mechanism is implemented by directly
- calling/dispatching the python constructor, triggering a
- call to the __init__method. Hence, if you expanded the
- __init__ method, like in:
- class A:
- def __init__(self,args):
- <swig code>
- <my code here>
- then 'my code' will also be executed.
-
- - Since the %implicitconv directive is a SWIG feature, if you type:
-
- %implicitconv;
- that will enable implicit conversion for all the classes in
- your module.
- But if you are worried about performance, maybe that will be
- too much, especially if you have overloaded methods, since
- to resolve the dispatching problem, python will efectively
- try to call all the implicit constructors as needed.
- - For the same reason, it is highly recommended that you use
- the new 'castmode' when mixing implicit conversion and
- overloading.
- - [python] The %implicit directive is declared obsolete, and
- you should use %implicitconv instead. If you include
- the implicit.i file, a warning will remind you of this.
- Note: Since %implicit is fragile, just replacing it by
- %implicitconv could lead to different behavior. Hence, we
- don't automatically switch from to the other, and the user
- must migrate to the new %implicitconv directive manually.
- 12/26/2005: wsfulton
- [C#]
- Modify std::vector wrappers to use std::vector::value_type as this is
- closer to the real STL declarations for some methods, eg for push_back().
- Fixes some compilation errors for some compilers eg when the templated
- type is a pointer.
- [Java]
- std::vector improvements - a few more methods are wrapped and specializations are
- no longer required. The specialize_std_vector macro is no longer needed (a
- warning is issued if an attempt is made to use it).
- 12/26/2005: wsfulton
- [Java, C#]
- Add in pointer reference typemaps. This also enables one to easily wrap
- std::vector<T> where T is a pointer.
- 12/24/2005: efuzzyone
- [CFFI] The cffi module for SWIG:
- - Fully supports C, but provides limited supports for C++, in
- particular C++ support for templates and overloading needs to
- be worked upon.
- 12/23/2005: mmatus
- [python] Add the castmode that allows the python
- type casting to occur.
- For example, if you have 'int foo(int)', now
-
- class Ai():
- def __init__(self,x):
- self.x = x
- def __int__(self):
- return self.x
- foo(1) // Ok
- foo(1.0) // Ok
- foo(1.3) // Error
- a = Ai(4)
- foo(ai) // Ok
- The castmode, which can be enabled either with the
- '-castmode' option or the %module("castmode") option, uses
- the new cast/rank dispatch mechanism. Hence, now if you
- have 'int foo(int); int foo(double);', the following works
- as expected:
- foo(1) -> foo(int)
- foo(1.0) -> foo(double)
- ai = Ai(4)
- foo(ai) -> foo(int)
- Note1: the 'castmode' could disrupt some specialized
- typemaps. In particular, the "implicit.i" library seems to
- have problem with the castmode. But besides that one, the
- entire test-suite compiles fine with and without the
- castmode.
- Note2: the cast mode can't be combined with the fast
- dispatch mode, ie, the -fastdispatch option has no effect
- when the cast mode is selected. The penalties, however,
- are minimum since the cast dispatch code is already based
- on the same fast dispatch mechanism.
- See the file overload_dispatch_cast_runme.py file for
- new cases and examples.
- 12/22/2005: mmatus
- Add the cast and rank mechanism to dispatch overloading
- functions. The UTF supports it now, but for each language
- it must be decided how to implement and/or when to use it.
- [perl] Now perl uses the new cast and rank dispatch
- mechanism, which solves all the past problems known
- in perl, such as the old '+ 1' problem:
- int foo(int);
-
- $n = 1
- $n = $n + 1
- $r = foo(n)
- also works:
- foo(1);
- foo("1");
- foo(1.0);
- foo("1.0");
- but fails
- foo("l");
- and when overloading foo(int) and foo(double);
- foo(1) -> foo(int)
- foo(1.0) -> foo(double)
- foo("1") -> foo(int)
- foo("1.0") -> foo(double)
- foo("l") -> error
- foo($n) -> foo(int) for good perl versions
- foo($n) -> foo(double) for old bad perl versions
- when overloading foo(int), foo(char*) and foo(double):
- foo(1) -> foo(int)
- foo(1.0) -> foo(double)
- foo("1") -> foo(char*)
- foo("1.0") -> foo(char*)
- foo("l") -> foo(char*)
- Note: In perl the old dispatch mechanism was broken,
- so, we don't provide an option to enable the old one
- since, again, it was really really broken.
- See 'overload_simple_runme.pl' for more cases and tests.
- PS: all the old known issues are declared resolved, any
- new "problem" that could be discovered is declared,
- a priori, as "features" of the new dispatch mechanism
- (until we find another solution at least).
-
-
- *** POTENTIAL INCOMPATIBILITY ***
- As with the introduction of the UTF, some things could
- now start to work as expected, and people used to deal or
- workaround previous bugs related to the dispatch
- mechanism, could see now a difference in perl behavior.
- 12/21/2005: mmatus
- - The '-nodefault' flag (pragma and feature) now generates
- a warning, and recommends to use the explicit
- -nodefaultctor and -nodefaultdtor options.
-
- The reason to split the 'nodefault' behavior is that, in
- general, ignoring the default destructor generates memory
- leaks in the target language. Hence, is too risky just to
- disable both the default constructor and destructor
- at the same time.
- If you need to disable the default destructor, it is
- also recommended you use the directive form:
- %nodefaultdtor MyVerySpecialClass;
- for specific classes, and always avoid using the global
- -nodefault and -nodefaultdtor options.
-
- 12/21/2005: wsfulton
- [Java, C#]
- Fix incorrect code generation when the intermediary classname is changed
- in the module directive from its default. For example:
- %module(jniclassname="myimclassnewname") "mymodule" // Java
- %module(imclassname="myimclassnewname") "mymodule" // C#
- Add in new special variable $imclassname. See docs.
- 12/17/2005: mmatus
- [Python]
- - Add the -aliasobj0/-noaliasobj0 options to use with
- -fastunpack and/or -O and old typemaps that use 'obj0'
- directly.
- So, if you compile your code using -O and get errors about
- the undeclared 'obj0' variable, run again using
- swig -O -aliasobj0 -python ....
-
- For new typemaps, never use 'obj0' directly, if needed,
- use the '$self' name that will be properly expanded to
- 'obj0' (nofastunpack) or 'swig_obj[0]' (fastunpack).
-
- If you have no idea what I am talking about, better, that
- means you have no typemap with this problem.
- 12/14/2005: mmatus
- [Python]
- - Add the -fastunpack/-nofastunpack options to enable/disable
- the use of the internal UnpackTuple method, instead of
- calling the one from the python C API.
- The option -O now also implies -fastunpack.
-
- 12/11/2005: mmatus
- [Python]
- - Add the -proxydel/-noproxydel options to enable/disable
- the generation of proxy/shadow __del__ methods, even
- when now they are redundant, since they are empty.
- However, old interfaces could rely on calling them.
- The default behavior is to generate the __del__ methods
- as in 1.3.27 or older swig versions.
- The option -O now also implies -noproxydel.
- 12/10/2005: mmatus
- [UTF]
- - Fix unnecessary calls to SWIG_TypeQuery for 'char *'
- and 'wchar_t *', problem found by Clay Culver while
- profiling the PyOgre project.
-
- [Python]
- - Add the -dirvtable/-nodirvtable to enable/disable
- a pseudo virtual table used for directors, avoiding
- the need to resolve the python method at each call.
-
- - Add the -safecstrings/-nosafecstrings options to
- enable/disable the use of safe conversions from PyString
- to char *. Python requires you to never change the internal
- buffer directly, and hence 'safectrings' warranties that
- but returning a copy of the internal python string buffer.
- The default, as in previous releases, is to return a
- pointer to the buffer (nosafecstrings), so, it is the user's
- responsibility to avoid its modification.
-
- - Add the -O option to enable all the optimization options
- at once, initially equivalent to
- -modern -fastdispatch -dirvtable -nosafecstrings -fvirtual
- 12/08/2005: mmatus
- - Add the -fastdispatch option (fastdispatch feature). This
- enables the "fast dispatch" mechanism for overloaded
- methods provided by Salvador Fandi~no Garc'ia (#930586).
- The resulting code is smaller and faster since less type
- checking is performed. However, the error messages you
- get when the overloading is not resolved could be
- different from what the traditional method returns.
- With the old method you always get an error such as
- "No matching function for overloaded ..."
- with the new method you can also get errors such as
- "Type error in argument 1 of type ..."
- See bug report #930586 for more details.
-
- So, this optimization must be explicitly enabled by users.
- The new mechanism can be used as:
- swig -fastdispatch
- or using the feature form
- %feature("fastdispatch") method;
- or
- %fastdispatch method;
-
- 12/06/2005: mmatus
- - Several memory and speed improvements, specially for
- templates. Now swig is up to 20 faster than before for
- large template interfaces, such as the std_containers.i
- and template_matrix.i files in the python test-suite.
- Memory footprint is also reduced in consideration of small
- pcs/architectures.
- - add commandline options -cpperraswarn and -nocpperraswarn" to force
- the swig preprocessor to treat the #error directive as a #warning.
-
- the pragmas
- #pragma SWIG cpperraswarn=1
- #pragma SWIG cpperraswarn=0
-
- are equivalent to the command line options, respectively.
-
- 12/06/2005: mmatus
- [Python] The generated code is now more portable, especially
- for Windows. Following
- http://www.python.org/doc/faq/windows.html
- Py_None is never accessed as a structure, plus other
- tricks mentioned there.
- 12/06/2005: mmatus
- [Python] Added initial support for threads based in the
- proposal by Joseph Winston.
- The user interface is as follows:
- 1.- the module thread support is enable via the "threads" module
- option, i.e.
- %module("threads"=1)
- 2.- Equivalent to that, is the new '-threads' swig option
- swig -threads -python ...
- 3.- You can partially disable thread support for a given
- method using:
- %feature("nothread") method;
- or
- %nothread method;
- also, you can disable sections of the thread support,
- for example
- %feature("nothreadblock") method;
- or
- %nothreadblock method;
- %feature("nothreadallow") method;
- or
- %nothreadallow method;
- the first disables the C++/python thread protection, and the
- second disables the python/C++ thread protection.
- 4.- The current thread support is based in the PyGIL
- extension present in python version 2.3 or later, but
- you can provide the thread code for older versions by
- defining the macros in pythreads.swg.
- If you get a working implementation for older versions,
- please send us a patch.
- For the curious about performance, here are some numbers
- for the profiletest.i test, which is used to check the speed
- of the wrapped code:
- nothread 9.6s (no thread code)
- nothreadblock 12.2s (only 'allow' code)
- nothreadallow 13.6s (only 'block' code)
- full thread 15.5s ('allow' + 'block' code)
-
- i.e., full thread code decreases the wrapping performance by
- around 60%. If that is important to your application, you
- can tune each method using the different 'nothread',
- 'nothreadblock' or 'nothreadallow' features as
- needed. Note that for some methods deactivating the
- 'thread block' or 'thread allow' code is not an option,
- so, be careful.
-
- 11/26/2005: wsfulton
- SWIG library files use system angle brackets everywhere for %include, eg
- %include "std_common.i"
- becomes
- %include <std_common.i>
- 11/26/2005: wsfulton
- [Java, C#]
- Typesafe enums and proper enums have an extra constructor so that enum item values that
- are initialised by another enum item value can be wrapped without having to use %javaconstvalue/
- %csconstvalue for when using %javaconst(1)/%csconst(1). Suggestion by
- Bob Marinier/Douglas Pearson.
- For example:
- typedef enum
- {
- xyz,
- last = xyz
- } repeat;
- 11/21/2005: mmatus
- [ruby + python]
- Fixes for directors + pointers. This is an ugly problem without an easy
- solution. Before we identified this case as problematic:
- virtual const MyClass& my_method();
- but it turns out that all the cases where a pointer, array or
- reference is returned, are problematic, even for
- primitive types (as int, double, char*, etc).
- To try to fix the issue, a new typemap was added,
- 'directorfree', which is used to 'free' the resources
- allocated during the 'directorout' phase. At the same
- time, a primitive garbage collector engine was added to
- deal with orphaned addresses, when needed.
-
- The situation is much better now, but still it is possible to have
- memory exhaustation if recursion is used.
- So, still you need to avoid returning pointers, arrays or
- references when using director methods.
- - Added stdint.i - typemaps for latest C99 integral types found in stdint.h.
-
- 11/14/2005: wsfulton
- More types added to windows.i, eg UINT8, WORD, BYTE etc.
- Including windows.i will also enable SWIG to parse the __declspec Microsoft
- extension, eg __declspec(dllimport). Also other Windows calling conventions
- such as __stdcall.
- 11/10/2005: wsfulton
- New library file for Windows - windows.i. This file will contain useful type
- information for users who include windows.h. Initial support is for the
- non ISO integral types: __int8, __int16, __int32, __int64 and unsigned versions.
- The unsigned versions previously could not be parsed by SWIG. SF #872013.
- 11/09/2005: wsfulton
- [Java, C#] Portability warning for files which will overwrite each other on case
- insensitive file systems such as FAT32/NTFS. This will occur, for example, when two
- class names are the same barring case. The warning is issued on all platforms and
- can be suppressed with the usual warning suppression techniques. SF bug #1084507.
- 11/09/2005: wsfulton
- ./configure --with-python --with-ruby --with-perl5 etc enable these languages,
- ie the --with-xxxx options, where no path is specified, work the same as if
- the option was not specified at all. Based on patches #1335042 #1329048 #1329047.
- 11/09/2005: dancy
- [Allegrocl]
- Add C++ support to the Allegrocl module. Further
- enhances the C support as well. Some of the
- features:
- - MUCH better generation of foreign types based on
- the C/C++ types for use in defining the FFI on
- the lisp side. We don't pass everything as a (* :void)
- any longer.
- - Uses typemaps for better control of type conversions
- and code generation in the generated lisp and c++ wrapper
- code.
- - CLOS wrapping of pointers returned from foreign space
- makes it easier to differentiate pointers in user code.
- The wrapping objects can be passed directly to FF calls.
- - Defun wrapping of FF calls, allowing for more lispy
- interface. Conversion, GCing, of lisp objects to
- foreign objects can be done in the wrapping defun via
- the use of typemaps.
-
- - overload dispatching implemented on the lisp side
- using generic functions.
- - Templates and synonymous types supported.
- 11/07/2005: mmatus
- [Python] Adding proper support for multi-inheritance in
- the python side, ie, if you have two C++ wrapped class, Foo
- and Bar, now:
- class MyPythonClass(Foo,Bar):
- ....
- will properly work, even with directors, and the
- deallocation of Foo.this and Bar.this will follow
- correctly. Before, a class could only have one 'this'
- instance (unlike C++), only the last base class was
- properly deleted, or detected with directors.
- Now 'self.this' can be a list, which will contain the C++
- instance pointers for all the base classes.
-
- Also, swig.this is responsible for deallocating the C++
- instance(s), and the __del__ method is not emitted unless
- the user preppend/append some code to it.
- - Swig can now detect memory leaks, ie, if you still
- don't use proxy/shadow classes, and type something like
-
- import _example
- f = _example.new_Foo()
- and forget to call _example.delete_Foo(f), then swig will
- tell you that there is a memory leak.
- Otherwise, if you always use the proxy classes, you probably
- you will never ever see this warning unless there is
- something wrong inside the swig wrapping code.
-
-
- *** POTENTIAL INCOMPATIBILITY ***
-
- If you overloaded the __del__ method, and call the base
- one without a try block, as in
- class MyClass(SwigClass):
- def __del__(self):
- <your code here>
- SwigClass.__del__(self)
-
- python could complain that the method SwigClass.__del__ is
- undefined. Try to use instead:
-
- def __del__(self):
- <your code here>
- try: SwigClass.__del__(self)
- except: pass
- or simply
- def __del__(self):
- <your code here>
- 11/02/2005: mmatus
- [Python] Adding more fun to STL/STD containers, now you
- can do
- %template(pyset) std::set<PyObject *>;
- %template(pyvector) std::vector<PyObject *>;
- %template() std::pair<PyObject *,PyObject *>;
- %template(pyvector) std::map<PyObject *,PyObject *>;
- ....
- The same applies to std::list, std::deque, std::multiset, etc.
- Then, at the python side you can do now:
- # C++ std::vector as native python sequence
- v = pyvector([1,"hello",(1,2)])
- print v[1]
- >> 'hello'
- print v[2]
- >> (1,2)
-
- # C++ std::set as native python sequence
- s = pyset()
- s.insert((1,2))
- s.insert(1)
- s.insert("hello")
- sum=()
- for i in s:
- sum +=(i,)
- print sum
- >>> (1, 'hello', (1, 2))
-
- # C++ std::map as native python sequence
- m = pymap()
- m["foo"] = "hello"
- m[1] = (1,2)
- pm = {}
- for k in m:
- pm[k] = m[k]
- print pm
- >>> {1: (1, 2), 'foo': 'hello'}
- ie, the STD/STL containers work as real native python
- container, with arbitrary item types and so.
- But since normal C++ containers do not properly ref/unref
- their items, you should use the safer versions:
-
- %template(pyset) std::set<swig::PyObject_ptr>;
- %template(pyvector) std::vector<swig::PyObject_ptr>;
- %template() std::pair<swig::PyObject_ptr, swig::PyObject_ptr>;
- %template(pyvector) std::map<swig::PyObject_ptr,swig::PyObject_ptr>;
- ....
- where swig::PyObject_ptr is a PyObject * envelope class provided
- to safely incref/decref the python object.
-
- So, now you can use all the STL/STD containers as native
- Python containers.
- Note 1: std::map, std::set and the other 'ordered'
- containers will properly use PyObject_Compare for sorting,
- when needed.
- Note 2: all the STL/STD containers have a limit size of
- SIZE_MAX, ie, you can have manage containers larger than
- INT_MAX, the python limit.
-
-
- 11/02/2005: mmatus
- [Python]
- - add 'iterator()' method for all sequences and additionally
- 'key_iterator()' for maps.
- 'iterator()' will always return the native C++ iterator.
- Additionally, in maps, 'key_iterator()' will return a python
- iterator using only the map keys.
-
- In general the sequence method __iter__ will call
- 'iterator()', returning the native C++ iterator, but in
- maps it will call 'key_iterator()', maintaining
- backward compatibility.
- Hence, for std::maps, you can play then with the native
- C++ iterator, which value is a (key, value) pair, by
- calling map.iterator(), as with map.begin(), map.end(), etc.
- The difference is that map.iterator() returns a safe
- 'closed' iterator, while map.begin() and map.end() are
- 'open' iterators.
- A 'closed' iterator knows the begin and the end of the
- sequence, and it never can seg. fault. An 'open'
- iterator, as in C++, can seg. fault at the C++ side.
- # a closed iterator is safe in the following example.
- # the next() method will throw a StopIteration
- # exception as needed
-
- i = seq.iterator()
- try:
- while True:
- sum += i.next()
- except: pass
-
- # an open iterator always need to be checked,
- # or it will crash at the C++ side
- current = seq.begin()
- end = seq.end()
- while (current != end):
- sum += current.next()
-
-
- [Python]
- - Finally, when we call
- f = Foo()
- the construction is 'one-way'. Before construction was done
- something like
- Foo() (python) -> _new_Foo() (C++)
- new_Foo() (C++) -> FooPtr() (python)
- FooPtr() (python) -> Foo() (python)
- and returning a pointer was done like
- NewPointerObj() (C++) -> FooPtr() (python)
- FooPtr(python) -> Foo() (python)
-
- ie, we when going back and forward between the C++ and
- python side.
- Now since there is no FooPtr the construction process is
- Foo() (python) -> _new_Foo() (C++)
- _new_Foo() (C++) -> NewPointerObj() (C++) (no shadow class)
- and returning a pointer is done
- NewPointerObj() (C++) (with shadow class) -> NewInstaceObj() (C++)
- where NewInstanceObj creates a new instance without
- calling __init__ and it doesn't go 'back' to python, is
- 'pure' C API.
- - With this change, and the other ones in the
- PySwigObject type, which now carries the thisown and
- swig_type_info pointer, the generated code should be as
- fast as boost::Python and/or the other python wrappers
- based in pure Python/C API calls.
- As a reference, the profiletest_runme.py example, which
- does a simple call function many times, such as this code:
- import profiletest
-
- a = profiletest.A()
- b = profiletest.B()
- for i in range(0,1000000)
- a = b.fn(a)
- where fn is defined as 'A* B::fn(A *a) {return a;}',
- produces the following times
- nomodern modern
- swig-1.3.26 19.70s 5.98s
- swig-CVS 0.99s 0.98s
-
- Clearly, there is a large improvement for the python
- 'nomodern' mode. Still, the 'modern' mode is around
- 6 times faster than before. For the same test, but
- using the non-shadow version of the module, we get
- _profiletest (non-shadow)
- swig-1.3.26 0.80s
- swig-CVS 0.60s
- Hence, now for practical purposes, the proxy overhead
- is insignificant.
- Note that the performance numbers we are showing is for
- a simple module (two types) and a simple function (one
- argument). For real situations, for modules with many
- more types and/or functions with many more parameters,
- you will see even better results.
-
-
- 10/31/2005: mmatus
- [Python]
- - Finally, no more ClassPtr proxy classes. You will see
- only a clean Class proxy class in the .py file.
- - No more 'real' thisown attribute either, the PySwigObject now
- carries the ownership info.
- You can also do something like
- print self.this.own()
- >>> True
-
- self.this.disown()
- self.this.own(0)
- print self.this.own()
- >>> False
- self.this.acquire()
- self.this.own(1)
- print self.this.own()
- >>> True
- Still the old way,
-
- print self.thisown
- >>> True
- self.thisown = 0
- print self.thisown
- >>> False
- self.thisown = 1
- print self.thisown
- >>> True
- is supported, and python dispatches the proper method
- calls as needed.
-
- - Support for iterators in STL/STD containers, for example, if you have
- %template<set_string> std::set<std::string>;
-
- you can use the C++ iterators as:
- s = set_string()
-
- s.append("c")
- s.append("a")
- s.append("b")
- b = s.begin()
- e = s.end()
- sum = ""
- while (b != e):
- sum += b.next()
- print sum
- >>> "abc"
- advance the iterator as in C++
- current = s.begin()
- current += 1
- print current.value()
- >>> "b"
-
- now using the reverse operators
- b = s.rbegin()
- e = s.rend()
- sum = ""
- while (b != e):
- sum += b.next()
- print sum
- >>> "cba"
- or the 'previous' method
- b = s.begin()
- e = s.end()
- sum = ""
- while (b != e):
- sum += e.previous()
- print sum
- >>> "cba"
- or just as in a python fashion
- for i in s:
- sum += i
-
- Note 1: Iterators in C++ are very powerful, but
- dangerous too. And in python you can shoot yourself in the foot
- just like in C++, so, be careful.
-
- Note 2: the iterators are 'light', ie, they do not
- convert sequence elements until you request to do so, via
- next(), value() or previous(). If you just increment/decrement one
- no conversion is performed, for example:
-
- b = s.begin()
- b += 1
- b.incr()
- b.incr(2)
- b.decr(2)
- b.decr()
- b -= 1
- only the iterator is modified, and not value wrapper
- is generated. Other typical C++ operations are also
- available, such as:
- print s.end() - s.begin()
- >>> 3
- f = s.begin() + 1
- print f.value()
- >>> "b"
- l = s.end() - 1
- print l.value()
- >>> "c"
-
- etc. Of course, the 'find', 'insert', 'erase', and
- so on methods also supports iterators now, ie:
- i = s.begin()
- i += 1
- s.erase(i)
- for i in s:
- sum += i
- print sum
- >>> "ac"
-
- *** POTENTIAL INCOMPATIBILITY ***
- There is no more 'thisown' attribute. If you use it, python
- will translate the following code as follows:
- if (self.thisown): ==> if (self.this.own()):
- self.thisown = 1 ==> self.this.own(1)
- self.thisown = 0 ==> self.this.own(0)
- Still, maybe in some unusual cases the translation will not be
- 100% correct, so if you have a problem, please report it
- and/or use the new 'self.this.own()' accessor.
-
-
- *** POTENTIAL INCOMPATIBILITY ***
-
- There is no more ClassPtr classes in the python code. Hence,
- if in the past you needed to resort to some kind of trickery
- with them, or overcome their presence, it is no longer
- required, but the extra code you added could now break
- things.
- If needed, you can use the option -classptr, i.e.,
- swig -classptr -python ...
- to generate the old ClassPtr classes.
- 10/30/2005: mkoeppe
- [Guile] Make declared and defined linkage of SWIG_init consistent.
- Reported by Steven G. Johnson (SF patch 1315498).
- 10/26/2005: mmatus
- - Added the attribute.i file to the global library director.
- Now it can be used from other languages that do not use
- the unified typemap library as well.
- So, if you have something like:
- %include attribute.i
- %attribute(A, int, a, get_a, set_a);
-
- struct A
- {
- int get_a() const;
- void set_a(int aa);
- };
- %attribute_ref(B, int, c);
-
- struct B
- {
- int& c();
- };
- then in the target language the 'A.a' and 'B.c' attributes will
- be visible, ie, you can access them as plain variables:
- f = A()
- f.a = 3
- g = B()
- g.c = 3
-
- h = f.a + g.c
- and the proper get/set methods will be dispatched. See
- attribute.i for more info.
-
- - More cleanups around and adding more test-cases. The
- DISOWN typemap now is tested and working in all the
- languages that use the unified typemap library, ie, tcl,
- ruby, perl and python.
-
- 10/25/2005: mmatus
- - Perl, complete the DISOWN typemap.
-
- - added the attribute.i file to the unified typemap
- library (before was only usable from python).
- - unify the names for the setter and getter methods in
- perl,tcl,ruby and python, so, the attribute.i library
- can work across them.
-
- - see the li_attribute.i test-case or the library file
- Lib/typemaps/attribute.swg
- for more info about how to use it.
-
-
- 10/24/2005: mmatus
- - Perl now uses the unified typemap library.
- - Changes in ruby to use the $track option in typemaps.
- - Changes in the unified typemap library to follow the
- convention that all macros that are not used in the
- C/C++ side starts with %, such as
- %delete
- %new_array
- etc.
-
- - Documenting fragments, see fragments.swg.
- - Cleaner way to use the unified typemap library, include
- just <typemaps/swigtypes.swg>.
- Check some of the supported languages: perl, tcl, ruby,
- python.
- Always start with the head file, such as
- python/python.swg
- tcl/tcl8.swg
- ruby/ruby.swg
- perl5/perl5.swg
- and the principal file that invokes the unified library, such as
- python/pytypemaps.swg
- tcl/tcltypemaps.swg
- ruby/rubytypemaps.swg
- perl/perltypemaps.swg
-
- The file that provide the specialization for each
- language are the one that provides the basic types:
- python/pyprimtypes.swg
- ruby/rubyprimtypes.swg
- tcl/tclprimtypes.swg
- perl5/perlprimtypes.swg
- and the string manipulation:
-
- python/pystrings.swg
- ruby/rubystrings.swg
- tcl/tclstrings.swg
- perl5/perlstrings.swg
-
- The rest of the files, such as carray.i, are mostly one
- line files that include the proper typemap library
- version.
- *** POTENTIAL INCOMPATIBILITY in Perl ***
- Some missing/wrong typemaps could start working properly,
- and change the old expected behavior in Perl.
- 10/23/2005: wuzzeb
- Chicken:
- + pointers to member functions finally work properly
- + add test of member function pointers to cpp_basic.i
- 10/20/2005: dancy
- [allegrocl] Added C++ support. Large update, many changes. See
- newly added Allegro Common Lisp section in lisp.html
- 10/20/2005: mmatus
- Ruby, Tcl, Python:
- - Uniform way to fail (label fail:), now finally
- SWIG_exception works across the three languages and all
- the typemaps.
- - Add proper cleanup code to ruby
- - More valgrind fixes
- - Simplify the inline use, it seems a small interface of
- 20,000 lines (plus many many templates) can break
- gcc -O3 easily.
- - Finalize the typemaps library. All the old *.i files
- (carray.i, cpointer.i, exception.i) had been implemented
- in the new typemaps library.
-
- 10/19/2005: wuzzeb
- Update the Runtime Typemap documentation in Typemaps.html
- 10/18/2005: wuzzeb
- Chicken:
- - Correctly handle %ignored classes
- - Correctly convert long, long long, unsigned long, etc
- to chicken primitives. (Thanks to Felix Winkelmann)
- - Using argout parameters when the return value was a
- wrapped pointer caused a memory corruption. The chicken
- garbage collector moved a pointer out from under us.
- This is now fixed by running all the proxy creation
- functions as continuations after the wrapper function
- returns. As part of this, we no longer need the
- chickenfastproxy flag on output typemaps.
- - using -proxy and -nocollection together works now
- Before, it was not exporting the destructor in the proxy
- wrapper.
- 10/18/2005: mmatus
-
- Added the Unified Typemap Library (UTL). It unifies the typemaps for
- python, ruby, tcl
- and in the process, fixes several problems in each of the three
- languages to work in a "canonical" way now established in
- the typemap library
-
- SWIG/Lib/typempas
- The current status of the unification is that everything
- compiles and runs inside the test-suite and examples
- directories. And for the first time we have three
- languages than pass the primitive_types.i case.
- Also, we have a uniform way to treat the errors, for example
- if you do something like
- >>> from primitive_types import *
- >>> print val_uchar(10)
- 10
- >>> print val_uchar(1000)
- Traceback (most recent call last):
- File "<stdin>", line 1, in ?
- OverflowError: in argument 1 of type 'unsigned char'
- you get the same exception in all the three languages.
-
- And well, many more good things will come from this
- unification, for example, proper support of the STL/STD classes
- for all the languages, and hopefully, we can keep
- adding other languages.
- The hardest part, writing a common typemap library
- that suites the three different languages, is done,
- and adding another language should now be easy.
- Still the global unification is not complete, the STL/STD
- part is next, and probably as well as adding one or two more
- languages.
- If you are curious, look at the python, ruby and/or tcl
- directories to see what is needed to support the new
- common typemaps library. Still, the final way to
- integrate a new language could change as we move to
- integrate the STD/STL.
- *** POTENTIAL INCOMPATIBILITY in Ruby/Tcl ***
- Some missing/wrong typemaps could start working properly,
- and change the old behavior, specially in ruby and tcl.
- Version 1.3.27 (October 15, 2005)
- =================================
- 10/15/2005: wsfulton
- [Java] Fix for typesafe enum wrapping so that it is possible to
- overload a method with 2 different enum types.
- 10/15/2005: wsfulton
- Fix for %feature("immutable","0") attempting to generate setters
- for constants.
- Restored %immutable and %makedefault to clear the feature as it
- behaved in SWIG-1.3.25 and earlier.
- 10/14/2005: mmatus
- Fix bug in anonymous typedef structures which was leading to
- strange behaviour.
- 10/13/2005: mmatus
- Several minor changes:
-
- - Improve the wchar_t type support
- - Add a warning for when you define the 'in' typemap but
- you don't define the 'typecheck' one. Very common mistake.
- - Add proper default rule for function pointers, now you
- can define a typemap such as:
- %typemap(in) SWIGTYPE ((*)(ANY)) {...}
- That will apply to all the pointer to functions. The
- rule in C++ also apply to the function 'reference', ie,
- in both cases
- typedef int (*fptr)(int a);
- typedef int (func)(int a);
- This was needed since it seems to be 'illegal' in C++ to
- do something like:
- void *ptr = static_cast<void *>(fptr);
- and probably, as for member functions, it is not
- warrantied that the pointer sizes will match.
- - Add the #error/#warning directives to swig's cpp.
- - Add the noblock option for typemaps, which is used as
- follows: supposed you a typemap, like this
-
- %typemap(in,noblock=1) Hello {
- ....
- }
- then the typemap will be inserted without the block
- imposed by the brackets, similar to
- %typemap(in) Hello "..."
- So, why you don't just use the quote style?, because:
-
- 1.- The quote style doesn't get preprocessed, for example
-
- %typemap(in) Hello "$1= SWIG_macro($1);"
-
- here, SWIG_macro doesn't get expanded
- 2.- Inside a quote typemap, you have to use
- quotes carefully
- %typemap(in) Hello "$1 = \"hello\" "
- 3.- You can't make emacs and/or other editors
- to indent inside a string!.
- So, why do you want to remove the block?, because an extra
- block when not needed (no local variables in it):
- 1.- makes the code harder to read
- 2.- makes the code larger
- 3.- or in short, for the same reason we have the quote style.
- Version 1.3.26 (October 9, 2005)
- ================================
- 10/08/2005: wsfulton
- [Php] Added 'throws' typemaps.
- 10/08/2005: wsfulton
- Fixes for languages that don't support multiple inheritance. The
- first non-ignored class in the public base class list is used for inheritance.
- by the proxy class. Previously, if the first class in the list was ignored, then
- the proxy class wouldn't have any base classes.
- 10/07/2005: mmatus
- Update more features to follow new convention, including:
- callback
- ref/unref
- except
-
- All of them use not only the feature as a flag, but also
- as code value. To deal with those features, we use now
- GetFlagAttr, which is similar to GetFlag, but instead or
- returning 1 or 0, it returns the attr value, if happens
- to be different of "0" of course.
- Now there are also more uniform directive names for the
- ones based in features, for example, for the old
- %newobject directive now we have tree directives defined:
-
- #define %newobject %feature("new")
- #define %nonewobject %feature("new","0")
- #define %clearnewobject %feature("new","")
- and so on for all the other feature directives.
- *** POTENTIAL INCOMPATIBILITY ***
- 09/30/2005: wsfulton
- Subtle change to some features. Previously it was not possible to disable many
- features once they had been enabled. This was for most features that behave as
- flags. These features now work as follows:
- %feature("name") // enables the feature
- %feature("name", "1") // enables the feature
- %feature("name", "0") // disables the feature
- %feature("name", "") // clears the feature
- In fact any non-empty value other than "0" will enable the feature (like C boolean logic).
- Previously "1", "0" or any other non-empty value would enable the feature and it would
- only be possible to disable the feature by clearing it (assuming there was no global enable).
- The following features are affected:
- allowexcept
- compactdefaultargs
- classic (Python)
- cs:const (C#)
- director
- exceptionclass (Python)
- ignore
- immutable
- java:const (Java)
- java:downcast (Java)
- kwargs
- modern (Python)
- new
- noautodoc (Python)
- nodefault
- nodirector
- noref
- notabstract
- nounref
- novaluewrapper
- python:maybecall (Python)
- python:nondynamic (Python)
- modula3:multiretval (Modula3)
- predicate (Ruby)
- trackobjects (Ruby)
- valuewrapper
- It is now possible, for example to ignore all methods/classes in a header file, except for a
- few targetted methods, for example:
- %feature("ignore"); // ignore all methods/classes
- %feature("ignore","0") some_function(int, double); // do not ignore this function
- %feature("ignore","0") SomeClass; // do not ignore this Class
- %feature("ignore","0") SomeClass::method; // do not ignore this method
- %include "bigheader.h"
- Removed %pythondynamic - it never worked properly. Use %pythonnondynamic instead.
- Removed %feature("nokwargs") - it wasn't fully implemented - use %feature("kwargs","0") instead.
- *** POTENTIAL INCOMPATIBILITY ***
- 09/25/2005: mkoeppe
- [Guile] Add "throws" typemaps.
- 09/24/2005: cfisavage
- [Ruby] Adds new %trackobjects functionality that maps C++ objects to
- Ruby objects. This functionality makes it much easier to implement
- mark functions for the garbage collector. For more information
- refer to the update documentation and examples.
-
- 09/20/2005: wsfulton
- [Perl] Patch 1116431 from Josh Cherry. Fixes non member functions inadvertently
- being called instead of member functions.
- 09/20/2005: wsfulton
- [Lua] Patch from Mark Gossage to add support for Lua-5.1, std::string,
- std::vector, std::exception and documentation.
- 09/14/2005: mmatus
- [Python] Add -nocppcast. Now the default behavior is to
- always use the cppcast operators. Before that was the case
- only when you used the -cppcast option.
- If this seems to break your code... your welcome!, it
- means it was broken before, and you never notice.
- If you thing the error is due to one of the SWIG typemaps,
- send us an example.
- Use -nocppcast only with very old C++ compilers that
- do not support the cppcast operations.
- So, here applies:
- This change doesn't break compatibility, it was broken before.
- 09/13/2005: wsfulton
- [Java] Fix for director methods when a class is passed by value as a
- parameter.
- 09/11/2005: mmatus
- Adding the module option to the %import directive. Now you
- can use it as
- %import(module="BigModule") foo.i
- where subfile could (or not) define the module name via
- the %module directive. The module option take precedence
- and it has the same effects than having the directive
- %module BigModule
- inside the imported file foo.i.
- You can use the option in mainly two cases:
- 1.- You used the -module option when you generated the
- module to be imported, and hence the module name in
- the imported %module directive is not really useful.
- 2.- The module you want to import is very large, and it
- has several .i/.h files. Then, if you just one to
- import a class or so from the module, says 'foo', and
- not the entire module via importing the main
- BigModule.i file, then you just do:
- %import(module="BigModule") foo.h
- or
-
- %import(module="BigModule") foo.i
- where foo.i contains the 'foo' declaration and maybe a
- couple of extra %include directives, as needed.
-
- 09/11/2005: mmatus
- Fix bug #1282637, about the -module option not having effect
- in places where it was needed.
- 09/11/2005: wsfulton
- When wrapping variables, ensure that none of the typemaps used for the
- set wrappers are used when generating the get wrappers. I doubt this was a
- problem for any languages except for the recently introduced null attribute
- in the out typemap (C# only).
- 09/08/2005: wsfulton
- More descriptive error messages when files fail to open.
- 09/06/2005: mmatus
- Allow a %define a macro inside another %define macro, for example
- %define hello(name, Type)
- %define name ## a(Type)
- %typemap(in) Type "hello;"
- %enddef
- %enddef
-
- To learn how to use this new features in your own typemaps library, see
- python/cstring.i, python/cwstring.i and python/cwstrbase.i.
- [Python] Normalize the cstring.i implementation to use fragments, and add
- cwstring.i, which implements the same typemaps but for wchar_t strings.
- [Python] Bug fixed: 1247477, 1245591, 1249878 and others.
- 08/18/2005: wsfulton
- [Ruby] Implement support for SWIGTYPE* DISOWN typemap (like in Python) for
- better control of memory management, eg when adding an object created in Ruby
- to a C++ container. Patch #1261692 from Charlie Savage.
- 08/18/2005: wsfulton
- [Tcl] 64 bit platform fixes for the varargs handling in SWIG_GetArgs. This is an
- improved fix for bug #1011604 as suggested by Jeremy Lin.
- 08/18/2005: wsfulton
- [Tcl] Bug #1240469 - %newobject support for Tcl. Patch from Bob Marinier.
- 08/16/2005: wsfulton
- [Perl] Bug #1254494 - Fix for global namespace pollution by perl header files
- (bool define) prevented STL headers from being used on some systems, eg
- Windows with Visual Studio.
- 08/16/2005: wsfulton
- [Java] Bug #1240937 - Redefinition of __int64 typedef for Intel compilers.
- 08/15/2005: wsfulton
- [Xml] Bug #1251832 - C++ template may generate invalid XML file
- 08/15/2005: wsfulton
- [Lua] Support added for Lua. Patch #1242772 from Mark Gossage.
- It supports most C/C++ features (functions, struct, classes, arrays, pointers,
- exceptions), as well as lots of documentation and a few test cases & examples.
- 08/14/2005: wsfulton
- [Xml] Fix incorrect xml escaping in base class name when base class is a template.
- 08/13/2005: efuzzyone
- [CLISP] Added support for handling enums. Does not adds the return type declaration
- to the function definition, if a function returns void.
- 08/09/2005: mkoeppe
- New language module, Common Lisp with UFFI, from Utz-Uwe Haus.
- 08/09/2005: mkoeppe
- Fix the Lisp s-expression output module; it no longer complains about "unknown targets".
- 07/27/2005: wsfulton
- Modifications to STL wrappers so that it is possible for a user's %exception directive
- to be applied to the STL wrapper methods. Previously the following global %exception
- directive would not be used on the wrapper methods:
- %exception {
- try {
- $action
- } catch (...) {
- // handle uncaught exceptions
- }
- }
- This has been implemented by replacing %exception directives for specific STL wrapper
- methods with an exception specification declared on the wrapper methods. throws typemaps
- are now supplied for handling the STL exception specification. These can also be easily
- overridden, for example the std::out_of_range exception, which is used a lot in the STL
- wrappers, can be customised easily:
- %include "std_vector.i"
- %typemap(throws) std::out_of_range {
- // custom exception handler
- }
- %template(VectInt) std::vector<int>;
- 07/22/2005: efuzzyone
- [CLISP] The clisp module for SWIG:
- - It can only handle C, clisp currently does not supports ffi bindings to C++.
- - It has two options, (a) -extern-all this will generate wrappers for all functions
- and variablestions, (b) -generate-typedef this will generate wrappers "def-c-type"
- wrappers for typedefs
- - Can handle pointers to functions, complex types such as n-dimensional arrays of
- pointers of depth d
- - Generates wrappers for constants as well as variables
- - Correctly distinguishes between the declaration of variables in structures and functions
- - Creates a defpackage "declaration" with the module name as the package name, the created
- package exports both functions and variables
- - tries to guess when should a pointer variable be declared as c-ptr or c-pointer
- 07/22/2005: wsfulton
- [C#] Changes to support C# structs returned by value. The changes required are:
- - Using an optional 'null' attribute in the out typemap. If this attribute is specified,
- then it is used for the $null special variable substitution.
- - The ctype used in the C/C++ wrappers is no longer initialised to 0 on declaration.
- Both of these changes fix the situations where an attempt was made to assign 0 to the
- returned struct. Marshalling structs as value types still requires user defined typemaps.
- See documentation for an example.
- 07/22/2005: wsfulton
- [C#, Java] Fix SWIG_exception usage to work with compilers that don't support empty macro
- arguments. Unfortunately this fix will stop usage of SWIG_exception being used within typemaps
- that use "" or %{ %} delimiters, but continues to work with typemaps using {} delimiters.
- Please use the SWIG_CSharpSetPendingExceptionArgument or SWIG_JavaThrowException methods instead
- as SWIG_exception is really intended as a platform independent macro for the SWIG library writers.
- 07/16/2005: mkoeppe
- [Allegro CL] Use specific foreign types rather than (* :void).
- Use *swig-identifier-converter*.
- 06/27/2005: wsfulton
- Functions declared as 'extern' no longer have an additional function declaration added to the
- wrapper files. There are some cases where SWIG does not get this right, eg bug #1205859 (extern
- functions with default arguments declared in a namespace). Also SWIG cannot get non-standard
- calling conventions correct, eg Windows calling conventions are usually handled like this:
- %{
- #define DLLIMPORT __declspec(dllimport)
- #define STDCALL __stdcall
- %}
- #define DLLIMPORT
- #define STDCALL
- %inline %{
- DLLIMPORT extern STDCALL void function(int);
- %}
- SWIG incorrectly generates:
- extern void function(int);
- To which there is no solution as SWIG doesn't handle non-standard calling conventions. The extra
- 'extern' function that SWIG generates is superfluous unless a user has forgotten to add the function
- declaration into the wrappers.
- The -noextern commandline argument is now redundant and a new commandline argument -addextern can
- be used to obtain the original behaviour. This shouldn't be necessary unless the header file
- containing the function declaration was inadvertently not added to the wrappers. To fix this
- add the function declaration into your wrappers, For example, replace:
- extern void foo(int);
- with:
- %inline %{
- extern void foo(int);
- %}
- *** POTENTIAL INCOMPATIBILITY ***
- 06/22/2005: wsfulton
- [C#, Java, Modula3, Ocaml]
- The intermediary function names have been changed when wrapping variables to
- match the other language modules so that %extend for a member variable works
- uniformly across all language modules, eg:
- %extend ExtendMe {
- Var;
- };
- %{
- void ExtendMe_Var_set(ExtendMe *, double) {...}
- double ExtendMe_Var_get(ExtendMe *) {...}
- %}
- The methods implementing the get/set used to be:
- %{
- void set_ExtendMe_Var(ExtendMe *, double) {...}
- double get_ExtendMe_Var(ExtendMe *) {...}
- %}
- This also changes the name of variable wrapper functions when using -noproxy.
- The original names can be generated with the -oldvarnames commandline option.
- *** POTENTIAL INCOMPATIBILITY ***
- Version 1.3.25 (June 11, 2005)
- ==============================
- 06/11/2006: mkoeppe
- [Guile] Fix handling of anonymous-enum variables.
- 06/10/2005: mkoeppe
- [Guile] Fix for function arguments that are passed by
- copy-of-value. Fix for global "const char *" variables.
- Fix testcases arrays_dimensionless, arrays_global.
- 06/08/2005: wsfulton
- Fix for when a base class defines a symbol as a member variable and a derived class defines
- the same symbol as a member method.
- 06/08/2005: wsfulton
- [C#] More fixes for virtual/new/override modifiers - when a method has protected access
- in base and public access in derived class.
- 06/02/2005: wsfulton
- Fix #1066363 - Follow convention of release tarball name matching directory name.
- 06/02/2005: wsfulton
- [C#, Java] Fix #1211353 - typesafe enums (and Java proper enums) wrappers when enum value
- is negative.
- 05/27/2005: wsfulton
- Modernised and tidied up Windows macros --> SWIGEXPORT, SWIGSTDCALL. They can be overridden
- by users via -D compiler directives if need be.
- 05/26/2005: wsfulton
- %csmethodmodifiers can be applied to variables as well as methods now.
- In addition to the default 'public' modifier that SWIG generates, %csmethodmodifiers will also
- replace the virtual/new/override modifiers that SWIG thinks is appropriate. This feature is
- useful for some obscure cases where SWIG might get the modifiers incorrect, for example
- with multiple inheritance and overriding a method in the base class.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 05/25/2005: wsfulton
- Added missing constructors to std::pair wrappers (std_pair.i) for all languages.
- 05/25/2005: wsfulton
- [C#] Added std::pair wrappers in std_pair.i
- 05/25/2005: wsfulton
- [C#] The C# 'new' and 'override' modifiers will be generated when a C++ class inherits methods
- via a C++ 'using' declaration.
- 05/25/2005: wsfulton
- Fix for exception specifications previously being ignored in classes that inherited methods
- from 'using' declarations, eg calls to Derived::bar below will convert C++ exceptions into
- a target language exception/error, like it always has done for Base::Bar.
- class Base {
- virtual bar() throw (std::string);
- };
- class Derived : public Base {
- using Base::bar;
- };
- 05/23/2005: wsfulton
- Fixes for detecting virtual methods in %extend for the -fvirtual option and C# override and new
- method modifiers.
- 05/23/2005: wsfulton
- [C#] The 'new' modifier is now generated on the proxy method when a method in a derived
- class is not polymorphic and the same method exists in the derived class (ie it hides
- the base class' non-virtual method).
- 05/23/2005: wsfulton
- [Java, C#] Fixes to detection of covariant return types - when the class hierarchy is more
- than 2 classes deep.
- 05/21/2005: wsfulton
- [Java] std::wstring typemaps moved from std_string.i to std_wstring.i
- 05/21/2005: wsfulton
- Fix for crash in DohStrstr, bug #1190921
- 05/21/2005: wsfulton
- [TCL] Fix for methods with similar names when showing list of names on error - bug #1191828.
- Patch from Jeroen Dobbelaere.
- 05/21/2005: wsfulton
- [TCL] long long overloading fix - bug #1191835, patch from Jeroen Dobbelaere.
- 05/21/2005: wsfulton
- Fix bug #1196755 to remove debug from swigtcl8.swg.
- 05/19/2005: wsfulton
- [C# and -fvirtual option] Fix for the override key not being generated in the derived class when a
- virtual method's return type was a typedef in either the base or derived class. Also ensures the
- method is eliminated when using the -fvirtual option. For example, Derived.method now has the C#
- override keyword generated:
- typedef int* IntegerPtr;
- struct Base {
- virtual IntegerPtr method();
- };
- struct Derived : Base {
- int * method() const;
- };
- [C#] Fix for the override key being incorrectly generated for virtual methods when a base class
- is ignored with %ignore.
- 05/13/2005: wsfulton
- [Java] Fixes to remove "dereferencing type-punned pointer will break strict-aliasing rules"
- warnings in C wrappers when compiling C code with 'gcc -Wall -fstrict-aliasing'. Patch from
- Michael Cahill. This modifies many of the casts slightly, for example
- arg1 = *(DB_ENV **)&jarg1;
- to
- arg1 = *(DB_ENV **)(void *)&jarg1;
- 05/12/2005: wsfulton
- [C#] Support for C# attributes. C# attributes can be generated:
- 1) On a C/C++ type basis by specifying an inattributes and/or outattributes typemap attribute
- in the imtype or cstype typemaps (for C# return type or C# parameter type attributes).
- 2) On a wrapped method or variable by specifying a csattributes feature (%feature).
- 3) On a wrapped proxy class or enum by specifying a csattributes typemap.
- Examples are in the C# documentation (CSharp.html).
- 04/29/2005: wsfulton
- New configure option to turn off the default maximum compiler warning as
- they couldn't be removed even when overriding CFLAGS and CXXFLAGS with configure
- (./configure CFLAGS= CXXFLAGS=). To turn the maximum warnings off, run:
- ./configure --without-maximum-compile-warnings
- 04/28/2005: wsfulton
- Patch from Scott Michel which reworks the Java constructor and finalize/destructor typemaps,
- for directors to reduce the number of overall Java typemaps. Added the director_take and
- director_release typemaps to emulate other modules' __disown__ functionality.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA DIRECTORS ***
- 04/28/2005: wsfulton
- [C#] Fixed problems due to the over eager garbage collector. Occasionally the
- garbage collector would collect a C# proxy class instance while it was being used
- in unmanaged code if the object was passed as a parameter to a wrapped function.
- Needless to say this caused havoc as the C# proxy class calls the C++ destructor
- when it is collected. Proxy classes and type wrapper classes now use a HandleRef,
- which holds an IntPtr, instead of a plain IntPtr to marshal the C++ pointer to unmanaged
- code. There doesn't appear to be any performance degradation as a result of this
- modification.
- The changes are in the proxy and type wrapper classes. The swigCPtr is now of type HandleRef
- instead of IntPtr and consequently the getCPtr method return type has also changed. The net
- effect is that any custom written typemaps might have to be modified to suite. Affected users
- should note that the implementation uses the new 'out' attribute in the imtype typemap as the
- input type is now a HandleRef and the output type is still an IntPtr.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 04/28/2005: wsfulton
- [C#] Support for asymmetric type marshalling added. Sometimes the output type needs to be
- different to the input type. Support for this comes in the form of a new optional 'out'
- attribute for the ctype, imtype and cstype typemaps. If this typemap attribute is not
- specified, then the type used for both input and output is the type specified in the
- typemap, as has always previously been the case. If this typemap attribute is specified,
- then the type specified in the attribute is used for output types and the type specified
- in the typemap itself is used for the input type. An output type is a return value from
- a wrapped method or wrapped constant and an input type is a parameter in a wrapped method.
- An example shows that char * could be marshalled in different ways,
- %typemap(imtype, out="IntPtr") char * "string"
- char * function(char *);
- The output type is thus IntPtr and the input type is string. The resulting intermediary C# code is:
- public static extern IntPtr function(string jarg1);
- 04/22/2005: mkoeppe (Matthias Koeppe)
- [Guile] Fix generation of "define-method" for methods of
- classes with a constructor. Reported by Luigi Ballabio.
- 04/15/2005: wuzzeb (John Lenz)
- [Chicken]
- For wrapped functions that return multiple values (using argout),
- SWIG CHICKEN now returns them as multiple values instead of as
- a list. They can then be accessed using (call-with-values).
- 04/14/2005: wuzzeb (John Lenz)
- [Chicken]
- + Added a whole bunch of new _runme scripts into the chicken test
- suite. Also fix some bugs these new scripts turned up.
- + Added optimization when returning a wrapped proxy class. Before,
- a minor garbage collection was invoked every time a function returned.
- + All the chicken Examples should now run correctly
- 04/14/2005: wsfulton
- [C#] More fixes for typemap matching when wrapping variables, in particular
- std::string, so that std::string variables can be easily marshalled with
- a C# string property using:
- %include "std_string.i"
- %apply const std::string & { std::string *variable_name };
- std::string variable_name;
- (Recall that all class variables are wrapped using pointers)
- 04/05/2005: wuzzeb (John Lenz)
- [Chicken]
- + Added Examples/chicken/egg, an example on how to build a chicken
- extension library in the form of an egg. Also updated the
- documentation on the different linking options.
- + chicken test-suite now has support to check SWIG with the -proxy
- argument if there exists a _proxy_runme.ss file.
- + More fixes for overloaded functions and -proxy
- 03/31/2005: wsfulton
- Turned on extra template features for all languages which were
- previously only available to Python.
- This enables typemaps defined within a templated class to be used as
- expected. Requires %template on the templated class, %template() will
- also pick up the typemaps. Example:
- template <typename T> struct Foo {
- ...
- %typemap(in) Foo "in typemap for Foo<T> "
- or
- %typemap(in) Foo<T> "in typemap for Foo<T> "
- };
-
- %template(Foo_i) Foo<int>;
- %template() Foo<double>;
-
- will generate the proper 'in' typemaps wherever Foo<int> and Foo<double>
- are used.
- 03/30/2005: mkoeppe (Matthias Koeppe)
- [MzScheme] Patch from Hans Oesterholt for supporting MzScheme 30x.
- 03/29/2005: wuzzeb (John Lenz)
- [Chicken]
- + Reallow older versions of chicken (1.40 to 1.89) by passing -nocollection
- argument to SWIG
- + %import now works correctly with tinyclos. (declare (uses ...)) will be
- exported correctly.
- + TinyCLOS proxy classes now work correctly with overloaded functions
- and constructors.
- 03/29/2005: wsfulton
- [Java] Patch from Scott Michel for directorout typemaps. Java directors
- require the directorout typemaps like the other languages now. The new
- typemaps provide fixes for methods where the return type is returned
- by reference (this cannot automatically be made thread safe though).
- 03/22/2005: wsfulton
- Enum casting fixes. Visual C++ didn't like the C type casting SWIG produced
- when wrapping C++ enum references, as reported by Admire Kandawasvika.
- 03/21/2005: wsfulton
- [Perl] SF #1124490. Fix Perl macro clashes when using Visual Studio's STL string,
- so now projects can #include <string>.
- 03/21/2005: wsfulton
- Fixed %varargs which got broken with the recent default argument changes.
- Also works for Java and C# for the first time now.
- 03/17/2005: wuzzeb (John Lenz)
- [Chicken]
- + Fix a whole bunch of bugs in the chicken module. The entire
- test suite now compiles, with the exception of the tests that require
- std_vector.i, std_deque.i, and so on, which chicken does not have yet.
- + Add support for %exception and %typemap(exceptions). Exceptions are
- thrown with a call to (abort) and can be handled by (handle-exceptions)
- 03/15/2005: wsfulton
- [Java] Patch from Scott Michel for directors. Modifications to the typemaps
- giving users fine control over memory ownership and lifetime of director classes.
- Director classes no longer live forever by default as they are now collectable
- by the GC.
- 03/15/2005: wuzzeb (John Lenz)
- [Chicken] Add support for adding finalizers garbage collected objects.
- Functions that return new objects should be marked with %newobject and
- input arguments which consume (or take ownership) of a pointer should
- be marked with the DISOWN typemap.
- Also add support for correctly checking the number of arguments passed
- to a function, and raising an error if the wrong number are passed.
- 03/14/2005: wuzzeb (John Lenz)
- Add --without-alllang option to configure.in, which is the same as
- passing all the --without-python --without-perl5 etc... that Matthias added.
- 03/09/2005: wsfulton
- [Php] Memory leak fix for functions returning classes/structs by value.
- 03/08/2005: wsfulton
- [Perl] Fix for Perl incorrectly taking memory ownership for return types that
- are typedefs to a struct/class pointer. Reported by Josh Cherry.
- 03/07/2005: wsfulton
- [C#] Various exception changes for the std::vector wrappers. These now more
- accurately mirror the same exceptions that System.Collections.ArrayList throw.
- 03/07/2005: wsfulton
- [C#] Fix undefined behaviour after any of the std::vector methods
- throw an exception.
- 03/07/2005: wsfulton
- [C#] When null is passed for a C++ reference or value parameter, the
- exception thrown has been corrected to an ArgumentNullException instead
- of NullReferenceException as recommended in the .NET Framework documentation.
- The default throws typemaps turn a C++ exception into an ApplicationException,
- not a SystemException now.
- 03/07/2005: wsfulton
- [C#] Numerous changes in C# exception handling have been made over the past
- few weeks. A summary follows:
- The way in which C++ exceptions are mapped to C# exceptions is quite different.
- The change is to fix C# exceptions so that the C++ exception stack is correctly
- unwound as previously C++ exceptions were being thrown across the C PInvoke layer
- into the managed world.
- New typemap attributes (canthrow and excode) have been introduced to control the
- mapping of C++ to C# exceptions. Essentially a callback into the unmanaged world
- is made to set a pending exception. The exception to throw is stored in thread local
- storage (so the approach is thread-safe). The typemaps are expected to return
- from unmanaged code as soon as the pending exception is set. Any pending exceptions
- are checked for and thrown once managed code starts executing. There should
- be minimal impact on execution speed during normal behaviour. Full details will be
- documented in CSharp.html.
- The SWIG_CSharpThrowException() function has been removed and replaced with the
- SWIG_CSharpSetPendingExceptionArgument() and SWIG_CSharpSetPendingException()
- functions. The original name has been deliberately changed to break old code as
- the old approach was somewhat flawed. Any user defined exceptions that follow the
- same pattern as the old approach should also be fixed.
- Numerous new .NET framework exceptions are now available for easy throwing from
- unmanaged code. The complete list is:
- ApplicationException, ArithmeticException, DivideByZeroException,
- IndexOutOfRangeException, InvalidOperationException, IOException,
- NullReferenceException, OutOfMemoryException, OverflowException,
- SystemException, ArgumentException, ArgumentNullException and
- ArgumentOutOfRangeException.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 05/05/2005: mmatus
-
- Fix several memory leaks around. Even when we survive knowning
- swig is a memory leak factory, it was a little out of
- control. To run std_containers.i in the python test-suite,
- swig was using ~260MB, now it uses 'only' ~40MB, which is
- the same ammount that g++ uses, so, is not that bad.
- In the process, I found a couple of extra Deletes, which
- in some cases could trigger seg. faults and/or
- DOH/asserts.
-
- [python] Better support for directors + exception. More
- verbose errors and added an unexpected exception handler.
- [python] Fix memory leak for the
- std::vector<std::vector<int> >
- case,reported by Bo Peng.
- [python] Fix SwigPyObject compare problem reporte by
- Cameron Patrick.
- [python] Fix several warnings in the generated code
- for gnu-gcc, Intel and VC7.1 compilers.
- 02/25/2005: wuzzeb (John Lenz)
- Update documentation to use CSS and <div> instead of <blockquote>
- I used a script to convert the docs, and it set all the box classes
- to be "code". There are actually 4 different classes,
- "shell", "code", "targetlang", and "diagram". We need to go through
- and convert the divs depending on what they contain.
- 02/23/2005: mmatus
- [Python] Added option -nortti to disable the use of native
- C++ RTTI with directors (dynamic_cast<> is not used).
- Add more code for directors to detect and report errors in
- the python side.
- Extend the use of SWIGINTERN whenever is possible.
- Remove template warnings reported by VC7.1.
- Remove warnings reported by gcc/g++. Finally you can
- compile using
- g++ -W -Wall -c mymodule_wrap.cxx
- and no spurious errors will be generated in the wrapper
- code.
- 02/23/2005: wuzzeb (John Lenz)
- Added -external-runtime argument. This argument is used to dump
- out all the code needed for external access to the runtime system,
- and it replaces including the files directly. This change adds
- two new virtual functions to the Language class, which are used
- to find the language specific runtime code. I also updated
- all languages that use the runtime to implement these two functions.
- 02/22/2005: mmatus
- Fix %template + private error SF#1099976.
- 02/21/2005: mmatus
- Fix swigrun.swg warnings reported when using "gcc -W -Wall"
- (static/inline not used in front of a function
- declaration), and add SWIGUNUSED attribute to avoid
- unused warnings elsewhere.
- Fix unused variable warnings.
- [Python] Use new SWIGUNUSED attribute to avoid warnings in
- SWIGINTERN methods.
- [Python] Fix PyOS_snprintf for python versions < 2.2 (SF #1104919).
- [Python] Fix map/multimap to allow empty maps (reported by
- Philippe Hetroy).
- [Docs] Add some documentation to Python.html and
- SWIGPlus.html, including for example the fact that
- 'friends' are now supported.
- 02/21/2005: wsfulton
- [PHP] Patch from Olly Betts, so that wrappers compile with Zend thread safety enabled.
- 02/17/2005: wsfulton
- Memory leak fix in some of the scripting language modules when using default
- arguments in constructors. The scripting language was not taking ownership of the
- C++ object memory when any of the constructors that use default arguments was called.
- 02/16/2005: wsfulton
- SF #1115055: Failed make install. Patch from Rob Stone.
- 02/16/2005: wsfulton
- [Java] SF #1123416 from Paul Moore. Correct memory allocation for STRINGARRAY
- typemaps in various.i.
- 02/15/2005: wsfulton
- Disabled typemap search changes for now (see entry 19/12/2004). It breaks
- old typemaps, lengthens the execution time by about 25% and introduces
- inconsistencies.
- 02/15/2005: wsfulton
- swig -help follows other software by printing to stdout instead of stderr now.
- swig -version also displays to stdout instead of stderr now.
- Behaviour reported by Torsten Landschoff.
- 02/15/2005: wsfulton
- [Ruby] Fix for the less commonly used ordering of %include and #include, so
- that the generated code compiles. Bug reported by reported by Max Bowsher.
- %include foo.h
- %{
- #include foo.h
- %}
- 02/15/2005: wsfulton
- [C#, Java] SWIG_exception macro will now return from unmanaged code / native code
- as soon as it is called. Fixes possible JVM crashes and other code unexpectedly
- being executed. Note SWIG_exception is only occasionally used by SWIG library
- writers, and is best avoided by SWIG users.
- 02/15/2005: wsfulton
- [C#, Java] Typemaps can now be targeted at global variable names
- and static member variable names. Previously the typemaps for
- the setters were ignored, for example:
- %typemap(in) int globalint "..."
- int globalint;
- 02/13/2005: mkoeppe (Matthias Koeppe)
- [Guile] Add %typecheck for SWIGTYPE, add %typecheck for ptrdiff_t, fix
- typemaps for size_t.
- [Pike] Merge patch from Torsten Landschoff for improved Pike configuration.
- 02/12/2005: mkoeppe (Matthias Koeppe)
- New configure switches --without-tcl, --without-python etc. allow to
- disable the search for installed languages.
- 01/31/2005: wuzzeb (John Lenz)
- - Add DohSortList to DOH
-
- - Improve the runtime type system:
- + Speed. Type loading is now O(n log n) instead of O(N^2), which
- for large modules is a huge improvement.
- + A whole bunch of functions in swigrun.swg no longer need the
- swig_type_list_handle passed to them. The only one left is
- TypeQuery. This also makes runtime.swg a lot smaller.
- + Split up swig_type_info structure into two structures
- (swig_type_info and swig_cast_info)
- + Store a pointer to a swig_type_info rather than just the type
- name string in the linked list of casts. First off, this makes
- the guile module a little faster, and second, the
- SWIG_TypeClientData() function is faster too.
- + Add the idea of a module into the type system. Before, all the
- types were stored in one huge linked list. Now, another level is
- added, and the type system stores a linked list of modules, each
- of which stores an array of types associated with it.
- + For more information of how the runtime type system now works,
- please see Doc/Manual/typemaps.html and Doc/Devel/runtime.txt
-
- - Update all language modules to use the new type system. The changes
- to each language module are minor. All languages are now able to
- use runtime.swg for external access to the type system. Before
- only python and perl did.
- - [guile, mzscheme, ocaml, and php4] These languages opened up the
- init function inside the .cxx code, and any code in the .swg files
- in the init section was inside this function. This was a problem
- for swiginit.swg, which needs to be inserted before the SWIG_init
- function is opened. Thus I changed these languages to be like
- python or perl, where the init function is declared in the .swg
- file.
-
- - [Ruby] Instead of moving the init function to the .swg file, I
- added a new section initbeforefunc, and then added
- %insert(initbeforefunc) "swiginit.swg"
- - [MzScheme] Fix enums and fix Examples/Makefile.in so that if
- multiple -I arguments are specified in the INCLUDES variable, each
- gets a ++ccf.
- - [Guile GH] Update Guile GH to use the new type system. See
- Doc/Manual/Guile.html for how smobs are now used.
- 01/11/2005: wsfulton
- [C#] New typemap called 'csconstruct'. The code in this typemaps was previously hard
- coded and could not be customised by a user. This typemap contains the code that is
- generated into a proxy class's constructor.
- [Java] New typemap called 'javaconstruct'. The code in this typemaps was previously hard
- coded and could not be customised by a user. This typemap contains the code that is
- generated into a proxy class's constructor. Another typemap named 'javaconstruct_director'
- is used instead when the proxy class is a director class.
- [C#, Java] If a C++ class did not have a default constructor, a protected default constructor
- was automatically generated by SWIG. This seems is unnecessary and has been removed
- and thereby giving the user almost complete control over the generated code along with the
- new typemaps above.
- 19/12/2004: mmatus
- [Disabled, see entry 02/15/2004]
- - Fix typemap search, now the "out" typemap search is done as follows
- int *Foo::foo(int bar) -> int *Foo::foo(int bar)
- -> int *Foo::foo
- -> int *foo(int bar)
- -> int *foo
- -> int *
- then, now you can be more specific, and define
- /* apply only for 'Foo::foo' method */
- %typemap(out) int * Foo::foo(int *bar) ...;
- /* apply for all 'foo' functions/methods */
- %typemap(out) int * foo(int *bar) ...;
- %inline {
- struct Foo {
- int *foo(int *bar);
- };
- }
-
- 15/12/2004: mmatus
- - More fixes for templates and template default args.
- See template_default.i for scary cases that now are
- supported, besides the already ugly STL/std cases.
-
- - Cosmetics and more use of 'const' where it was implicit.
- - Other fixes for OSS, which is now working again with 1.3.25.
-
- Version 1.3.24 (December 14, 2004)
- ==================================
- 12/12/2004: wuzzeb (John Lenz)
- [Chicken] Fix a bunch of bugs relating to -proxy support
- + non-class variables now export properly using -proxy
- + static member functions now export properly using -proxy
- + member class variables now export properly using -proxy
- + added a -nounit argument, which does not export the (declare (unit ...))
- + correctly install swigclosprefix.scm
- + constants (enums, defines) now correcly export when using -proxy
- 12/11/2004: wsfulton
- configure fix for when more than one version of jni_md.h is found
- in the Java include directory (was generating lots of sed error
- messages).
- 12/08/2004: wsfulton
- [Java] Fixes to arrays_java.i so that one can apply the array
- typemaps to functions taking pointers as input, eg
- %include "arrays_java.i"
- %apply int[] {int*};
- void foo(int *a);
- 12/05/2004: wsfulton
- [Java] Director mods contributed by Scott Michel. New typemaps
- directordisconnect and directordisconnect_derived for the
- swigDirectorDisconnect() method. Also fix to get the javapackage
- typemap working again.
- 12/05/2004: mmatus
- - Finishing the fixes for templates + default template
- args + specializations.
- - [Python] Now we use the new templates + default template
- args in the std/STL library. That means the internal
- swig files are getting uglier since we now support the
- original declarations:
- template<class _Tp, class _Alloc = std::allocator< _Tp > >
- class vector {
- ....
- };
-
- template<class _Key, class _Tp, class _Compare = std::less<_Key >,
- class _Alloc = std::allocator<std::pair<const _Key, _Tp > > >
- class map {
- ....
- };
-
- and the user can use the %template directive as
- %template() std::vector<int>;
- %template() std::vector<int, std::allocator<int> >;
- %template() std::vector<int, MyAllocator<int> >;
- Now we are closer to the cleaning/rewriting of the
- python std/STL support, such that we recover support for
- MSVC++ 6.0, and we can add support for other languages
- too.
- 12/02/2004: wsfulton
- [Java] Fix for directors when wrapping methods using a member enum
- and typesafe/proper enums enabled.
- 12/01/2004: mmatus
- - Fix typemaps to work with templates and default template
- args, ie
- template <class A, class B = int>
- struct Foo {
- };
- %typemap(in) Foo<int> *{...}
- %typemap(out) Foo<int,int> *{...}
- Foo<int> * foo( Foo<int> *f1, Foo<int,int> *f2);
- now 'f1', 'f2' and the return value resolve the provided
- typemaps properly.
- This is highly needed for proper STL support, see new
- std_basic_string.i, std_sstream.i, etc.
- - Added std_sstream.i, and fix std_basic_string.i to use
- the new typemaps + template def. arg mechanism. Also,
- added the needed std_alloc.i. Now, all the containers
- can be modified to support std::allocator, like in:
-
- template<class T, class A = std::allocator<T > >
- class vector {
- public:
- ....
- };
-
- This change is only completed by now for basic_string.
- - Fix for smart pointers + members + extensions:
- %extend Foo {
- int extension(int i, int j) { return i; }
- int extension() { return 1; }
- }
- %inline %{
- class Foo {
- public:
- int y;
- static const int z;
- };
-
- class Bar {
- Foo *f;
- public:
- Bar(Foo *f) : f(f) { }
- Foo *operator->() {
- return f;
- }
- };
- now you can
-
- f = Foo()
- f.y = 3
- a = f.z
- f->extension()
-
- b = Bar(f)
- b.y = 3
- a = b.z
- b->extension()
- - Other small errors fixes, mostly python.
- 11/25/2004: wsfulton
- [Java] Numerous director bug fixes so that the correct java types
- and canonicalized types in the JNI code are emitted. Use of the
- $javaclassname special variables in the director typemaps now
- consistent with the non-director typemaps. The types used for
- typemap lookups are also corrected in a few places. If you
- previously had your own director typemaps, ensure they are using the
- correct C++ type.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA DIRECTORS ***
- 11/25/2004: wsfulton
- const enum SWIGTYPE & typemaps added. These wrap const enum references
- as if they were passed by value. Const enum references thus work the
- same as const reference primitive types such as const double &,
- const int & etc. Typemaps added for Java, C#, Ruby, Tcl, Perl and Pike.
- 11/25/2004: wsfulton
- [Java, C#] New special variable: $*javaclassname, similar to $javaclassname
- and $&javaclassname. The new one removes a pointer from the C type before
- obtaining the Java class name. One or more of $javaclassname,
- $&javaclassname or $*javaclassname may now appear in a typemap. Likewise for
- C# using csclassname instead of javaclassname.
- 11/25/2004: wsfulton
- The last vestiges of enums being handled as integers removed from the
- internals. The wrapper methods use the enum type rather than an int
- now. The net result is added type safety for enums when handled as
- pointers, references etc. Previously in situations such as a method
- taking a pointer to an enum, a pointer to an int or a pointer to an
- enum of some other type could inadvertantly be passed to the method.
- This is now fixed as the descriptor for an enum is no longer based on
- an int, but the enum type instead. Anonymous enums are still handled
- as integers.
- The consequence for scripting language users in correct usage of enums
- should not be noticeable. There is no change for any of the languages
- where enums are passed by value - most of the scripting languages will
- still accept an integer for an enum value and the strongly typed
- languages still use either typesafe enums, integers or proper enums
- depending on what the user configures. For Java and C# users a change
- in the typewrapper class name has occurred (for enum pointers,
- references etc). For example:
- enum Numbers { one=1, two };
- enum Numbers* number();
- In Java and C# this must now be coded as
- SWIGTYPE_p_Numbers n = modulename.number();
- rather than
- SWIGTYPE_p_int n = modulename.number();
- *** POTENTIAL INCOMPATIBILITY ***
- 11/21/2004: wsfulton/mmatus
- Added missing deprecated warning for %name and remove remaining %name
- usage in the SWIG libraries.
- 11/21/04: mmatus
- - [Python] Adding the PySwigObject to be used for carrying
- the instance C/C++ pointers. This is used instead of
- string and PyCObjects.
- The new PySwigObject is even safer than PyCObject, and
- more friendly than plain strings:
- now you can do
- print a.this
- <Swig Object at _00691608_p_A>
- print str(a.this)
- _00691608_p_A
- print long(a.this)
- 135686400
- print "%s 0x%x" % (a.this, a.this)
- _00691608_p_A 0x8166900
- the last one is very useful when debugging the C/C++
- side, since is the pointer value you will usually get
- from the debugger.
- Also, if you have some old code that uses the string
- representation "_00691608_p_A", you can use it now again
- using 'str(ptr)', or by calling 'str = PyObject_Str(obj)'
- in the C/C++ side.
-
- This change is mainly for nostalgic swig users that miss
- the string representation, but also allows to say again
- if a.this == b.this:
- return "a is b"
- and well, since the change were really simple, maybe in
- the future we will be able to do
-
- next = a.this + 1
- or add native python iteration over native C/C++ arrays,
- ie, no need to create/copy new tuples when returning and
- array or vector.
- Also, a PySwigPacked object was adding to carry a member
- method pointer, but this is probably a temporal solution
- until a more general object for methods is added.
- Be aware that to simplify maintaining and compatibility
- with other tools, the old string and PyCObjects
- representation could disappear very soon, and the
- SWIG_COBJECTS_TYPES or SWIG_NO_OBJECT_TYPES macros will
- have no effect at compilation time. Still, the three
- mechanisms are present in the code just for testing,
- debugging and comparison purposes.
-
- 11/21/04: mmatus
- - [Python] Adding back support for using the swig runtime code
- inside the user code. We just allow the user to include
- the minimal code needed to implement the runtime
- mechanism statically, just as in done in the swig
- modules.
-
- To use the swig runtime code, for example with python,
- the user needs include the following:
-
- #include <Python.h> // or using your favorite language
- #include <swigrun.swg>
- #include <python/pyrun.swg> // or using your favorite language
- #include <runtime.swg>
- the files swigrun.swg, pyrun.swg and runtime.swg can
- be checked out by using swig -co, or they can simply
- be found by adding the swig lib directory to the
- compiler include directory list, for example
- SWIGLIB=`swig -swiglib`
- c++ -I${SWIGLIB} ..
- of better, using the CPPFLAGS, but that depends on your
- environment.
-
- This change can be ported to the other languages too,
- you just need to isolate the needed runtime code in
- a single file like 'pyrun.swg', and provide the
- SWIG_Runtime_GetTypeList() method. Look at the
- Lib/python/pyrun.swg file and the Examples/python/swigrun
- example.
- 11/15/04: mmatus
- - Fix mixed_types.i + gcc-3.4, ie, arrays + references +
- typedefs
- - Fix multidim arrays + typedefs,ie
- typedef char character[1];
- typedef character word[64];
- - Process protected/private bases in the same way before
- we process protected/private members, ie, we check
- for constructors, operator new, virtual members, etc.
-
- - Fix Ruby/Java to work (or ignore) multi-inheritance +
- directors. Allow other languages to define if it is
- supported or not.
-
- - Now you can run
- SWIG_FEATURES="-directors -dirprot"
- make check-ruby-test-suite
- make check-python-test-suite
- make check-java-test-suite
- make check-ocaml-test-suite
- and you will get only 'real' errors. ruby and python
- compile with no errors, java shows some problems.
- Version 1.3.23 (November 11, 2004)
- ==================================
- 11/05/2004: wsfulton
- Patch #982753 from Fabrice Salvaire: Adds dependencies generation for
- constructing makefiles. New command line options -MF -MD -MMD to work
- with the current options -M and -MM. These options are named the same
- and work the same as in gcc.
- 11/05/2004: wsfulton
- %ignore/%rename changes for methods with default arguments to mirror
- %feature behaviour. See previous entry.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/04/2004: wsfulton
- %feature improvements for fine tuning when wrapping methods with
- default arguments. Any %feature targeting a method with default arguments
- will apply to all the extra overloaded methods that SWIG generates if the
- default arguments are specified in the feature. If the default arguments are
- not specified in the feature, then the feature will match that exact
- wrapper method only and not the extra overloaded methods that SWIG generates.
- For example:
- %feature("except") hello(int i=0, double d=0.0);
- void hello(int i=0, double d=0.0);
- will apply the feature to all three wrapper methods, that is:
- void hello(int i, double d);
- void hello(int i);
- void hello();
- If the default arguments are not specified in the feature:
- %feature("except") hello(int i, double d);
- void hello(int i=0, double d=0.0);
- then the feature will only apply to this wrapper method:
- void hello(int i, double d);
- and not these wrapper methods:
- void hello(int i);
- void hello();
- This has been introduced to make %feature more powerful to ease the migration
- to new default arguments wrapping approach.
- *** POTENTIAL INCOMPATIBILITY ***
- If you previously had a %feature and didn't specify the default arguments,
- you will have to add them in now or you can obtain the original behaviour
- by using %feature("compactdefaultargs").
- 11/04/2004: wsfulton
- [C#] Typemaps for std::vector added into std_vector.i. The proxy classes
- generated are modelled on the .NET ArrayList class. This isn't quite
- ready for general consumption yet, but will work with vectors of primitive
- types and some classes.
- 10/3/2004: wuzzeb (John Lenz)
- [GUILE] The -scm interface is now the default. The old GH interface can
- still be enabled by passing -gh to SWIG.
- 10/2/2004: mmatus
- - More fixes for namespace + class declarations.
- As an extra bonus, we get %template support for static/members class
- methods, ie, now you can say:
- namespace space {
- struct A
- {
- template <class Y>
- static void fooT(Y y) { }
- };
- }
-
- struct B
- {
- template <class Y>
- void barT(Y y) {}
- };
- %template(foo) space::A::fooT<double>;
- %template(foo) space::A::fooT<int>;
- %template(foo) space::A::fooT<char>;
-
- %template(bar) B::barT<double>;
- %template(bar) B::barT<int>;
- %template(bar) B::barT<char>;
- and call
- A.foo(1)
- b = B()
- b.bar(1)
-
- note the methods are emitted inside the classes,
- and hence, the %template name refers to the 'member'
- method name, not a global namespace name.
- 10/31/2004: mmatus
- - Solve namespace + class declarations, as in
- namespace foo {
- struct Bar;
- struct Foo {
- };
- }
- struct foo::Bar : Foo {
- };
- see namespace_class.i for more examples.
- - Fix %template directive to properly use namespaces,
- including the case:
- namespace one
- {
- template <typename T>
- struct Ptr {};
- }
- namespace one
- {
- struct Obj1 {};
- typedef Ptr<Obj1> Obj1_ptr;
- %template(Obj1_ptr) Ptr<Obj1>;
- }
-
- namespace two
- {
- struct Obj2 {};
- typedef one::Ptr<Obj2> Obj2_ptr;
- %template(Obj2_ptr) one::Ptr<Obj2>;
- }
- this is done by using the namespace name 'one' to create
- a namespace node to emit the template instantiation,
- just as before, but the template parameters are resolved
- and qualified in the current namespace ('one' or 'two').
- This is same way that typedef works.
- This resolve the smart_pointer_namespace2.i case, and at
- the same time, several other ones where before swig was
- generating the
- "Can't instantiate template 'xx' inside namespace 'yy'"
-
- error message. In fact, that error doesn't exist
- anymore. You can only get an error if you use a bad
- namespace name or so.
- 10/30/2004: mmatus
- - [ruby] Directors fixes:
- - enums and std::strings are working now (several
- reports in bug track system)
- - added patch 1025861 for director + exceptions
-
- *** Attention ***: ruby with directors + protected
- members work with version 1.7+. Older versions seems to
- have a broken signature for'rb_protect'.
-
- If you need to use an old version, look at
- http://excruby.sourceforge.net/docs/html/ruby__hacks_8hpp-source.html
- for workarounds.
-
- - [ruby] Fix memory allocation problem in typemap (bug 1037259)
- - [tcl] Fix (enums|constants) + namespace option
- (reported by jason.m.surprise@intel.com).
- - [perl] Add patch 962168 for multiple inheretance
-
- - Fix 'defined' as variable name.
- 10/29/2004: wsfulton
- Seg fault fix for global scope operator used for friend methods:
- class B {
- friend void ::globalscope();
- ...
- };
- 10/28/2004:mmatus
- - Added module and swig option "templatereduce" to force swig
- to reduce any type needed with templates, ie, in these cases
- %module("templatereduce") test
- template <class T> struct A { };
- typedef int Int;
- %template(A_Int) A<Int> ==> %template(A_Int) A<int>
- typedef B* Bp;
- %template(A_Bp) A<Bp> ==> %template(A_Bp) A<B*>
- swig reduces the types Int and Bp to their primitives
- int and B*. This is closer to the usual compiler
- resolution mechanism, and it is really needed sometimes
- when you mix templates + typedefs + specializations.
- Don't use it if you don't have any problem already,
- since the type reduction can interfere with some
- user typemaps, specially if you defined something like
- typedef int Int;
- %typemap(in) Int ...;
- in this case, when you use the "templatereduce" option,
- swig will ignore the user typemap, since the "typedef int Int"
- will take precedence, and the usual "int" typemap will be
- applied.
- Note that the previous case is not common, and should be
- avoided, ie, is not recommended to use a typedef and a
- typemap at the same time, specially if you are going to
- use templates + specializations.
- - Directors:
- virtual destructor is always emitted now, this doesn't
- cause any harm, and could solve some nasty and
- mysterious errors, like the one mentioned by Scott.
- also the destructor is not in-lined, so, that can solve
- some other mysterious errors when mixing directors +
- imports + embedded applications + some specific compilers.
-
- 10/27/2004: wsfulton
- [C#] typemaps.i library file with INPUT, OUTPUT and INOUT typemaps added.
- 10/27/2004: wsfulton
- [Java] std::wstring typemap fixes in std_string.i from Russell Keith-Magee.
- 10/25/2004: mmatus
- - Using + namespace is working now (using_namespace.i).
- - Derived + nested classes is working now
- (deriver_nested.i), but of course, we are still waiting
- for the nested class support.
-
- - Directors:
- - unnamed parameters support,
- - protected constructor support (automatic and with
- dirprot mode),
- - detection of really needed protected declarations
- (members and constructors) now is done automatically.
- Even if you don't use the 'dirprot' mode, swig will
- wrap what is minimally needed (and protected) for the
- code to compile.
-
- what is public, as usual, is always wrapped, and if
- you use the 'dirport'
-
- - Final fixes for the OSS to compile with SWIG 1.3.23 (my
- very very ugly C++ + templates + everything mounters wrap).
- 10/25/2004: wsfulton
- [C#] New commandline option -dllimport. This enables one to specify
- the name of the DLL for the DllImport attribute. Normally this name
- comes from the module name, so now it is possible to override this:
- swig -csharp -dllimport xyz example.i
- will generate for all the wrapped PInvoke methods:
- [DllImport("xyz", EntryPoint="...")]
- public static extern ...
- The wrappers from many different SWIG invocations can thus be compiled
- into one DLL.
- A new special variable $dllimport can also be used in typemaps, pragmas,
- features etc. This will get translated into the value specified by -dllimport
- if specified, otherwise the module name.
- 10/22/2004: wsfulton
- [Java] Patch #1049496 from Scott Michel fixes directors methods with
- enums when wrapped with typesafe or proper Java enums.
- 10/21/2004: wsfulton
- Fixes for default arguments in director constructors (Python, Ruby, Ocaml).
- 10/21/2004: mmatus
- - [Python] Add the '-cpluscast' option to enable the 'new'
- C++ casting operators, such as 'static_cast', inside the
- typemaps. By default swig use the old C cast style, even
- when parsing C++.
-
- - [Python] Add the '-new_vwm' option to enable the new
- SwigValueWrapper mode. Now this is mainly for testing
- that the typemaps are really safe for any future
- solution, but you can use it if you have a very strange
- error with default cosntructors missing + %apply +
- %typemap, and if everything else fails (see
- valuwrapper_opaque.i for alternative and current
- solutions). If you are a user that don't know what is
- SwigValueWrapper, don't even try it.
- - [Python] Add the '-noh' option to be used with directors
- and when you prefer to disable the generation of the
- director header file. If not used, swig will work as
- usual generating both the wrap.cxx and wrap.h files. If
- you use it, swig will only generate wrap.cxx.
- 10/21/2004: wuzzeb (John Lenz)
- - If you define SWIG_TYPE_TABLE when compiling a wrapper file,
- the runtime types will be stored in the given type table name.
- Using this, you can seperate different modules to share their
- own type systems. -DSWIG_TYPE_TABLE=Mytable
- - [Python] If you define SWIG_STATIC_RUNTIME then the type information
- will be static to this wrapper. Nothing will be shared with any
- other modules
- - [Python] If you define SWIG_LINK_RUNTIME, then instead of using
- the new way of sharing type information, the wrapper will expect
- to be linked against the Lib/linkruntime.c file. Any modules compiled
- with SWIG_LINK_RUNTIME and linked against linkruntime.c will all
- share type information.
- 10/20/2004: mmatus
- - [Python] Initial fix for python/import example. Please
- update the Makefile (autoconf, configure, etc, expert),
- since now probably is only working with g++, icc and a
- few other compilers that have the -shared option.
- We need to create additional shared libraries for the
- virtual destructors. Old and usually forgotten C++
- requirement.
-
- Same fix need to be used in perl, I think.
- - [Python] Fix generation of header file for directors,
- now directors.swg is also included, so, it can be really
- used from C++, and it solves some problem with compiler
- that require that, even with the simple swig inclusion.
- - [Python] Reordering the methods and moving some bodies
- outside the class declaration. This is needed due to
- some gcc-2.96 internal compiler errors. It seems the
- PYTHON class is getting too large to been declared and
- defined at the same time.
- - Add the -oh option to change the output header file name
- if needed:
- swig -c++ -python test.i -o test.CC -oh test.HH
-
- this is mainly needed when using directors, and if the
- current default header file name is not good for you,
- which is generated as follow:
- swig -c++ -python test.i => test_wrap.h
- swig -c++ -python test.i -o test.CC => test.h
- 10/20/2004: wsfulton
- 1) Compact default arguments feature added. This feature allows one
- to use the default argument code generation that was used in
- SWIG-1.3.22 and earlier versions. It produces more compact wrappers
- as only one wrapper method is generated for any method with default
- arguments. So the advantage is it generates less code but has the
- original limitations, like it it does not work with all default arguments
- and default arguments cannot be taken advantage of in the strongly typed
- languages (C# and Java). It is implemented via the usual %feature mechanism:
- %feature("compactdefaultargs");
- 2) Keyword arguments (kwargs) are working again for default arguments
- in the languages that support it, ie, Python and Ruby. The new default
- argument wrapping approach using overloaded methods cannot support kwargs
- so the compact default argument feature is automatically turned on when
- kwargs are specified, by %feature("kwargs").
- 3) Compact default arguments are also automatically turned on when wrapping
- C (not C++) code. This is to support the bizarre notion of default arguments
- for C code.
- 10/20/2004: wsfulton
- Overloaded templated functions in namespaces also working now.
- Templated functions with default arguments in namespaces too.
- 10/19/2004: mmatus
- - Allow to disable the new SwigValueWrapper mechanism,
- if you add the following line in your language main.
- /* Turn on safe value wrapper use mode */
- Swig_value_wrapper_mode(1);
-
- Now is only active in python. All the other languages
- are using the old resolution, but they can also use the
- "valuewrapper"/"novaluewrapper" features to fix some
- of the old broken cases. Note, however, that not all
- the broken cases can be solved in that way.
- The new mechanism seems to be working fine in perl, ruby
- and tcl, but failing in some typemaps in java.
- Hence, is upto the language maintainer to test it, and
- decide to enable it or not.
- Look at the valuewrapper_opaque.i for examples.
- - Fix more SwigValueWrapper cases when the new mechanism
- is active. Now it also check for local typemap
- variables, see valuewrapper_opaque.i for an example when
- this is needed. But again, this extra checking will only
- be activated when using the new value wrapper mode.
- - [Python] Fix variable wrapping of classes with private
- assign operators. It should be easy to fix in all the
- other modules, instead of checking
- if (!Getattr(n,"immutable")) ...
-
- you need to verify
- if (is_assignable(n)) ...
- Look at the private_assign.i for an example.
- 10/18/2004: mmatus
- - %features "director"/"nodirector" now work as expected.
- - General fixes in %feature to resolve function decl
- properly,
-
- %feature("hello") foo();
- char foo() -> f() // was working
- char *foo() -> f().p // it wasn't
-
- - Template + specialization + default template args now is
- working, (don't confuse with template + default arg
- values, that was solved before), now this ugly case is
- working:
- template <class T, class A = Alloc<T> >
- struct Vector
- {
- Vector(T a){}
- };
- template <>
- struct Vector<double>
- {
- Vector(){}
- int foo() { return 0; }
- };
- %template(V_c) Vector<char, Alloc<char> >;
- %template(V_i) Vector<int>; // picks Vector<int,Alloc<int> >
- %template(V_d) Vector<double>; // picks the specialization
-
- this is needed for automatic STL support (later will
- be).
- - Fix the template + typedef errors in test-suite, which
- probably will fix another group of strange template +
- namespaces + typedefs errors.
- - %warnfilter is working better now, parser.y tries to use
- them when needed.
- - **** New default type resolution method (stype.c) *****
- It preserves the original mixed types, then it goes
- 'backward' first deleting the qualifier, then the inner
- types, for example:
-
- typedef A *Aptr;
- const Aptr&;
- r.q(const).Aptr -> r.q(const).p.SWIGTYPE
- r.q(const).p.SWIGTYPE -> r.p.SWIGTYPE
- r.p.SWIGTYPE -> r.SWIGTYPE
- r.SWIGTYPE -> SWIGTYPE
-
- enum Hello {};
- const Hello& hi;
- r.q(const).Hello -> r.q(const).enum SWIGTYPE
- r.q(const).enum SWIGTYPE -> r.enum SWIGTYPE
- r.enum SWIGTYPE -> r.SWIGTYPE
- r.SWIGTYPE -> SWIGTYPE
-
- int a[2][4];
- a(2).a(4).int -> a(ANY).a(ANY).SWIGTYPE
- a(ANY).a(ANY).SWIGTYPE -> a(ANY).a().SWIGTYPE
- a(ANY).a().SWIGTYPE -> a(ANY).p.SWIGTYPE
- a(ANY).p.SWIGTYPE -> a(ANY).SWIGTYPE
- a(ANY).SWIGTYPE -> a().SWIGTYPE
- a().SWIGTYPE -> p.SWIGTYPE
- p.SWIGTYPE -> SWIGTYPE
- before it always stops after finding ref/pointer/enum/array/etc.
-
- Now, then, you can define (use and apply) 'higher' typemaps such as:
- %typemap(in) SWIGTYPE* const&
- %typemap(out) char FIXSIZE[ANY]
- %typemap(in) SWIGTYPE* const&
- %typemap(in) const enum SWIGTYPE&
- %typemap(in) SWIGTYPE[ANY][ANY]
- %typemap(in) const char (&)[ANY]
-
- It is possible with this change that previous typemaps
- that were defined (but ignored), now will start to work.
- Also, it is necessary check for the '%typemap(varin) SWIGTYPE[]',
- before it was usually not defined (but char[] was),
- and that can produce some inconsistencies.
- *** POTENTIAL INCOMPATIBILITY ***
- This change was needed for STL, since std::vector<enum Hello>
- std::vector<A*>, etc, will always generate methods that
- mix const references with the vector type.
- Now that is working, all the std::container<T*>
- specialization will not be needed anymore, well, in
- theory.
- In the practice, everythin is working as before until
- the proper mixed types are defined and the libraries
- simplified to use them.
- - Change the behavior of extern "java"/"fortran"/"etc",
- now swig produces a warning, and use extern "C" instead.
- The warning can also be disable with the "-w 313" flag.
- (WARN_PARSE_UNDEFINED_EXTERN).
- - SwigValueWrapper is now more selective (lang.cxx).
- [Perl/Tcl]
- - Fix some typemaps (perl/tcl) to work properly with
- SwigValueWrapper. This was not a problem with
- SwigValueWrapper, but with the typemaps that now are
- safe to use with %apply.
- [Python]
- - Fix %callback/%pythoncallback work now as before after
- the def args changes. Also, %callback now is an alias
- for %pythoncallback, so, they do the same.
- [Python/Ruby]
- - %callback is more usable and uniform:
- %callback("%s_cb") foo(); // for both, python/ruby
- %callback("%s_cb"); // for both, python/ruby
- %callback(1) foo(); // only in python.
- 10/17/2004: arty
- [OCAML]
- - Tweak to enum typing for soundness in the presence of multiple
- modules.
- - global functions are now unambiguous in multiple loaded modules.
- - Fixed test case code to build multimodule test cases correctly.
- - There is no way to share overload resolution across modules
- because of soundness issues. If the user wants to call some
- function foo from an arbitrary module bar, they will have to
- use Bar._foo to call it correctly. Later I will fix the
- camlp4 module to do something clever in this case.
- - Promided performance overhaul of class mechanism.
- - Removed symbol hack for ocaml-3.07 and below which is not needed
- for ocaml-3.08 and above.
- 10/16/2004: wuzzeb (John Lenz)
- [CHICKEN]
- - Completly change how chicken.cxx handles CLOS and generic code.
- chicken no longer exports -clos.scm and -generic.scm. The clos
- code is exported directly into the module.scm file if -proxy is passed.
- - The code now always exports a unit. Running the test-suite is now
- majorly broken, and needs to be fixed.
- - CLOS now generates virtual slots for member variables similar to how
- GOOPS support works in the guile module.
- - chicken no longer prefixes symbols by the module name, and no longer
- forces all names to lower case. It now has -useclassprefix and -closprefix
- similar to how guile handles GOOPS names.
- 10/16/2004: wsfulton
- Templated functions with default arguments working with new default argument
- wrapping approach. The new approach no longer fails with the following default
- argument pattern (previously failed with some primitive types, like
- unsigned primitive types):
- template<typename T> int foo(const T& u = T());
- %template(foo) foo<unsigned int>;
- This relies on the templated function overloading support just added, so all
- the combinations of overloading by template parameters and normal parameters
- as well as overloading with default parameters works.
- 10/16/2004: wsfulton
- Added support for the large range of templated function overloading that C++
- supports.
- - Overloaded templated functions, eg
- template<typename T> int overload(T t);
- template<typename T> int overload(T t, const T &r);
- - Fixes where the templated type is not used in the parameter list, eg
- template<typename T> void xyz();
- template<> void xyz<double>();
- - Fixes for overloading of plain functions by a templated function:
- void abc(double d);
- template<typename T> void abc(T t);
- - Overloading by templated parameters fixed:
- template<typename T> void foo(T t) {}
- template<typename T, typename U> void foo(T t, U u) {}
- %template(foo) foo<double, double>;
- - All combinations of the above also working including specializations, eg:
- void abc(double d);
- template<typename T> void abc(T t);
- template<> void abc<double>(double t);
- template<> void abc(int t);
- 10/16/2004: wuzzeb (John Lenz)
- - Remove the ability to share type information by using c linking.
- All type sharing happens through a global variable in the target language.
- + Remove SWIG_NOIMPORT, SWIG_RUNTIME, and related defines.
- + Deprecate -runtime, -noruntime command line options
- + Update test-suite common.mk to correctly build multicpptest
- + Remove reference to precommon.swg
- + Update the guile_gh interface to share data by a global var instead
- of c linkage.
- - Remove Advanced.html, since everything in it is now obsolete
- 10/09/2004: mmatus
- - Split the python std/STL C++ library files, now
- all the language independent definitions are under
- the directory
-
- Lib/std
- and hence, can be used from other languages.
- - Add more documentation to the Python STL, and
- clean unnecessary code.
- - Add initial C99 complex support, and some fixes
- for long double.
- 10/08/2004: mmatus
- - Fix the SwigValueWrapper for opaque types, now it is
- applied for opaque templates and classes, for which we
- don't know if there is or not a default constructor, ie
- struct A {
- A(int);
- };
-
- Still, if you know that you class has a default
- constructor, and for some very very particular reason
- you want to avoid the SwigValueWrapper, and you don't
- want or can't expose the class to swig, now you can
- say
- %feature("novaluewrapper") A;
- class A;
-
- or the other way around, if the class has a default
- constructor, but you want to use the value wrapper, you
- can say
- %feature("valuewrapper") A;
- struct A {
- A();
- ....
- };
-
- - Fix for char > 128, ie
- const char tilde_a = '\341';
- - Add patch 1041858 for $lextype, which carries the
- literal type of a symbol. See lextype.i in the
- test-suite for more details.
-
-
- 10/07/2004: wsfulton
- {Ruby, Java] Fix director + 'empty' throws
- struct A {
- A() throw();
- virtual ~A() throw();
- int foo() throw();
- };
- 10/06/2004: wuzzeb (John Lenz)
- [TCL]
- - Fix bug reported by William A. Hoffman propagating clientdata
- between modules. Added clientdata_prop.multicpptest to check for
- this bug. The fix involved the following changes:
- + SwigType_clientdata_collect does not need to check
- types in r_resolved because we only want to propagate clientdata
- to typedefed classes, and r_mangled already takes care of typedefs.
- + SWIG_TypeRegister now copies the clientdata field correctly
- + Move SWIG_Guile_PropagateClientData function from guile module
- into common.swg, because we need to call it from both guile and tcl.
- + Add base_names to swig_class to delay the lookup of bases. SWIG
- now exports the base names and only when the base swig_class is
- needed is SWIG_TypeQuery(name)->clientdata looked up.
- - conversion_ns_template testsuite test was failing because
- the name of the wrapped constructor function was not calculated
- correctly for structs. Fixed.
- 10/06/2004: wsfulton
- Fixes for default arguments used in directors - in virtual
- methods and director constructors.
- 10/06/2004: mmatus
- Fix the __cplusplus macro, and bug 1041170.
- Now it is working as supposed, ie, you can safely use
- #ifdef __cplusplus
- ...
-
- all over swig, including inside %defines and %{ %} bodies.
-
- *** POTENTIAL INCOMPATIBILITY ***
- The old trick of using
- #if __cplusplus
- doesn't work any more. So, if you have your own typemaps
- using that syntax, you will need to migrate them to use
- "#ifdef __cplusplus".
- 10/05/2004: wuzzeb (John Lenz)
- - Reorganize how runtime type information is stored and shared
- between modules. For chicken and mzscheme, I removed
- the ability to use runtime libraries, while perl, tcl, python, and
- ruby default to using the new method but can go back to the old
- method by declaring SWIG_ALLOW_RUNTIME.
- - line 582 in mzscheme.cxx was generating a segfault on
- imports.multicpptest, so I fixed it.
- 10/05/2004: wsfulton
- Fixes for %extend and overloaded static methods with default
- arguments.
- 10/05/2004: mmatus
- - [python] Fix director + method with 'empty' throw, ie
- struct A {
- virtual int foo() throw();
- };
-
- other languages should also easy to fix, look for
- Getattr(n,"throw") in python.cxx.
- - Fix director + destructor with 'empty' throw
- struct A {
- virtual ~A() throw();
- };
- - Now SWIG_FEATURES parse all and the same options you
- can pass to swig in the command line.
-
- - New command line flag: -features <list>, as in
- swig -features autodoc=3,director
- ie, any global feature can be initialized from the
- command line. This is mainly for testing, but users
- can also take advantage of it.
- 10/04/2004: mmatus
- - Properly qualify type in syntax as 'long(2)' or 'Foo()',
- this solve old problem with default args, and probably
- other problems around. However, the default arg problem
- was also already solved by William (see below).
- - Fix feature_set and feature_get methods. Before
- they look from particular to general and keep the first
- feature found. This didn't work well with templates.
- Now the methods look from general to particular, and
- override any found feature.
- - Previously a feature could not be applied to constructors
- or destructors that weren't explicitly declared in the class.
- This is now fixed, for example:
- %feature("featurename") Foo() "..."
- %feature("featurename") ~Foo() "..."
- class Foo {
- // implicit Foo() and ~Foo()
- };
- - Fix missing features for default const/dest, by really
- 'creating' the methods and applying the features.
- - Fix return_const_value.i case by adding SwigValueWrapper<const T>
- specialization.
- - Fix %extend + overload, including overloading actual
- class methods.
- - Adding more cases in related files in the test-suite.
- 10/04/2004: wsfulton
- Changes to the way default arguments are wrapped. Previously a single
- method was generated for each method that had default arguments. If
- a method had 5 arguments, say, of which 1 had a default argument
- then the call to the wrapped method would pass 5 arguments. The default
- value was copied into the wrapper method and used if the scripting
- language passed just 4 arguments. However, this was flawed as the
- default argument sometimes does not have global access, for example
- SWIG would generate code that couldn't compile when wrapping:
- class Tricky {
- public:
- void foo(int val = privatevalue);
- void bar(int val = Tricky::getDefault());
- private:
- static int getDefault();
- enum { privatevalue = 200 };
- };
- Also bugs in resolving symbols generated code that wouldn't compile, for example
- (probably fixable though):
- namespace Space {
- class Klass {
- };
- Klass constructorcall(const Klass& k = Klass());
- }
- The approach also does not work for statically typed languages (C# and Java)
- as these languages do not allow methods to have variable number of arguments.
- Although C# has a mechanism to pass a variable number of arguments they
- must be of the same type and are more like varargs.
- The new approach solves the above problems and wraps methods with default
- arguments as if the method was overloaded. So SWIG will now treat
- void foo(int val=0);
- as if it had parsed:
- void foo(int);
- void foo();
- The code generated is then exactly the same as if SWIG had parsed the two
- overloaded methods. The scripting languages count the arguments passed and call
- the appropriate method, just like overloaded methods. C# and Java are now able
- to properly wrap methods with default arguments by generating extra methods,
- again as if the method was overloaded, so for:
- void bar(string s="hello", double d=10.0, int i=0);
- the following proxy methods are generated:
- void bar(string s, double d, int i);
- void bar(string s, double d);
- void bar(string s);
- void bar();
- The new approach comes with a couple of minor knock on effects.
- 1) SWIG support for default arguments for C (not C++) code no longer works.
- Previously you could have this interface:
- %{
- void foo(int val);
- %}
- void foo(int val=0);
- and call the wrapped method from a scripting language and pass no arguments
- whereupon the default of 0 was used. You can get the same behaviour for C
- code by using the "default" typemap:
- %typemap(default) int val "$1 = 0;"
- %{
- void foo(int val);
- %}
- void foo(int val);
- or you could of course compile your code as C++ if you want C++ features :) :
- %{
- void foo(int val=0);
- %}
- void foo(int val=0);
- A couple of SWIG's libraries used this C extension and these have been modified
- to use the "default" typemap. The "default" typemap is thus unchanged (and still
- is not and is not fully supported by C# and Java, and is likely to remain so).
- 2) All features (%feature, %rename, %ignore etc) no longer work as if the method
- with default arguments is just one method. For example, previously
- %ignore foo(int);
- would have ignored the method completely. Now it will only ignore foo(int) but
- not the extra foo() method. Instead use:
- %ignore foo;
- to ignore them all. or
- %ignore foo(int);
- %ignore foo();
- This of course allows one to fine tune the wrapping, for example one could use:
- %rename(fooint) foo(int);
- %rename(foodefaults) foo();
- void foo(int val=0);
- and call them from any language like so:
- fooint(200)
- foodefaults()
- or for example ignore the extra overloaded method, so the defaults cannot be used:
- %ignore foo();
- void foo(int val=0);
- *** POTENTIAL INCOMPATIBILITY ***
- 10/2/2004: mmatus
- [Python]
- - More cleaning up and uniformation on the Python Lib
- - Added Robin's docstring patch, plus some fixes, plus
- some extensions, see autodoc.i example in the test-suite,
- and try using %feature("autodoc","extended").
-
- This patch is not a complete solution for the
- documentation problem, just enough to inform python about
- the parameter list.
- The expected swig documentation support is far far away yet.
-
- 10/1/2004: mmatus
- - Fix the %callback feature (only used in ruby and python examples,
- by now, but it should be generic), now member callbacks
- are working again
-
- - Fix wrapping of functions pointers like
- std::ostream& std::endl(std::ostream&);
- ie, the ones that return references or enums.
-
- [Python] Add the %pythoncallback directive, which is
- an improved version of %callback, ie,
- %pythoncallback(1) foo;
- %pythoncallback(1) A::bar;
- %pythoncallback(1) A::barm;
- int foo(int a) {
- return a;
- }
-
- struct A
- {
- static int bar(int a);
- int barm(int a);
- };
- int foobar(int a, int (*pf)(int a));
- in python you can use
- foo(2)
- foobar(2,foo)
- A.bar(2)
- foobar(2,A.bar)
-
- ie, no additional pointer elements are created, and
- the original 'foo' and 'A.bar' can be used as parameters.
- In the case of member function however, still you need
- to use the special variable Class::<fnc_name>_cb_ptr, ie:
- foobarm(3, a, A.barm_cb_ptr)
-
- we will try to fix this situation also, but later.
- [Python] Add more elements from the STL library, now
- you can use
- import std
- std.cout << "hello " << 123 << std.endl
- [Python] Fix in/out return mechanism, now swig will behave
- as 1.3.21 but using a python list when needed. The problem
- is that the types std::pair,std::vector,etc, use tuples,
- and they interfer with the previous inout tuple type.
- By using lists we solve the conflicts, swig acts as before,
- but returns a list when more than one parameter are using
- the OUT typemap. See the new inout.i example in the
- test-suite.
- *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
-
- [Python] Much better error messages for bad arguments, now
- you always get the argument number where the error occurred.
- 09/27/2004: wsfulton
- Patch from Bill Clarke -
- 1) Warning emitted when -importall and -includeall is used together,
- with -includeall taking precedence.
- 2) Ensure SWIGIMPORTED is always defined when a file is being
- imported with %import. Note that this is not the same as SWIGIMPORT,
- which gets defined in all generated wrapper files.
- 09/26/2004: mmatus
- - add %feature("exceptionclass") to identify a class used
- as exception. Before swig identified and marked a class
- using the "cplus:exceptionclass" attribute. However, the
- class needed to appear on an throw() statement. Now
- swig keeps trying to identify the exception classes, as
- before, but it also allows the user to mark a class by
- using the %feature explicitly. (mostly relevant for
- python and chicken)
- [Python]
- - fix -modern option + exceptions, which mix old class
- style with the new one. So, we always need to emit
- the "nonmodern" python code.
- - add the "python:nondynamic" feature and its handler
- now if you have
-
- %pythonnondynamic A;
-
- struct A {
- int a;
- int b;
- };
- then, in the python side
-
- aa = A()
-
- aa.a = 1 # ok
- aa.b = 2 # ok
- aa.c = 3 # error, the class can not be extended dynamically.
-
- Since this is a feature, you can use
- %pythonnondynamic;
- or
- %pythondynamic; [ Note: %pythondynamic since deprecated ]
-
- to force all the wrapped classes to be "nondynamic" ones.
- The default, as in regular python, is that all the wrapped
- classes are dynamics. So, careful with your spelling.
- 09/14/2004: mmatus
- - Support the -I- option.
- - Differentiate between %include <file> and %include "file".
- This fix several corner cases.
-
- [Python] Several patches:
- - Normalize the Lib file names:
- *.swg internal files,
- *.i user files.
- - Fix Char[ANY] typemaps, so they also delete any extra '\0' chars,
- now they behave as before (1.3.21). Still, you can use
- the SWIG_PRESERVE_CARRAY_SIZE macro if you need to
- preserve the original size (see pystrbase.swg).
- - Add the Char FIXSIZE[ANY] typemaps, to preserve the
- original C array sizes (see above). Though, you can't
- use them yet since %apply and arrays are not working
- together.
- - Add pyfragments.swg, now the user can add fragments
- to override the default ones.
- 09/10/2004: wsfulton
- Patch from Bill Clarke which fixes spurious preprocessor bug which
- shows on Solaris and gcc, eg:
- Warning(202): Could not evaluate '!defined(SWIGJAVA) &&
- !(defined(SWIGCSHARP)'
- Also fixes a bug where '#if "a" == "b" == 1' wouldn't have worked
- 09/10/2004: wsfulton
- Restored multiple build directories for the test-suite. Patch from
- Bill Clarke.
- 09/06/2004: wsfulton
- Added the missing runtime.dsp Visual Studio project files for the
- import examples to work.
- Version 1.3.22 (September 4, 2004)
- ==================================
- 09/03/2004: wsfulton
- The swig.m4 macro for use with the Autoconf/Automake/Libtool has
- been removed and is no longer installed. Please use the new and better
- maintained version derived from swig.m4 in the Autoconf macro archive.
- See http://www.gnu.org/software/ac-archive/htmldoc/ac_pkg_swig.html and
- http://www.gnu.org/software/ac-archive/htmldoc/ac_python_devel.html.
- 09/01/2004: wsfulton
- [Perl] Applied patch #1019669 from Christoph Flamm. Adds support
- for %feature("shadow") in the same way as it works in Python. This
- enables one to override the generated shadow/proxy methods, including
- constructors and destructors. For example:
- /* Let's make the constructor of the class Square more verbose */
- %feature("shadow") Square(double w)
- %{
- sub new {
- my $pkg = shift;
- my $self = examplec::new_Square(@_);
- print STDERR "Constructed an @{[ref($self)]}\n";
- bless $self, $pkg if defined($self);
- }
- %}
- class Square {
- public:
- Square(double w);
- ...
- };
- 08/31/2004: mmatus
- [Python] Incompatibility reported by Bill Clarke (llib@computer.org):
-
- If you are using Sun Studio 8 (and possibly earlier
- versions) to compile the output produced by swig
- 1.3.22rc1, and you are using C++ and STL templates then
- you need to use either "-runtime" or "-noruntime". If you
- use neither of these options then you will probably get
- compiler errors when trying to compile the wrapper file;
- the error message will be like this: The name
- SWIG_Python_ConvertPtr[...] is unusable in static
- swigpy::traits_asptr[...] If you get this error message,
- you need to regenerate your wrapper file using 'swig
- -runtime' or 'swig -noruntime'.
- You shouldn't get this problem with Sun Studio 9.
- *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
-
- 08/26/2004: wsfulton
- [Perl] Applied #932333 from Ikegami Tsutomu. Fixes long long *OUTPUT
- and unsigned long long *OUTPUT typemaps in typemaps.i.
- 08/26/2004: wsfulton
- Applied patch #857344 from Art Yerkes. Workaround for autoconf bug when
- running 'make install'.
- 08/26/2004: wsfulton
- [Perl] Part of patch #982753 applied. This implements a %perlcode directive.
- It allows one to add Perl code to the generated .pm file. Works the same
- as %pythoncode.
- 08/26/2004: wsfulton
- [Java] Fix for directors when wrapping virtual methods with exception
- specifications that were not simple types. Previously code was generated that
- didn't compile, for example when the exception specification was a pointer.
- 08/25/2004: wsfulton
- [C#] Typemap fix for methods that return char *. The CLR would incorrectly
- delete the memory pointed to by char *. Also applied the same correction to
- the char array typemaps.
- 08/24/2004: wsfulton
- Fixes for -fmicrosoft error/warning message display:
- - End of file (EOF) warning messages not displaying in correct format
- - Some messages containing a file path were displaying a double backslash
- instead of a single backslash
- 08/23/2004: wsfulton
- Applied patch #1011604 submitted by Charles Schwieters. Fix for 64 bit tcl
- interpreters.
- 08/23/2004: wsfulton
- Fix for bug #875583 - enum forward declarations previously gave a syntax error.
- 08/23/2004: mkoeppe
- [Allegro CL] Use typemaps "ffitype" and "lisptype" to determine the FFI type
- specifiers from the C type. This makes it possible, for instance, to control
- whether a C "char" argument takes a Lisp character or a Lisp integer value.
- The default (taking Lisp characters) is done by these built-in typemaps:
- %typemap(ffitype) char ":char"
- %typemap(lisptype) char "character"
- If char means an integer instead, use these typemaps:
- %typemap(ffitype) char ":char"
- %typemap(lisptype) char "integer"
- 08/22/2004: wsfulton
- As discussed in bug #772453, the SWIG library directory is now installed
- into a different default directory. The library used to be installed to
- /usr/local/lib/swig1.3. It is now in the more usual architecture independent
- directory and I have additionally used a version specific subdirectory as
- the library will rarely work with older versions of SWIG. This release
- will thus use /usr/local/share/swig/1.3.22 by default, which can be
- tailored as before using './configure --swiglibdir'.
- 08/17/2004: mkoeppe
- [MzScheme] Add support to create native MzScheme structures from C structures.
- To convert a C structure to an MzScheme structure, use the new runtime macro
- SWIG_NewStructFromPtr in a typemap. Patch from Dmitriy Zavin.
- 08/12/2004: wsfulton
- Patch #837715 from Ben Reser to correctly detect Python lib directory
- on 64 bit systems.
- 08/12/2004: wsfulton
- [C# and Java] Prevent memory leaks in the case of early return
- from wrapper methods using const std::string & parameters. Modified
- Mark Traudt patch #951565.
- 08/12/2004: wsfulton
- Bug #943783 with patch fixes php char * out typemap NULL values.
- 08/03/2004: Ahmon Dancy <dancy@dancy>
- [allegrocl] Additional case mode fixes. Also, make sure
- foreign types are exported.
- 07/24/2004: mkoeppe
- [Guile] In -scm mode, SWIG modules now exchange their pointer type
- information via the Guile interpreter. It is no longer necessary to build a
- runtime library or to use -noruntime and -runtime etc.
-
- The module (Swig swigrun) which was introduced in the change of 05/17/2004 is
- no longer automatically built. If you need it, run SWIG on the interface file
- swigrun.i.
- 07/23/2004: wsfulton
- [C#] Bug #917601 Mapping C++ bool fix from Mark Traudt
- 07/23/2004: wsfulton
- RPM fixes for latest CVS version including removal of runtime
- library.
- 07/23/2004: wsfulton
- Patch #908955 from Robert H De Vries.
- RPM file generation fix for Fedore Core 1 and Redhat AS2.1.
- 07/12/2004: wsfulton
- Patch #864689 from Robin Dunn:
- This patch corrects two problems in the XML output of SWIG:
-
- 1. There were often extra '/>\n' in the output.
-
- 2. value attributes were output with '\n' in them but
- since that is not technically legal most (all?) XML
- parsers will strip them out. Replacing the '\n' with
- the ' ' entity reference solves this as that is
- legal and XML parsers will convert it to a '\n' when
- reading the values back in.
-
- This patch also adds a new global command line option
- that will allow the parse tree to be written out in XML
- *after* some other language module has been run, in
- order to be able to get extra info that the language
- module puts in the tree. In this way the XML is a
- post-processed version of the tree rather than a
- pre-processed version.
-
- Command line option is -dump_xml or -xmlout <file>
- 07/12/2004: wsfulton
- [Java] Patch from Scott Michel to fix typesafe enums and proper enums
- with directors.
- 07/12/2004: wsfulton
- HTML documentation (makechap.py) file generator missing end of line
- patch #908951 from Robert de Vries.
- 07/08/2004: wsfulton
- The deprecated runtime library build has been removed. This also removes
- the dependency on Libtool. Libtool is no longer required to build SWIG.
- The associated -ldflags SWIG commandline option has also been removed.
- The examples and test-suite testcases that used the runtime library have
- been updated to use the replacement approach to using SWIG across
- multiple modules, that is they use the -noruntime and -runtime commandline
- options, see Modules.html. Effectively they build their own runtime
- libraries using -runtime. The examples are import and import_template.
- The test cases are in the imports and template_typedef_import directories.
- Anyone who wants the original runtime libraries can either run the test-suite
- or build the examples and use the appropriate shared object/DLL that is
- generated with the -runtime commandline option. For example libimports_runtime.so
- (Python calls it lib_imports_runtime.so) is generated after running the
- 'make imports.multicpptest' testcase in the Examples/test-suite/<lang>
- directory. Or use libruntime.so / runtime.dll after building the import
- examples in Examples/<lang>/import.
- 07/07/2004: mkoeppe
- [Allegro CL] Convert character and string literals in constants to
- CL syntax. Fix FF:DEF-FOREIGN-CALL for mixed-case C functions.
- 06/27/2004: wsfulton
- [Java] New feature for Java exceptions with format %javaexception(exceptionclasses).
- This feature is a slight enhancement to %exception and the only difference is the
- addition of the exception classes which are generated into a throws clause.
- The 'exceptionclasses' is a comma separated list of classes which will be
- added to the associated proxy method's throws clause. The 'exceptionclasses'
- are specified like the exception classes in the 'throws' attribute in the
- typemaps. This feature should be used for correctly handling checked exceptions
- thrown from JNI code. For example:
- %javaexception("java.lang.Exception") throwException %{
- ... convert a std::logic_error into a java.lang.Exception using JNI code ...
- %}
- #include <stdexcept>
- void throwException() {
- throw std::logic_error("Logic error!");
- }
- will generate a method with a throws clause in the module class:
- public static void throwException() throws java.lang.Exception { ... }
- 06/27/2004: wsfulton
- [C#] New %csconstvalue(value) feature directive for use with constants and
- enums. This works the same way as %javaconstvalue. For C#, this directive
- is the only way that one can fix wrapping of C/C++ enums with proper C#
- enums if the enum item's initialiser cannot compile as C# code. This is
- because Java enums can use a call into C code to initialise the enum item,
- whereas in C#, the enum value must be a compile time constant. That is,
- using %csconst(0) cannot be used in C# to initialise the C# enum item via
- a PINVOKE call.
- 06/27/2004: wsfulton
- [Java] New %javaconstvalue(value) feature directive for use with constants and
- enums. Sometimes the use of %javaconst(1) will produce code that won't compile
- under Java. If a compile time constant is required, %javaconst(0) is not an
- option. The %javaconstvalue directive achieves this goal and the value specified
- is generated as Java code to initialise the constant. For example:
- %javaconst(1);
- %javaconstvalue(1000) BIG;
- %javaconstvalue("new java.math.BigInteger(\"2000\")") LARGE;
- %javaconstvalue(10) bar;
- %{
- const int bar = 10;
- %}
- %inline %{
- #define BIG 1000LL
- #define LARGE 2000ULL
- enum Foo { BAR = ::bar };
- %}
- Generates:
- public interface exampleConstants {
- public final static long BIG = 1000;
- public final static java.math.BigInteger LARGE = new java.math.BigInteger("2000");
- }
- public final class Foo {
- public final static Foo BAR = new Foo("BAR", 10);
- ...
- }
- Previously, none of BIG, LARGE or BAR would have produced compilable code
- when using %javaconst(1).
- 06/27/2004: wsfulton
- %feature enhancements. Features can now take an unlimited number of attributes
- in addition to the feature name and feature value. The attributes are optional
- and are much the same as the typemap attributes. For example, the following
- specifies two optional attributes, attrib1 and attrib2:
- %feature(featurename, attrib1="attribval1", attrib2="attribval2") name "val";
- %feature(featurename, val, attrib1="attribval1", attrib2="attribval2") name;
- 06/27/2004: wsfulton
- %feature improvements for the syntax that takes the feature value within the
- %feature() brackets. The value specified is no longer restricted to being just
- a string. It can be a string or a number. For example, this is now acceptable
- syntax:
- %feature("featurename",20.0);
- whereas previously it would have to have been:
- %feature("featurename","20.0");
- Useful for features that are implemented as a macro, for example:
- #define %somefeature(value) %feature("somefeature",value)
- These will now work accepting either a string or a number:
- %somefeature("Fred");
- %somefeature(4);
- 06/06/2004: wuzzeb (John Lenz)
- [Chicken, Guile]
- - Created the Examples/test-suite/schemerunme directory, which holds all the
- runme scripts for guile and chicken (and possibly mzscheme...). The guile
- and chicken _runme files then (load "../schemerunme/foo.scm").
- - In chicken module, fix a few bugs invlolving dynamic casts.
- 06/03/2004: wsfulton
- Patch to fix wrapping of templated methods. ISO compliant compilers, like
- Comeau and GCC-3.4.0, don't like the template specifier that SWIG was generating
- when calling the method. This fix may break some non standard compliant compilers,
- for example, Sun workshop compilers prior to version 6.2.p2. Patch submitted
- by Bill Clarke.
- 06/03/2004: wsfulton
- [Java, C#] Undocumented special variable $imclassname removed.
- New special variable $module is replaced by the module name, as specified
- by %module or -module commandline option. $imclassname can be created from $module.
- 06/03/2004: wsfulton
- [C#] Same as for Java below. The new typemaps are named differently, namely,
- csbody and csbody_derived. The deprecated typemaps are csgetcptr and
- csptrconstructormodifiers.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 06/03/2004: wsfulton
- [Java] Typemap changes for the Java proxy / typewrapper and enum classes. A new
- typemap called javabody contains the essential support code for generation into the body
- of these classes. There is also a new javabody_derived typemap which is used instead for
- wrapped classes that have a wrapped base class. The code is basically, the getCPtr()
- method and swigCPtr and swigCMemOwn member variables. These used to be hard coded
- with no way to modify the code. The introduction of this typemap makes it possible for
- the user to tailor nearly every aspect of the code generation.
- The exception now is the code for director classes.
- The javagetcptr and javaptrconstructormodifiers typemaps are deprecated and are
- no longer used as the code that these generated can be put in the more flexible
- javabody and javabody_derived typemaps.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- The following macros contributed by Scott Michel may help you upgrade if you have used
- the javagetcptr typemap:
- /* Utility macro for manipulating the Java body code method attributes */
- %define SWIGJAVA_ATTRIBS(TYPENAME, CTOR_ATTRIB, GETCPTR_ATTRIB)
- %typemap(javabody) TYPENAME %{
- private long swigCPtr;
- protected boolean swigCMemOwn;
- CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) {
- swigCMemOwn = cMemoryOwn;
- swigCPtr = cPtr;
- }
- GETCPTR_ATTRIB static long getCPtr($javaclassname obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
- %}
- %typemap(javabody_derived) TYPENAME %{
- private long swigCPtr;
- CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) {
- super($moduleJNI.SWIG$javaclassnameUpcast(cPtr), cMemoryOwn);
- swigCPtr = cPtr;
- }
- GETCPTR_ATTRIB static long getCPtr($javaclassname obj) {
- return (obj == null) ? 0 : obj.swigCPtr;
- }
- %}
- %enddef
- /* The default is protected getCPtr, protected constructor */
- SWIGJAVA_ATTRIBS(SWIGTYPE, protected, protected)
- /* Public getCPtr method, protected constructor */
- %define PUBLIC_GETCPTR(TYPENAME)
- SWIGJAVA_ATTRIBS(TYPENAME, protected, public)
- %enddef
- /* Public getCPtr method, public constructor */
- %define PUBLIC_BODYMETHODS(TYPENAME)
- SWIGJAVA_ATTRIBS(TYPENAME, public, public)
- %enddef
- 06/03/2004: wsfulton
- [Java, C#] The contents of the class modifier typemaps and pragmas have changed.
- They must now include the class type. Previously 'class' was hard coded.
- This change enables flexibility into what type of class is generated,
- for example the proxy class could be an interface instead of a class.
- For Java this affects the javaclassmodifiers typemap and the jniclassclassmodifiers
- and moduleclassmodifiers pragmas.
- For C# this affects the csclassmodifiers typemap and the imclassclassmodifiers
- and moduleclassmodifiers pragmas.
- Unless you have overridden the default versions of these typemaps or pragmas, you
- shouldn't be affected. However, if you have, upgrading is easy, for example
- class Foo {};
- %typemap(javaclassmodifiers) Foo "public final"
- must now be:
- class Foo {};
- %typemap(javaclassmodifiers) Foo "public final class"
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 05/31/2004: wsfulton
- Fix for C++ exception specifications that are references. Problem reported by
- Oren Miller. Also improves the generated exception declarations in the
- catch handler for pointers - a pointer is used instead of a reference to
- a pointer. Added default throws typemaps for SWIGTYPE &, SWIGTYPE * and
- SWIGTYPE[ANY] (Java and C#).
- 05/31/2004: wsfulton
- [Java, C#] Some minor typesafe enum improvements, including storing the name of
- the enum item. The toSring() / ToString() methods are overridden to return this name.
- 05/30/2004: wuzzeb (John Lenz)
- [Chicken]
- - Update how examples and the test suite are built.
- - Symbol names are no longer converted to lower case
- - Added union_runme.ss, which was copied and modified from the guile module
- 05/26/2004: lballabio (Luigi Ballabio)
- Committed on behalf of Marcelo (who still has problems with
- the SourceForge CVS.)
- Added Python typemaps for FILE* with (Python-only) test.
- 5/24/2004: dancy
- * Allegro CL module: Now using some macros (defined in
- Lib/allegrocl/allegrocl.swg), swig-defconstant and swig-defun, for
- defining constants and foreign functions. This makes the
- generated file a bit neater.
- Now strips a layer of parenthesis from constants.
- Uses (* :void) instead of :foreign-address now.
- 05/20/2004: wsfulton
- Unnamed enum global variables are now supported in addition
- to the recently added support for unnamed enum member variables.
- For example:
- struct Foo {
- enum { enum1, enum2 } MemberInstance;
- };
- enum { enum3, enum4 } GlobalInstance;
- The int typemaps are used for wrapping the get/set accessor methods.
- If the sizeof an enum is not the same size as an int then setting the
- variable will silently do nothing as the casts cannot be easily and portably
- generated. If you need to solve this highly obscure situation, write
- the assignment using the %exception feature.
- 05/20/2004: wsfulton
- [C#] C# enum wrapping mods. Similar to the Java module, enums can be wrapped using
- one of 3 approaches:
- 1) Proper C# enums - use %include "enums.swg"
- 2) Typesafe enums - use %include "enumtypesafe.swg"
- 3) Simple constant integers (original approach) - use %include "enumsimple.swg"
- See each of these files for further details. Each of these files use typemaps
- and a new feature to control the generated code. The feature is:
- %csenum(wrapapproach);
- where wrapapproach should be one of: "proper", "typesafe", "typeunsafe" or "simple".
- [No implementation deemed necessary for type unsafe enums].
- The default approach is proper C# enums. Anonymous enums are always wrapped by
- constant integers.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 05/20/2004: wsfulton
- [Java] Java enum support added. There are now 4 ways in which enums can be wrapped:
- 1) Proper Java enums - use %include "enums.swg"
- 2) Typesafe enums - use %include "enumtypesafe.swg"
- 3) Type unsafe enums (constant integers) - use %include "enumtypeunsafe.swg"
- 4) Simple constant integers (original approach) - use %include "enumsimple.swg"
- See each of these files for further details. Each of these files use typemaps
- and a new feature to control the generated code. The feature is:
- %javaenum(wrapapproach);
- where wrapapproach should be one of: "proper", "typesafe", "typeunsafe" or "simple".
- The default typemaps will handle enums that may or may not have specified initial
- values, for example ten is specified:
- enum Numbers { zero, ten(10) };
- However, the amount of generated Java code can be cut down, by modifying these typemaps
- if none of the enums have initial values (proper Java enums and typesafe enums approach).
-
- The default approach is typesafe enums. Anonymous enums are always wrapped by
- constant integers.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 05/11/2004: wsfulton
- [Java, C#] Fix bug using %rename on enum items and when using
- %javaconst(1) / %csconst(1)
- For example, the following used to generate code that wouldn't compile:
- %rename(Obj) Object;
- enum Grammar { Subject, Object };
- 04/28/2004: wsfulton
- [Java, C#] Minor fixes when using combinations of the
- javainterfaces, javabase, csinterfaces and csbase typemaps.
- 05/18/2004: wsfulton
- [Java] JVM link failure on some systems fixed when using std_vector.i.
- Also adds default vector constructor for use from Java.
- 05/17/2004: mkoeppe (Matthias Koeppe)
- [Guile] New runtime functions SWIG_PointerAddress,
- SWIG_PointerType, SWIG_IsPointerOfType, SWIG_IsPointer.
- [Guile] In -scm mode, wrap several SWIG runtime functions
- and export them into the module (Swig swigrun). The
- runtime module is now built with "module" linkage.
- [Guile] GOOPS proxy objects now also print the pointer
- address of the C object.
- 05/14/2004: lyle
- Added Kou's patch for the Ruby %import directive so that modules
- with "nested" names are handled properly. Consider an interface
- file foo.i that has this %module declaration at its top:
- %module "misc::text::foo"
- Now consider another interface file spam.i that imports foo.i:
- %import foo.i
-
- Before this patch, this would result in the following code being
- generated for spam_wrap.c:
- rb_require("misc::text::foo");
- With this patch, however, you'll get the correct path name
- for the call to rb_require(), e.g.
- rb_require("misc/text/foo");
- See SourceForge Bug #928299.
- 05/12/2004: wsfulton
- Patch for emitting directors when %feature("director") specified
- for a class with no virtual methods, but does have a virtual destructor.
- Submitted by Kevin Smith.
- 05/06/2004: mkoeppe (Matthias Koeppe)
- New SWIG runtime function SWIG_TypePrettyName, which
- returns an unmangled type name for a swig_type_info
- object.
- [Guile]: Use it for printing pointer objects.
- 05/03/2004: dancy (Ahmon Dancy)
- * Lib/allegrocl/allegrocl.swg: Updated comments about identifer
- conversion.
- * Sources/Modules/allegrocl.cxx: Register /dev/null for "header"
- target. Also, disregard "const" qualifiers during type
- conversion.
-
- 05/02/2004: wuzzeb (John Lenz)
- [Chicken] Fix bug 782468.
- To fix this bug, the runtime code has been rewritten, and
- pointers are now represented as a C_SWIG_POINTER_TYPE.
- Chicken version > 1.40 is now required!
- * Typemap incompatibility: typemaps no longer use chicken_words.
- If a typemap needs some space, it should just call C_alloc
- * argout typemaps no longer use the /* if ONE */ construct to
- build an output list. A SWIG_APPEND_VALUE macro, exactly like
- guile and mzscheme is now used.
- 04/25/2004: mkoeppe (Matthias Koeppe)
- [Guile] In the generated GOOPS code, don't create methods
- that would not specialize any arguments; simply re-export
- the primitive functions. (This is a performance
- optimization which reduces load time and execution time.)
- [Guile] In -gh mode, fix the "too many initializers" error
- which was caused by an incompatible swig_type_info layout.
- [Guile] The typemap for FILE * in ports.i now also accepts
- a regular FILE * pointer object. Also a bug with Scheme
- file ports that are open for input and output has been
- fixed.
- 04/25/2004: wsfulton
- Change entry 03/21/2004 revoked. The change introduced another
- inconsistency (reference typemaps beings used instead of
- pointer typemaps for member variables as well as static
- member variables and global variables for some languages,
- but only for C++ and not C). This would break user's current
- typemaps and introduce further inconsistencies. Alternative
- solution required and being discussed.
- 04/10/2004: mmatus (Marcelo Matus)
-
- Added the -directors flag. This enables the director
- mode for the interface and all the classes that
- don't set the "feature:nodirector" explicitly.
- You can use this in your module if you want to use the
- director feature in all your classes, but it is most
- intended for testing purposes, like:
- make check-python-test-suite SWIG="../../../swig -directors"
- make check-ruby-test-suite SWIG="../../../swig -directors"
- make check-java-test-suite SWIG="../../../../swig -directors"
- These commands will run the entire test-suite using
- directors, and not only the specific 'directors_*'
- cases. This should be done from time to time.
- 04/10/2004: mmatus (Marcelo Matus)
-
- [python] Added support for std::wstring and wchar_t,
- for compiler and python versions that support them.
-
- When needed, use
- %inlcude std_string.i // 'char' strings
- %inlcude std_wstring.i // 'wchar_t' strings
-
- 04/10/2004: mmatus (Marcelo Matus)
-
- [python] Fix the default behaviour (seg. fault) when an
- inplace operator (+=,-=,...) was wrapped, as reported by
- Lucriz (lucriz@sitilandia.it), when the most common
- form was used:
- A& A::operator+=(int i) { ...; return *this; }
- ^^^^ ^^^^^^
-
- ie, an object is returned and its contains the same 'this'
- value than the input object, which is deleted after the
- operation "a += b", leaving the result with no real
- object, but a seg. fault.
- To fix it, we needed to introduce a new feature and use an
- old one:
- %feature("self:disown") A::operator+=;
- %feature("new") A::operator+=;
-
- here, "self:disown" disable the ownership of the 'self'
- or input object, and the "new" feature transfers the
- ownership to the result object.
-
- The feature/solution could also be used in other languages
- that use gc and implement the inplace operators, or other
- operators, in a similar way.
- *** POTENTIAL INCOMPATIBILITY FOR Python MODULE ***
- If you already are using the inplace operators in python,
- and you implemented some kind of workaround to the problem
- fixed here, it is possible you could end with 'free'
- objects that never get deleted. If that is the case, and
- you want to disable the current fix, use:
- %feature("self:disown","") A::operator+=;
- %feature("new","") A::operator+=;
- 04/07/2004: cheetah (William Fulton)
- [C#] C++ enums are no longer wrapped by integers, they are now wrapped by
- C# enums. For Example, given C++:
- enum AnEnum { foo, bar };
- typedef AnEnum AnEnumeration;
- void something(AnEnum e, AnEnumeration f);
- The following is generated:
- public enum AnEnum {
- foo,
- bar
- }
- public static void something(AnEnum e, AnEnum f) {...}
- Note that a global enum like AnEnum above is generated into its own
- file called AnEnum.cs. Enums defined within a C++ class are defined
- within the C# proxy class. Some of the typemaps for modifying C# proxy
- classes also work for enums. For example global enums can use
- %typemap(csimports) to add in extra using statements.
- Global enums and class enums can use
- %typemap(csclassmodifiers) to make the enum private, public etc.
- %typemap(csbase) to change the underlying enum type (enum base)
- If we add this for the above example:
- %typemap(csclassmodifiers) AnEnum "protected"
- %typemap(csbase) AnEnum "long"
- the following is generated:
-
- protected enum AnEnum : long {
- foo,
- bar
- }
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 04/07/2004: cheetah (William Fulton)
- Seg fault fix for empty enums, like
- enum Foo {};
- 03/21/2004: mmatus
- [Note: this change revoked on 04/25/2004]
- [Python] Makes the following 'var' cases more uniform:
- std::string ga;
-
- struct A {
- static std::string sa;
- std::string ma;
- };
- now the three variables (ga, sa, ma) can be assigned as:
- cvar.ga = "hello";
- A.sa = "hello";
- a.ma = "hello";
- ie, now 'ma' will also use a std::string typemap 'in' if
- defined, before it was only accepting a 'p_std_string'
- pointer. Note, however, that 'ma' will not use the
- 'varin/varout' typemaps (that probably could be more
- natural), but it will pick up the 'in' typemap for const
- std::string& (which is easier).
- The changes in cwrap.c and lang.cxx will probably fix the
- behaviour in other languages that do not overload the
- membervarHandler method "too much".
-
-
- 03/21/2004: mmatus
- [Python] Disabling the default instantiations like:
- %template() std::pair<int,int>;
- for all the primitive types and STL containers/classes.
- They are expensive, specially for pair and map, and the
- previous behaviour also requires the user to perform
- manual instantiations. Still, if the speed difference is
- not important, it can be re-enabled by defining the macro
- SWIG_STD_DEFAULT_INSTANTIATION (see std_common.i).
- Also, normalizing the INPUT/OUTPUT/INOUT typemaps. Now
- they use the same conversors than the rest of the
- typemaps, and you can use them for std::pair, std::string
- and all the other STL types, like in:
- void p_inoutd(std::pair<double, double> *INOUT);
- Added the attribute.i and implicit.i files with macros to
- transform functions pairs like 'set_x'/'get_x'
- (or 'T& x()'/'const T& x() const') into an attribute,
- and allowing the use of implicit constructors in typemaps
- (see the files for more details).
- 03/21/2004: mkoeppe
- [Guile] Fix the documentation strings of functions with
- anonymous arguments.
- 03/18/2004: mmatus
- [Python] More general std_string.i interface.
- Now you can wrap it using
- %template(string) std::basic_string<char>;
- and use the std::string as a base class:
- struct A : std::string {
- };
- But more important, swig will recognize
- both std::basic_string<char> and std::string as
- the same type.
- 03/16/2004: mmatus
- Previously added, but not mentioned before:
- - friend declaration support, swig now emits a global
- function in the same class scope.
- - ref/unref features: to mix ref counting C++ classes
- and native script ref counting mechanisms (like in python).
-
- Use it like:
- %feature("ref") RCObj "$this->ref();"
- %feature("unref") RCObj "$this->unref();"
- And the class RCObj, and all the derived ones, will
- perform the right ref/unref calls when a new pointer
- is returned to the target language, or when the target
- language attempts to delete the object.
-
- See the refcount.i file in the test-suite for more
- details.
-
- 03/16/2004: mmatus
- [Python] Using the new %fragment support, major rewrote
- of the python swig library, including:
- - Almost automatic template/typemap instantiation for
- the STL components. For example, now you can write:
- %template(vector_i) std::vector<int>;
- and a specialized vector_i class is emitted with all
- the needed typemaps. No need to use the old
- 'specialize_vector' macros.
- Note you can also define
- %template(matrix_i) std::vector<std::vector<int> >;
- %template(vector_pii) std::vector<std::pair<int,int> >;
- - The empty template instantiation
-
- %template() std::vector<int>;
- defines the vector typemaps, but no proxy class. For all the
- fundamental types, the empty template instantiation are
- defined, so, you can say
- %include std_vector
- int func(const std::vector<int>& a);
-
- where the proper typemap is applied to 'a', but no
- std::vector<int> proxy is generated.
-
- - All the STL containers present a more uniform behavior and
- more complete interface declaration. The following are
- now supported:
- std::vector<T>
- std::list<T>
- std::deque<T>
- std::set<T>
- std::multiset<T>
- std::map<T>
- std::multimap<T>
-
- not a container, but also supported:
- std::pair<T,U>
- also, more typemaps are defined for all of them,
- including varin, varout, typecheck, etc.
- - Initial attempt to implement the STL containers
- considering allocators, ie:
- std::vector<T,A>
- it is partially working, but it is just a workaround
- while swig improves its template type support.
-
-
- Please test with your particular setup. It seems to be
- working with g++ 3.2.2, g++ 2.96, Intel icc and SGI CC
- compilers, plus python 1.5.2, 2.0 and 2.3, but since
- we are using templates, there is a chance you can find
- some problems when using with an old C++ compiler.
- 03/16/2004: mmatus
- - Allowing the empty %template directive, such as
- %template() std::vector<int>;
- to process the class "typedef"s and "typemap"s. Before
- only the internal "typedef"s were processed.
- This makes possible to emit the default in/out
- typemaps without the need of wrapping an specialized
- vector instance.
- - Adding the preprocessor extension #@ which mangles the
- following macro argument, like in:
- #define macro(X) #@X
- macro(int) -> int
- macro(std::string) -> std_s_s_string
-
- - Fragments can now be "type specialized", as the typemaps. The
- syntax is as follows
-
- %fragment("name","header")
- { /* a type independent fragment (old syntax) */ }
- %fragment("name" {Type}, "header")
- { /* the fragment is type dependent */}
-
- Now fragments can also be used inside templates:
- template <class T>
- struct A {
- %fragment("incode"{A<T>},"header") {
- /* 'incode' specialized fragment */
- }
-
- %typemap(in,fragment="incode"{A<T>}) {
- /*
- here we use the 'type specialized'
- fragment "incode"{A<T>}
- */
- }
- };
-
- 03/11/2004: cheetah (William Fulton)
- [Java] Director bug which meant that some virtual functions overridden in
- Java were not being called on some operating systems. Bug reported and fixed
- by Robert de Vries and Scott Michel.
- 03/02/2004: mkoeppe (Matthias Koeppe)
- [Guile] In -scm mode, don't forget to check the type of string arguments.
- 02/24/2004: cheetah (William Fulton)
- [C#] New commandline option -namespace <name>. This allows one to specify
- a C# namespace into which all C# classes are generated.
- 02/23/2004: mkoeppe (Matthias Koeppe)
- [MzScheme] Use FUNC_NAME rather than a bogus typemap variable for signalling
- errors. Call scheme_wrong_type with a zero-based argument number.
- Reported by Ondrej Pacovsky, SF #902621.
- [Guile] Define FUNC_NAME also in the dispatch wrapper for overloaded
- functions. Patch by John Lenz, SF #896255.
- 02/22/2004: mkoeppe (Matthias Koeppe)
- [Guile] In -scm mode, don't try to invoke a null destructor function.
- 02/20/2004: cheetah (William Fulton)
- Fixes so that the SWIG source will compile using the Digital Mars Compiler
- (formerly Symantic compiler) on Windows. Submitted by Scott Michel.
- 02/13/2004: mkoeppe (Matthias Koeppe)
- [MzScheme] New command-line argument -noinit. Use it for building
- the runtime library, where we don't want to define the functions
- scheme_initialize etc. Reported by Tim Brown, SF #891754.
- [MzScheme] Don't produce invalid C code when invoked with the
- -declaremodule option. Reported by Tim Brown, SF #891108.
-
- [Guile] Build the runtime library with passive linkage, to rename
- the SWIG_init function uniquely.
- 02/12/2004: cheetah (William Fulton)
- [Java, C#] Patch submitted by Bill Hoffman which prevents SWIG from crashing
- when a file for the typewrapper class cannot be opened.
- 02/11/2004: cheetah (William Fulton)
- [Java, C#] Overloading changes:
- - Methods which are overloaded in const only no longer generate Java
- code that won't compile - the first method parsed is used and a
- warning is displayed. Note that this behaviour is slightly different
- to the scripting languages which always uses the non-const method.
- - Warning messages 509 and 512 replaced by new warning number 516, which
- is more relevant to these statically typed languages as the overloaded
- methods aren't 'shadowed', they are ignored.
- 01/23/2004: mkoeppe (Matthias Koeppe)
- [Guile] Replace the "known_classes" hash table by a node
- attribute. Methods of classes in C++ namespaces now get
- the proper specializer in the GOOPS declaration.
- Reported by rm@mh-freiburg.de.
- 01/23/2004: mkoeppe (Matthias Koeppe)
- [Guile] Uniquify the argument names in GOOPS shadow method
- declarations. Reported by rm@mh-freiburg.de.
- 01/21/2004: sunshine (Eric Sunshine)
- Revived the NextStep port of SWIG.
- Fixed fatal problem in DohStrstr() caused by difference in strstr()
- implementation which made %apply become entirely dysfunctional. On
- NextStep, strstr("foo","") evaluates to NULL; whereas, on modern
- platforms, it evaluates to "foo". %apply relies extensively upon
- strstr("foo","") evaluating to non-NULL, therefore it failed
- catastrophically when faced with NextStep's strstr().
- Added `bool' check to configure.in since NextStep's C++ compiler
- does not supply this type. swig.h now fakes up `bool' if needed.
- Worked around NextStep C++ compiler bug in which C++ code is
- disallowed inside extern "C" functions. This problem affected all
- language modules, since they publish hook functions of the form:
- extern "C" Language *swig_foo(void) { return new FOO(); }
- Fixed by creating a C++ wrapper:
- static Language *new_swig_foo() { return new FOO(); }
- extern "C" Language *swig_foo(void) { return new_swig_foo(); }
- Ensured that Swig_copy_string() is used in place of strdup() since
- NextStep does not supply strdup().
- Fixed detection of Ruby library name and location in configure.in.
- Problem 1: Assumed that library always resided in Ruby's "archdir",
- which was correct for Ruby 1.6.x, but which is incorrect for Ruby
- 1.8.x, in which case the library normally resides in Ruby's
- "libdir". Problem 2: Assumed that the library could always be
- linked via "-l"+RUBY_INSTALL_NAME (where RUBY_INSTALL_NAME
- typically is "ruby"), however this failed for platforms, such as
- NextStep, which do not support shared libraries. In this case, the
- static library name in 1.8.x is libruby-static.a, thus
- -lruby-static is required. The new logic works correctly for
- static and shared libraries for 1.6.x and 1.8.x.
- Fixed detection of Perl CFLAGS in configure.in for NextStep.
- Detection code extracted CFLAGS from Perl's %Config hash but
- neglected to add a newline to the value before passing it through
- `sed'. NextStep's ancient `sed' discards input which is not
- terminated with a newline, thus Perl CFLAGS always evaluated to the
- empty string.
- 01/16/2004: cheetah (William Fulton)
- Tidy up in the exception handling code that is generated when
- C++ exception specifications are wrapped with the throws typemap.
- This redundant code is no longer generated:
- catch(...) {
- throw;
- }
- 01/12/2004: wsfulton on behalf of mmatus (marcelo matus)
- if a method uses %exception and the method requires the use
- of the throws typemap, the code in a throws typemap will be
- generated inside the try body. For example:
- %exception method {
- try {
- // method action
- $action
- } catch (int i) {
- // method int catch handler
- } catch (...) {
- // method generic catch handler
- }
- }
- %typemap(throws) Except %{
- // throws typemap Except catch handler
- %}
- %inline %{
- class Except {};
- void method(int i) throw (Except);
- Will generate:
- {
- try {
- // method action
- try {
- method(arg1);
- }
- catch(Except &_e) {
- // throws typemap Except catch handler
-
- }
-
- } catch (int i) {
- // method int catch handler
- } catch (...) {
- // method generic catch handler
- }
- }
- As can be seen, the inner try catch block is for the throws typemaps.
- Previously, this was reversed so that the inner try catch block
- was the %exception code. In the example above, it would have been
- impossible to catch Except as the catch all (...) would catch the
- exception instead.
- Version 1.3.21 (January 11, 2004)
- =================================
- 01/10/2004: cheetah (William Fulton)
- The output format for both warnings and errors can be selected for
- integration with your favourite IDE/editor. Editors and IDEs can usually
- parse error messages and if in the appropriate format will easily take you
- directly to the source of the error. The standard format is used by
- default except on Windows where the Microsoft format is used by default.
- These can be overridden using command line options, for example:
- $ swig -python -Fstandard example.i
- example.i:4: Syntax error in input.
- $ swig -python -Fmicrosoft example.i
- example.i(4): Syntax error in input.
- 01/09/2004: beazley
- Fixed [ 871909 ] simple namespace problem.
- This was a problem using anonymous structures in a namespace.
- For example:
- namespace ns {
- typedef struct {
- int n;
- } S;
- };
- Reported by Josh Cherry.
- 01/09/2004: beazley
- Fixed some broken Perl examples.
- 12/28/2003: cheetah (William Fulton)
- [Java and C#] Fixes for wrapping covariant (polymorphic) return types.
- For example:
- struct Base {
- virtual ~Base();
- virtual Base* copy() const = 0;
- };
- struct Derived : Base {
- virtual Derived* copy() const;
- };
- The Derived::copy proxy method returns Base not Derived. A warning is issued
- about this. Previously the pointer used by the proxy class was incorrectly
- treated as a Base* instead of a Derived*.
- 12/18/2003: cheetah (William Fulton)
- Fix so that Windows paths are displayed correctly when reporting errors.
- An error previously would have been shown something like:
- .?xample.i:14: Syntax error in input.
- instead of:
- .\example.i:14: Syntax error in input.
- Version 1.3.20 (December 17, 2003)
- ==================================
- 12/17/2003: beazley
- Last minute modifications. Perl5 module now generates shadow classes
- by default like all of the other modules. PHP4 wrappers no longer
- include "config.h".
- 12/14/2003: beazley
- Weakened warning message related to constructor names so that an
- unusual nested-class wrapping technique would work again (apparently
- it worked in some older SWIG releases). For example:
- class Scope {
- class ClassA;
- class ClassB;
- };
- class Scope::ClassA {
- ...
- };
- class Scope::ClassB {
- ...
- }
- Note: There is still some odd interaction with the SWIG symbol
- table/type system that will need to be looked at in a future release.
- Reported by Gustavo Niemeyer.
- 12/11/2003: cheetah (William Fulton)
- [Java] Protected class methods are wrapped as protected Java methods
- when using the dirprot director feature. This can be changed using
- %javamethodmodifiers to something else should the need arise, for
- example, private or package access.
- 12/11/2003: cheetah (William Fulton)
- [Java, C#]
- %javamethodmodifiers (Java) and %csmethodmodifiers (C#) operate slightly
- differently. Previously this feature had to be present to set the method
- modifiers. Now it is only used if it exists for the method being wrapped.
- The default is "public" as previous however, when wrapping protected
- director methods it is "protected". This change will not affect existing
- use of the %javamethodmodifiers or %csmethodmodifiers.
- 12/11/2003: mmatus (Marcelo Matus)
- This fix some recurring reports about keywords not been
- properly identified and warned, and it solves the problem
- of how to add a test file to the test-suite such that it
- doesn't use any keyword of all the supported languages
- (and doing it without compiling the test for all the
- supported languages, thing that is not always possible,
- and without requiring you to know all the supported
- language keywords, thing that is always impossible).
- So these are the changes globally speaking:
- - Uniform the definition of the keyword warnings through
- the supported languages: all the languages has now a
- separate file that defines the keywords or bad names:
- python/pythonkw.swg
- chicken/chickenkw.swg
- ....
- - Added keyword list for most of the languages that didn't
- have one (using the new separated file).
-
- - Added the "All keywords" warning support: -Wallkw option.
- This option allows you to include all the known keywords
- for all the supported languages, and can be used as:
- swig -Wallkw ....
-
- This will help to the process of adding a test-suite
- file that can be compiled in all the swig supported
- languages, and it will be also helpful for users who
- want to create multi-language libraries.
-
- And these are the detailed changes (mostly file addition):
- - For the languages that already have some sort of keyword
- warning list, move it to an external languagekw.swg
- file, ie:
-
- move keywords from python.swg -> pythonkw.swg
- move keywords from chicken.swg -> chickenkw.swg
- move keywords from tcl8.swg -> tclkw.swg
-
- and re-include languagekw.swg from language.swg.
-
- - For the language that didn't have a keyword list, and
- for the ones that I could find a list, add the
- languagekw.swg file, ie:
- csharp/csharpkw.swg
- java/javakw.swg
- php4/phpkw.swg
- pike/pikekw.swg
- ruby/rubykw.swg
- also add a line in language.swg to include
- languagekw.swg, but now it is commented!!!, like in
- java.swg:
- /* java keywords */
- /* please test and activate */
- //%include "javakw.swg"
- ie, there will be no change in how swig runs normally
- until the language maintainer test and uncomment that
- line.
-
- So, please check each languagekw.swg file (I left the
- link to the keyword list source for checking), and after
- testing, uncomment the %include line.
- - Added the file allkw.swg, which includes all the
- languagekw.swg files.
- For the languages that has no languagekw.swg file right
- now, and if they need one, add the file into the
- language directory, and add the corresponding include
- line into the allkw.swg file.
-
- - Added the -Wallkw that includes the allkw.swg file.
- Note that the old -lallkw.swg option couldn't be used
- since it include the file after it would be needed.
- Hopefully, the -Wallkw option will be added to the default
- rules in the related test-suite Makefiles, so, when
- creating a new test, or adding a new swig library file
- (like _std_deque.i), swig will warn you if you are using a
- bad name, considering all the language where it needs to
- run.
-
- Right now you can test it by using:
- make check-python-test-suite SWIG="swig -Wallkw"
- or using your favorite target language, it doesn't matter.
- And yes, there are several examples that are using
- reserved keywords, specially from csharp.
-
- *** Remember ****: the new keyword warning lists are not
- included by default in any of language that before didn't
- have one. To enable the keyword warnings as the default
- behavior, the inclusion of the languagekw.swg file has to
- be uncommented at each language.swg file.
- So, all the language maintainers, please check the
- keywords list.
- Also, you can add buit-in names, and not only keywords, like
- 'True/False' in python. Remember that you can be more
- specific and refer only to member names, like *::configure
- or *::cget (see an example in the tcl8/tcl8kw.swg file),
- or only global names, like ::range (see an example in the
- python/pythonkw.swg file.
- Just to be consistent, use the following codes:
- - Use code 314 for keyword and/or fatal bad names.
- - Use code 321 for buit-in and/or not fatal bad names.
-
- so, they can't be disabled/enabled independently (see
- python/pyhtonkw.swg for examples).
- **** And don't add any new test file without checking it
- with the -Wallkw option!! (that includes me) *****.
-
- 12/11/2003: cheetah (William Fulton)
- SF bug #854634
- Added support for accepting the Unix directory separator '/' on
- Windows and the Mac in addition to the native one ( '\' on
- Windows). This can be used in %import, %include and commandline
- options taking a path, for example -I. On Cygwin, both the Windows
- and Unix directory separator can now be used (was '/' only).
-
- 12/10/2003: mmatus (Marcelo Matus)
- [python] Implementing the runtime "reprotected" director
- members, if you have:
-
- %feature("director") B;
- class Bar {
- public:
- virtual ~Bar();
- virtual int hello() { return do_hello();)
- protected:
- virtual int do_hi() {return 0;}
- virtual int do_hello() {return 0;}
- };
- then, at the python side
- import my_module
- class Foo(my_module.Bar):
- def do_hello(self):
- return 1
- pass
-
- b = Bar() # Pure C++ Director class
- f = Foo() # C++ Director + python methods
- b.hello() # Ok, and it calls C++ Bar::do_hello()
- f.hello() # Ok, and it calls Python Foo::do_hello()
- b.do_hi() # RuntimeError, do_hi() is protected!!
- f.do_hi() # RuntimeError, do_hi() is protected!!
-
- b.do_hello() # RuntimeError, do_hello() is protected!!
- f.do_hello() # Ok, since it its redefined in python.
- Here Bar.do_hello is always protected, but Foo.do_hello
- is "public", because it is redefined in python. Before,
- all the 'do_hello' methods were public.
- This seems to be a good compromise between C++ and python
- philosophies, ie, all the director protected methods keep
- protected at the user side (C++ way) until they are
- redefined (python way, were all defined methods are always
- public). And this is not only a good compromise, it also
- seems to be the only way to do it :).
- Now ruby has native director protected members, and python
- pure runtime support. I guess these are the two possible
- extreme cases. And hopefully, they could be used as
- templates to modify the other languages that support
- directors, so they can "reprotect" the protected director
- members at the target language side.
- This finished the director protected support for the
- python language. Ocalm will need to add the
- "reprotection" later.
- 12/10/2003: mmatus (Marcelo Matus)
- The following case (reported by Lyle Johnson) was fixed:
- %rename(x) Foo::y();
-
- class Foo {
- public:
- void y();
- protected:
- int x;
- };
- swig warned that the symbol 'x' was already defined, and
- the renaming fails. 'x' was not emitted, since it is
- protected, but it was kept in the symbol table with too
- much information.
- Now swig works for all the cases (plain, director and
- dirprot) again. This was fixed by allowing the parser.y to
- decide much closer what to do with 'x'. Before all the
- discarding or generation was resolved at the lang.cxx
- stage. Also the changes in parser.y to implement the
- director protected mode are now much more encapsulated, and
- they get disabled if the mode is not enabled. Before the
- deactivation was done at the generation stage (lang.cxx).
- By the other hand, if the director mode is enabled, and
- %rename is done, reusing a protected member name, there is
- a pathological case:
- %rename(x) Foo::y();
-
- class Foo : public A {
- public:
- void y();
- protected:
- int x; /* works */
- static int x; /* works */
- static void x(); /* works */
- typedef void x(); /* works */
- virtual void x(); /* always fails, as it should, since
- Foo::x() will be emitted in the
- director */
- void x(); /* always fails, but sometimes it shouldn't,
- since the Foo::x() will not be emitted if
- it is not virtual */
- };
- The last case is not always right because at the parser.py
- stage it is not possible to decide if the protected member
- Foo::x() could or not conflict with the renamed Foo::y(),
- since Foo::x() could be virtual by inheritance.
- I guess this just an intrinsic limitation, and no much can
- be done about it without resorting into larger changes to
- postpone, under certain conditions, the multiply symbol
- detection (lang.cxx stage).
-
- So, by now, it is just considered a well known "feature" in
- the director protected mode. The good news is that it seems
- to be a rare case, and it can be avoided by the user by
- hiding 'x' before renaming 'y':
- %rename(_x) Foo::x();
- %rename(x) Foo::y();
-
- 12/08/2003: mmatus (Marcelo Matus)
- The virtual method detections now properly
- treats the following cases:
- namespace foo { typedef int Int; }
- struct A {};
- typedef A B;
- struct Foo {
- virtual ~Foo() {}
- virtual Foo* cloner() = 0;
- virtual int get_value() = 0;
- virtual A* get_class() = 0;
- virtual void just_do_it() = 0;
- };
- struct Bar : Foo
- {
- Bar* cloner();
- foo::Int get_value();
- B* get_class();
- void just_do_it();
- };
-
- All the Foo and Bar methods are virtual. A new attribute
- "virtual:type" record the base polymorphic type. In the
- previous cases we have:
- type : Bar virtual:type : Foo
- type : foo::Int virtual:type : int
- type : B virtual:type : A
- type : void virtual:type : void
- This attribute is useful in languages (java+directors)
- that could have problems redefining Bar* Bar::cloner().
- If you never had code like the above, you will see no
- effects. But if you have some code like that, you
- will see some effects since some methods that
- before were not properly treated as virtual,
- will start to act like that. This could enlarge
- your director classes.
-
- 12/08/2003: mmatus (Marcelo Matus)
- The director protected member support (dirprot)
- is disabled by default.
-
- It can be enable by using '-dirprot' or by adding
- the option to the module declaration, like:
- %module(directors="1",dirprot="1") my_module
- This module option was added to properly compile the
- director_protected.i and director_nested.i examples.
-
- The feature has been tested with python[2.2,2.3]
- and ruby[1.6.7], both at compilation and runtime, and
- java[j2sdk1.4.1_01], but only at compilation (my java
- installation doesn't run any of the director examples,
- olds nor news).
- Please test for ocaml and java.
-
- The errors reported by William and Scott were fixed,
- except for a warning about SWIG_JavaThrowExecption()
- multiply defined. I can't reproduce this error with my
- examples. We will wait for Scott to send us a minimal
- case.
- 12/07/2003: mmatus (Marcelo Matus)
- The director protected member support has been
- completly moved out from python.cxx, and now
- resides in the common lang.cxx, emit.cxx and
- allocate.cxx files.
- This means it should work for all the other languages
- that currently support directors, ie, python, java, ocalm
- and ruby.
- The change has been tested with python (compilation+runtime)
- and java (just compilation).
-
- Please add runtime tests for the missing languages
- and test it.
- The '-nodirprot' option was moved to the principal main,
- and can be used from all the languages.
- 12/07/2003: cheetah (William Fulton)
- [Java] Fixed and improved error checking of STRING_OUT typemaps in
- various.i.
- 12/04/2003: mmatus (Marcelo Matus)
- - Now the virtual members with no explicit declarator
- are properly identified:
-
- struct A {
- virtual int f() = 0;
- };
- struct B : A {
- int f();
- };
- Here, B::f() is virtual, and the director and the
- virtual elimination mechanism now recognize that.
- - [C#] This fix also fixes the problem where 'override' was not being
- used on any overridden virtual method, so for struct B above,
- this C# code is generated:
- public class B : A {
- ...
- public override int f() {
- ...
- }
- ...
- }
- - Initial support for protected virtual methods. They are now
- properly emitted when using with director (python only by
- now).
-
- %feature("director") A;
- struct A {
- protected:
- virtual int f1() = 0;
- };
- %feature("director") B;
- struct B : A{
- protected:
- int f1();
- virtual f2();
- };
- This can be dissabled by using the '-nodirprot' option.
- - The feature 'nodirector' is working now at the top level,
- so, it must work for all the languages:
- %feature("director") A;
- %feature("nodirector") A::f2;
- struct A {
- virtual int f1();
- virtual int f2();
- };
-
- in this case, only 'f1' is exported to the director class.
-
- - Added director support for const TYPE& arguments (python).
- 12/02/2003: cheetah (William Fulton)
- [Java] Fix for INOUT and OUTPUT typemaps in typemaps.i for when the JNI type
- is bigger than the C type. For example, unsigned long (32bits on most systems)
- is mapped to jlong (64bits). Returned value was incorrect. Bug reported by
- Brian Hawley.
- 12/02/2003: cheetah (William Fulton)
- [C# and Java] Better fix for entry dated 05/11/2003. Fixes the following
- typemaps:
- Java: javabase, javainterfaces, javaimports, javaclassmodifiers,
- javaptrconstructormodifiers, javafinalize, javagetcptr & javacode.
- C#: csbase, csinterfaces, csimports, csclassmodifiers,
- csptrconstructormodifiers, csfinalize, csgetcptr & cscode.
- It also fixes bug in using arrays of C structs with arrays_java.i
- as reported Scott Michel.
- 12/02/2003: beazley
- [Perl] Fixed [ 852119 ] recursive inheritance in output .pm, perl5.
- Reported by William Dowling.
- 12/02/2003: beazley
- [Tcl] Fixed [ 755382 ] calling func(const vector<T>& p) evaluates p[0] in interp.
- The Tcl type checker was improperly handling the interpreter result when
- type violations were supposed to be ignored.
- Reported by Flaviu Popp-Nowak.
- 11/30/2003: cheetah (William Fulton)
- Fixed [ 545058 ] configure's --with-tclincl has no effect
- 11/30/2003: cheetah (William Fulton)
- [Java] Fixed [ 766409 ] missing symbol SWIG_JavaThrowException during module load
- SWIG's internal functions are all static as there is no need for different SWIG
- generated modules to share any code at runtime.
- 11/30/2003: beazley
- [Tcl] Added support for C++ pointers to members.
- 11/28/2003: cheetah (William Fulton)
- Fixed [ 848335 ] Directors: #include wrapper .h file - was incorrectly
- adding a directory to the generated #include "foo_wrap.h" statement
- in some situations.
- 11/28/2003: cheetah (William Fulton)
- [Java] Fixed [ 849064 ] JAVA : Access modifier for derived class wrong.
- The delete() method is always public now. It used to be protected whenever a
- destructor was non public. An UnsupportedOperationException runtime
- exception is thrown instead of making delete() protected now.
- 11/28/2003: beazley
- [Perl5] Added support for C++ pointers to members.
- 11/28/2003: beazley
- Fixed [ 850151 ] PYVERSION with python2.3 in configure of SWIG 1.3.19 (Maybe).
- 11/28/2003: beazley
- Fixed [ 850666 ] #include extra line added.
- This should fix some problems with getting correct line numbers on
- error messages.
- 11/26/2003: beazley
- Fixed another one of Marcelo's evil template bugs (infinite
- recursion). [ 849504 ] template and typedef -> inf. recursion.
- 11/26/2003: beazley
- Fixed parsing problem with declarations like this:
- int *x = &somearray[0];
- 11/25/2003: beazley
- Fixed [ 756552 ] missing default argument class scope with "|".
- This is really only a band-aid fix for use of class-enums in
- expressions. For example:
- class A {
- public:
- enum Flag { flag1 = 0x1, flag2 = 0x2 };
- void foo(int x = flag1 | flag2);
- };
- Note: there are still some (more subtle) cases that are broken,
- but hard to fix due to an issue with template expansion. Will
- address later.
- Reported by Dmitry Mironov.
- 11/25/2003: beazley
- Incorporated [ 840878 ] support for %inline { ... } (PATCH).
- This adds support for the following:
- %inline {
- ... some code ...
- }
- The difference between this and %inline %{ ... %} is that the
- enclosed text is processed by the SWIG preprocessor. This
- allows special macros and other processing to be used in
- conjunction with %inline.
- Contributed by Salvador Fandino Garcia.
- 11/25/2003: beazley
- Fixed [ 836903 ] C++ inconsistency (with void arguments).
- SWIG was having difficulty with f() vs f(void) in C++ programs.
- For instance:
- class A {
- public:
- virtual void f(void) = 0;
- };
- class B {
- public:
- virtual void f(); // Not matched to f(void) correctly
- };
- The parser now normalizes all declarations of the form f(void)
- in C++ classes to f(). This should fix a variety of subtle
- problems with inheritance, optimizations, overloading, etc.
- Problem reported by Partho Bhowmick.
-
- 11/25/2003: beazley
- [Perl5] Incorporated [ 841074 ] better croaking (PATCH). This fixes some problems
- with strings and provides some new error functions.
- Contributed by Salvador Fandino Garcia.
-
- 11/25/2003: beazley
- Fixed [ 791835 ] Default argument with cast: txt = (char *)"txt" syntax Error.
- The parser should now accept things like this:
- void foo(char *s = (char *) "Hello");
- Problem reported by Claudius Schnorr.
- 11/24/2003: beazley
- [Tcl] Fixed problem with cross module linking. Previously modules referred
- to base classes through a global variable. Now, the module looks up base
- classes through the type system itself---avoiding the need to link to a global
- like before. Caveat: modules with base classes must be loaded before
- modules with derived classes.
-
- 11/24/2003: mkoeppe (Matthias Koeppe)
- [Guile] In -scm mode, use () to represent null pointers,
- as it is done in -gh mode.
- 11/23/2003: mkoeppe (Matthias Koeppe)
- Add a generated script "preinst-swig", which can be used
- to invoke SWIG before it has been installed. It arranges
- that the runtime libraries from the source directory are
- used.
- 11/23/2003: mkoeppe (Matthias Koeppe)
- [Guile] In -gh mode, don't forget to call SWIG_Guile_Init.
- Add a SWIG_contract_assert macro.
- 11/23/2003: mkoeppe (Matthias Koeppe)
- [MzScheme] Update the configure check for the dynext object to work
- with MzScheme 205.
- 11/20/2003: mmatus
- Fixed the include/import error reported by Kerim Borchaev,
- where two files with names like
- 'dir1/hello.i'
- 'dir2/hello.i'
-
- can not be include at the same time. Swig was including
- just the first one, assuming the second one was not a
- different one, since it was checking/keeping just the
- basename 'hello.i'.
- 11/19/2003: beazley
- Changes to the SWIG runtime library support.
- - The -c command line option has been renamed to -noruntime
- - New command line option: -runtime. When supplied, this
- inserts the symbol SWIG_GLOBAL into the wrapper code. This,
- in turn, makes all of the runtime support functions globally
- visible.
- - New library file: swigrun.i. Used to create modules
- for runtime library (if needed).
-
- 11/18/2003: cheetah (William Fulton)
- 'make srcrpm' rpmbuild fix - patch from Joe Cooper
- 11/18/2003: mkoeppe (Matthias Koeppe)
- [Guile] Change meaning of configure option --with-guile to
- the name of the Guile executable. The new option --with-guile-prefix
- can be used to specify the tree where Guile is
- installed. (However, usually it suffices to use the
- single option --with-guile-config.)
- When running the run tests test-suite, make sure to use the
- version of Guile that SWIG was configured for.
- 11/17/2003: mkoeppe (Matthias Koeppe)
- [Guile] Improvements to object-ownership management in
- "-scm" mode. (They do not apply to the default "-gh" mode.)
- * Renamed the smob type that indicates that the object can
- be garbage collected from "collected swig" to "collectable
- swig", which is more precise.
- * Export the destructor functions again. It is now
- allowed to explicitly call destructors, even for
- garbage-collected pointer objects. A pointer object
- that has been passed to a destructor is marked in a
- special way using a new smob type, "destroyed swig".
- (This helps avoid nasty memory bugs, where references to
- dead C objects are still held in Scheme. Moreover, the
- garbage collector will not try to free a destroyed
- object once more.)
- * Destructor-like functions can also mark their arguments
- as destroyed by applying the typemap SWIGTYPE *DESTROYED.
- (It calls the function SWIG_Guile_MarkPointerDestroyed.)
- * Functions that "consume" their objects (or that "own"
- them after the call) can mark their arguments as
- not garbage collectable. This can be done by applying
- the typemap SWIGTYPE *CONSUMED. (It calls the function
- SWIG_Guile_MarkPointerNoncollectable.)
- * The macro TYPEMAP_POINTER_INPUT_OUTPUT from library
- pointer-in-out.i creates additional typemaps
- PTRTYPE *INPUT_CONSUMED, PTRTYPE *INPUT_DESTROYED.
- They mark the passed pointer object likewise.
- The typemap PTRTYPE *OUTPUT creates a garbage-collectable
- pointer object, like %newobject does for a returned
- pointer. Use the new typemap PTRTYPE *OUTPUT_NONCOLLECTABLE
- to create a pointer object that will not be garbage collected.
- 11/17/2003: mkoeppe (Matthias Koeppe)
- [Guile] Handle $input in "freearg" typemaps.
- Never qualify GOOPS slot names with the class name.
- Handle optional arguments properly in the GOOPS methods.
- 11/16/2003: cheetah (William Fulton)
- Fixes for installation to work with the upcoming Automake-1.8.
- mkinstalldirs was being used by a non-Automake makefile.
- mkinstalldirs is being phased out and so was not being
- created by Automake. install-sh used instead.
- 11/16/2003: cheetah (William Fulton)
- [Java] Numerous director improvements, tweaks and bug fixes since
- the initial implementation have been contributed by Scott Michel.
- 11/12/2003: beazley
- [Python] When %feature("shadow") is used to add code to shadow
- classes, the special variable $action expands to the name of the
- underlying wrapper function that would have been called normally.
- 11/12/2003: beazley
- [Python] When generating proxy class code, SWIG emits a few
- default methods for __repr__() and other Python special
- methods. Some of these methods are emitted after all of the
- contents of a class. However, this makes it hard to override
- the methods using %pythoncode and some other directives that
- allow code to be inserted into a class. These special methods
- are now emitted into the code *before* all of the other methods.
- Suggested by Eric Jones.
-
- 11/11/2003: beazley
- Preprocessor enhancement. For include statements like this:
- %include "foo/bar.i"
- the directory "foo" is now added to the search path while
- processing the contents of bar.i. Thus, if bar.i includes other
- files in the same directory, they will be found. Previously,
- you would have to add additional directories using -I to make this
- work correctly. Note: the C preprocessor seems to behave in
- an identical manner on many (most? all?) systems.
- Suggested by Kerim Borchaev.
- 11/11/2003: beazley
- Configuration changes to make SWIG work on Mac OS X 10.3.x (Panther).
- Tested with Python, Tcl, Perl, and Ruby---all of which seem to work.
- 11/08/2003: cheetah (William Fulton)
- [Java] Fixed the typemaps in various.i which were mostly broken.
- char **STRING_IN and char **STRING_RET typemaps replaced with
- STRING_ARRAY. float *FLOAT_ARRAY_RETURN typemap removed.
- 11/08/2003: beazley
- [Tcl] Tcl module now emits a safe module initialization function by
- default. It can be removed by running 'swig -nosafe'.
- 11/04/2003: mkoeppe (Matthias Koeppe)
- [Guile] Only use the SCM_ API when the function
- `scm_slot_exists_p' exists (needed for GOOPS support).
- This function was renamed during the Guile 1.5 series
- from `scm_slots_exists_p'.
- Report the right runtime library when invoked with
- -scm -ldflags.
- 11/03/2003: mkoeppe (Matthias Koeppe)
- [Chicken] Fix #782052. The --with-chickencfg configure
- option (and others) were not accepted.
- 11/02/2003: mkoeppe (Matthias Koeppe)
- [Guile] Merge new set of GOOPS changes by John Lenz.
- GOOPS objects are now manipulated directly by the C code.
- Some fixes to typemap-GOOPS interaction.
- 11/02/2003: mkoeppe (Matthias Koeppe)
- [Guile] Remove the file argument to -scmstub and -goops.
- The Scheme files are now always called MODULE.scm or
- MODULE-primitive.scm, where MODULE is the module name and
- "primitive" can be changed by the -primsuffix option.
- The Scheme files are now placed in the directory given by
- the -outdir option, or the current directory.
- (Patch by John Lenz, slightly modified.)
- *** INCOMPATIBILITY [Guile] ***
- 11/02/2003: mkoeppe (Matthias Koeppe)
- Unify the pointer-conversion runtime API. The standard
- functions are:
- * SWIG_NewPointerObj (POINTER, TYPE, FLAGS)
- -- Create an scripting object that represents a typed
- pointer. FLAGS are language specific.
- * SWIG_ConvertPtr (INPUT, RESULT, TYPE, FLAGS)
- -- Get a pointer from the scripting object INPUT and
- store it in the place RESULT. When a type mismatch
- occurs, return nonzero.
- * SWIG_MustGetPtr (INPUT, TYPE, ARGNUM, FLAGS)
- -- Get a pointer from the scripting object INPUT and
- return it. When a type mismatch occurs, throw an
- exception. If ARGNUM > 0, report it as the
- argument number that has the type mismatch.
- [Guile]: No changes.
- [MzScheme]: No changes.
- [Perl]: Add the function SWIG_NewPointerObj.
- The function SWIG_MakePtr is kept.
- The function SWIG_MustGetPtr is currently not
- supported.
- [Python]: Add the function SWIG_MustGetPtr.
- [Ruby]: Add the function SWIG_MustGetPtr.
- [Tcl]: Remove the "interp" argument of
- SWIG_NewInstanceObj, SWIG_ConvertPtr,
- SWIG_ConvertPacked, and SWIG_ConvertPtrFromString.
- The function SWIG_MustGetPtr is currently
- not supported.
- No changes to Pike because its pointer conversion code did
- not look complete. No changes to PHP4, because I did not
- understand its runtime code. No changes to Chicken
- because major changes are expected soon anyway. No
- changes to Java, OCaml, C# because they do not seem to
- have a pointer-conversion runtime API.
- *** INCOMPATIBILITY [Tcl] ***
- 11/02/2003: mkoeppe (Matthias Koeppe)
- [Perl5, PHP4, Pike, Python, Ruby, Tcl]: Use the
- preprocessor to rename external functions of the SWIG
- runtime API to follow the naming convention
- SWIG_<language>_<function>. This should allow linking
- more than one interpreter into a program.
- 10/31/2003: cheetah (William Fulton)
- [C#] Fix since introducing the exception and std::string delegates.
- The fix overcomes linker errors when using more than one SWIG module.
- Problem reported by Andreas Schörk.
- 10/31/2003: beazley
- Incorporated patch: [ 823302 ] Incr Tcl support.
- Contributed by Alexey Dyachenko.
- Note: needs documentation.
- 10/31/2003: beazley
- Incorporated patch: [ 829325 ] new Python Module options and features.
- Robin Dunn writes:
- This patch makes a number of changes to the SWIG python module.
- 1. Add -apply option, and change the default code
- output to use the foo(*args, **kw) calling syntax
- instead of using apply(). If the -apply option is
- given then code is generated as before. This is very
- similar to Patch #737281 but the new -modern option
- makes the second half of that patch unnecessary so it
- is not included here.
-
- 2. Add -new_repr option. This is the same as my Patch
- #797002 which I will mark as closed since it is no
- longer needed. When this new option is used then the
- __repr__ methods that are generated for proxy classes
- will be more informative and give details about the
- python class and the C++ class.
-
- 3. Add %feature("addtofunc"). It allows you to insert
- one or more lines of code inside the shadow method or
- function that is already generated, instead of
- replacing the whole thing like %feature("shadow") does.
- For __init__ it goes at the end, for __del__ it goes
- at the begining and for all others the code generated
- is expanded out to be like
-
- def Bar(*args, **kwargs):
- val = _module.Foo_Bar(*args, **kwargs)
- return val
-
- and the "addtofunc" code is inserted just before the
- return statement. If the feature is not used for a
- particular method or function then the shorter code is
- generated just like before.
-
- 4. A little bit of refactoring to make implementing
- addtofunc a little easier.
-
- 5. Added a -modern command-line flag that will cause
- SWIG to omit the cruft in the proxy modules that allows
- it to work with versions of Python prior to 2.2. The
- result is a simpler, cleaner and faster python proxy
- module, but one that requires Python 2.2 or greater.
- 10/31/2003: beazley
- Incorporated patch: [ 829319 ] XML module tweaks.
- This adds a new command line option -xmllite that
- greatly reduces the amount of emitted XML code by
- eliminating some fields mostly used in SWIG's
- internal processing. Contributed by Robin Dunn.
- 10/31/2003: beazley
- Incorporated patch: [ 829317 ] Adds DohSplitLines function.
- Contributed by Robin Dunn.
- 10/29/2003: beazley
- Fixed [ 827907 ] argout objects not being wrapped properly (PATH).
- Patch contributed by Salvador Fandiño García.
-
- 10/29/2003: beazley
- Fixed [ 826996 ] perl type checking ignores perl subclasses.
- This enhancement makes it so wrapped classes and structs can
- be subclassed in Perl and used normally.
- Patch contributed by Salvador Fandiño García.
- 10/16/2003: cheetah (William Fulton)
- [C#] IntPtr marshalled with a void* instead of int in C function
- declarations. The casts thus look more conventional, for example:
- // old
- DllExport double SWIGSTDCALL CSharp_get_Shape_x(int jarg1) {
- ...
- Shape *arg1 = (Shape *) 0 ;
- arg1 = *(Shape **)&jarg1;
- ...
- }
- // new
- DllExport double SWIGSTDCALL CSharp_get_Shape_x(void * jarg1) {
- ...
- Shape *arg1 = (Shape *) 0 ;
- arg1 = (Shape *)jarg1;
- ...
- }
- 10/14/2003: beazley
- Fixed a subtle problem with overloaded methods and smart pointers.
- If a class has overloaded methods like this:
- class Foo {
- public:
- int bar(int x);
- static int bar(int x, int y);
- };
- and the class is used as a smart pointer:
- class FooPtr {
- public:
- Foo *operator->();
- };
- The SWIG would try to expose the static member Foo::bar
- through FooPtr---resulting bogus wrapper code and a compiler
- error.
- Due to the way in which overloading is handled, it is
- extremely difficult to eliminate the static method in
- this case. Therefore, it is still exposed. However,
- the generated code now compiles and works.
- 10/05/2003: mkoeppe (Matthias Koeppe)
- [Guile, MzScheme, Chicken]: Remove symbol clashes between
- the runtime libraries by renaming all extern common.swg
- functions with the preprocessor.
- 10/05/2003: mkoeppe (Matthias Koeppe)
- [Guile] Added basic GOOPS support, contributed by John Lenz.
- See the documentation for details.
-
- *** NEW FEATURE ***
- 10/04/2003: mkoeppe (Matthias Koeppe)
- [Guile] New option, -only-setters, which disables
- traditional getter and setter procedures for structure slots.
- 10/03/2003: mkoeppe (Matthias Koeppe)
- [Guile] Added run test for reference_global_vars by John Lenz.
- 09/30/2003: beazley
- Partial solution to [ 792180 ] C++ smart-pointer/namespace mixup revisited.
- The problem is not easy to fix (at least it doesn't seem so), but is
- related to the instantiation of qualified templates inside of other
- namespaces. SWIG now generates an error message in this case rather
- than generating broken wrappers.
- 09/30/2003: beazley
- Fixed [ 800012 ] ENTER macro from CORE/scope.h clashes with libc search.h.
- Reported by Britton Leo Kerin.
- 09/30/2003: beazley
- Fixed [ 811518 ] Casting ints to doubles (w/ solution?)
- Addresses a problem with overloading in the Perl module.
- Reported by Gerald Dalley.
- 09/28/2003: mkoeppe
- [Guile with -scm option] Fix typo in generated code for
- procedures-with-setters. Reported by John Lenz.
- 09/26/2003: beazley
- Fixed [ 812528 ] externs not correct when throw is in signature.
- Reported by Joseph Winston.
-
- 09/23/2003: cheetah (William Fulton)
- SWIG was generating a number of symbols that didn't comply with
- the ISO C/C++ standard, in particular ISO/IEC 14882:1998(E) 17.4.3.1.2
- where double underscores are forbidden as well as symbols starting with
- an underscore followed by an upper case letter. Most of these have
- been rooted out. See new section added to internals.html development
- manual 'Symbol Naming Guidelines for Generated C/C++ Code'.
- 09/23/2003: cheetah (William Fulton)
- Director typemap name changes:
- inv => directorin
- outv => directorout
- argoutv => directorargout
- *** POTENTIAL INCOMPATIBILITY ***
- 09/19/2003: mrose (Mark Rose)
- [Python] Director constructors now default to __disown = 0,
- which is the intended behavior and fixes the director_finalizer
- test case under python.
- 09/12/2003: cheetah (William Fulton)
- [C#] - Typemaps added for std::string and const std::string &.
- - New delegate for creating a C# string given a char *. It
- can be used by calling SWIG_csharp_string_callback as shown
- in the std::string 'out' typemap. Useful if the return type is
- mapped to a C# string and the calling function is responsible
- for cleaning up memory as the C# garbage collector doesn't
- free the memory created in C/C++ and then returned as a C# string.
- - The exception delegates have moved into an inner class in the
- intermediate class, thereby freeing up the static constructor.
- 09/11/2003: beazley
- (Internals)
- Major refactoring of iteration over lists and hashes. The
- DOH library now uses iterators. They work like this:
- List *l = (some list);
- Iterator i;
- for (i = First(l); i.item; i = Next(i)) {
- // i.item contains the actual list item.
- // i.item is NULL at end of list
- ...
- }
- Hash *h = (some hash);
- Iterator j;
- for (j = First(h); j.item; j = Next(j)) {
- // j.item contains hash table item
- // j.key contains hash table key
- // Both j.item and j.key are NULL at end
- ...
- }
-
- The old iteration functions Firstitem(), Nextitem(), Firstkey(),
- and Nextkey() are gone.
- The new iterators are simpler, result in better memory use,
- and may be faster. Also, there are no longer any problems
- iterating over the same list/hash in multiple places at
- the same time. For example, this is fine:
- Iterator i,j;
- for (i = First(l); i.item; i = Next(i)) {
- for (j = First(l); j.item; j = Next(j)) {
- ...
- }
- }
- (This never worked in previous versions).
- *** POTENTIAL INCOMPATIBILITY ***. This will probably break
- third party extensions to SWIG (or give them further encouragement
- to join the SWIG CVS-tree :-).
- 09/10/2003: mkoeppe (Matthias Koeppe)
- [Guile] Fix memory leaks in the "list-vector.i" typemaps.
- 09/09/2003: mkoeppe (Matthias Koeppe)
- [Chicken] Use C_mk_bool rather than C_mkbool. This fixes
- the wrapping of boolean values for Chicken 1.10 and newer.
- Reported by Dave <hundo@yahoo.com> / Felix Winkelmann
- <felix@proxima-mt.de>.
- 09/05/2003: cheetah (William Fulton)
- [Java] Directors implemented for Java. In summary this is a big new feature
- which supports upcalls from C++ to Java. Code is generated to support C++
- callbacks to call into Java and true polymorphic behaviour for Java classes
- derived from C++ classes. See java.html for details. Contributed by
- Scott Michel.
- 09/05/2003: Tiger
- Created contract example directory at /SWIG/Examples/contract
- Added simple contract examples (simple_c & simple_cxx)
- Modified contract module's output format
- *** NEW FEATURE ***
- 09/01/2003: cheetah (William Fulton)
- Test-suite build improvements:
- - Multiple build directories working for the test suite, so it is now
- possible to run configure in multiple subdirectories and run the test
- suite in each of these sub directories.
- - 'make distclean' fixed so it doesn't bomb out on the Examples directory
- when using multiple subdiretory builds. Required the following directories
- to be moved:
- Examples/GIFPlot/Perl -> Examples/GIFPlot/Perl5
- Examples/GIFPlot/Php -> Examples/GIFPlot/Php4
- These new directories used to be symbolic links to the old directory.
- Also the Examples/test-suite/Perl symbolic link has been removed.
- - Running the test-suite, other than from the root directory, say
- in Examples/test-suite/python will now display all the code being
- executed.
- - The following 3 C# compilers are detected during configure and work with
- the test-suite: Mono, Portable.NET and Microsoft.
- 09/01/2003: Tiger
- Added inheritance support for design by contract feature.
- 09/01/2003: beazley
- Fixed [ 794914 ] Wrong types in template specialization.
- SWIG was not handling arguments correctly in template
- partial specialization. For example,
- template<class T> class Foo<T *> {
- public:
- T *blah();
- };
- %template(FooInt) Foo<int *>;
- in this class, the return type of blah was set to
- 'int **', but it should really be 'int *'. This has been
- fixed, but it will affect all prior uses of partial
- specialization.
-
- 09/01/2003: beazley
- Fixed [ 786394 ] Patch for generated perl code does not compile under RedHat9.
- Reported by Scott Finneran.
- 09/01/2003: beazley
- Fixed [ 791579 ] (unsigned) long long handled incorrectly (Tcl).
- This was an error in the Tcl typemaps.i file.
- Reported by Kjell Wooding.
-
- 09/01/2003: beazley
- Fixed [ 797573 ] no way to rename classes coming from C structures.
- This problem relates to renaming of anonymous structures with a
- typedef. For example:
- %rename(Bar) Foo;
- typedef struct {
- ...
- } Foo;
- Reported by Britton Leo Kerin.
-
- 09/01/2003: beazley
- Fixed [ 797576 ] -help seems to imply that only tcl-specific options exist.
- Added a comment to alert user to other options.
- Reported by Britton Leo Kerin.
- 09/01/2003: beazley
- Fixed [ 798205 ] Segfault in SWIG_ConvertPtr.
- Reported by Prabhu Ramachandran.
- 08/30/2003: mrose (Mark Rose)
- Modified the director typemaps in python/std_complex.i to use the
- new-style macro and conversion functions, which eliminated some
- redundant code. Fixed a few bugs in these typemaps as well, although
- more testing is needed.
- 08/29/2003: mrose (Mark Rose)
- Completed initial support for wrapping abstract classes with directors.
- Constructor wrappers will be generated for abstract classes that have
- directors, and instances of the director classes will be created regardless
- of whether the proxy class has been subclassed in the target language.
- No checks are made during construction to ensure that all pure virtual
- methods are implemented in the target language. Instead, calls to
- unimplemented methods will throw SWIG_DIRECTOR_PURE_VIRTUAL_EXCEPTION
- exceptions in C++.
- Integrated Prabhu Ramachandran's typemap patches, which provide director
- typemap support for enums and std::size_t, and fix a couple bugs in the
- director std::vector<> typemaps.
- 08/29/2003: cheetah (William Fulton)
- [C#] Implemented exception handling for throwing C# exceptions from C/C++ code.
- A few delegate functions are available for calling which then throw the C#
- exception. Use the SWIG_CSharpThrowException function from C/C++ typemaps.
- See the generated wrapper code or csharphead.swg for all available exceptions.
- Example:
- SWIG_CSharpThrowException(SWIG_CSharpException, "exception description");
- The 'throws' typemaps are also now implemented, so code is automatically
- generated to convert any C++ exception into a C# System.Exception when the C++
- method declares an exception specification such as:
- int foo() throw(Bar);
- Also any parameters that are references to a C++ class or a class passed by value
- and are passed as a C# null will now throw a C# NullReferenceException.
- 08/29/2003: cheetah (William Fulton)
- [C#] Fix to match the calling convention of all pinvoke methods so that they
- match the calling convention used by default in the C# 'static extern' declarations
- (__stdcall is used on Windows).
- 08/19/2003: cheetah (William Fulton)
- [Java] Reworked std::string typemaps. Fixes a number of string in std namespace
- problems. For example %template vector<string>. The templated class' get method
- wasn't returning a Java String, but a SWIGTYPE_p_string. Reported
- by Zach Baum.
- 08/15/2003: beazley
- Fixed [ 763522 ] 1.3.19 segfault in SwigType_add_pointer/DohInsertitem.
- Related to problem with unnamed class handling in Perl module.
- 08/15/2003: beazley
- Fixed [ 763563 ] Missing indication of optional arguments.
- Tcl module. Reported by Krzysztof Kozminski.
- 08/15/2003: beazley
- Fixed [ 787432 ] long param handled as int. Tcl module
- now uses Tcl_GetLongFromObj to convert integer values.
- 08/11/2003: beazley
- Fixed [ 775989 ] numeric template parameters. There were
- some errors in template expansion related to the use of
- arrays where the array dimension was a template parameter.
- It should work now. Reported by Bryan Green.
- 08/10/2003: mrose (Mark Rose)
- Added a director typemap (outv) for return by value and cleaned up up a few
- of the commented director typemaps.
- 08/10/2003: mrose (Mark Rose)
- Fixed constructor generation for director classes to ignore private
- constructors. Protected constructors are also ignored for now, pending
- a solution to the problem of wrapping classes that only define protected
- constructors.
- 08/07/2003: cheetah (William Fulton)
- New commandline option -outdir <dir> to specify where the language specific
- files are to be generated. This is useful for target languages like Python,
- Java etc which generate proxy files in the appropriate language.
- This option does not apply to the C/C++ wrapper file.
- 08/07/2003: cheetah (William Fulton)
- On Windows the generated files (other than the _wrap.c or _wrap.cxx files)
- were sometimes incorrectly being generated into the current directory unless
- the input file used the Unix path separator. The Windows path separator
- should now be used. Bug reported by Robert Davies.
- 08/07/2003: beazley
- Added array variable set typemap to Perl module.
- 08/07/2003: beazley
- Fixed [ 775677 ] Array init causes codegen bug..
- 08/07/2003: beazley
- Fixed [ 779062 ] Class"\n"::foo not supported. SWIG
- should now correctly handle whitespace in between
- namespace qualifiers. For example "A :: Foo :: Bar".
-
- 07/31/2003: cheetah (William Fulton)
- Fixes for parameters which are classes that are passed by value and have
- a default value. A copy constructor for SwigValueWrapper is required
- (SF #780056). Also fixed memory leak in these circumstances. These mods
- also fix SF #780054.
- 07/28/2003: beazley
- Improved run-time error message for pointers in Python module.
- Contributed by Zooko.
- 07/10/2003: ballabio (Luigi Ballabio)
- [Almost all languages] Wrappers for std::pair added.
- Typemaps for Python, Ruby, Guile and MzScheme.
- 07/01/2003: mkoeppe (Matthias Koeppe)
- [Chicken] Handle the case of more than one argout typemap
- per function.
- 06/29/2003: cheetah (William Fulton)
- [Java, C#] SF #670949 request. The destructor wrapper function name is now
- configurable. A new attribute called methodname in the
- javadestruct/javadestruct_derived (Java) or csdestruct/csdestruct_derived (C#)
- typemaps specifies the method name. For example in Java the destructor is
- wrapped by default with the delete method:
- %typemap(javadestruct, methodname="delete") SWIGTYPE {...}
- 06/27/2003: cheetah (William Fulton)
- [Java, C#] The throws attribute for adding exception classes to the throws
- clause also now works with the following typemaps:
- newfree
- javain, javaout (Java)
- csin, csout (C#)
- For example, the 'AnException' will be added to the throws clause in the
- proxy function:
- %typemap(javaout, throws="AnException") int {
- int returnValue=$jnicall;
- if (returnValue==0) throw new AnException("Value must not be zero");
- return returnValue;
- }
- 06/25/2003: mrose (Mark Rose)
- [Python] Director typemap marshalling checks for null pointers when
- walking the parameter list instead of relying soley on the parameter
- count. Cures a segfault that occurred for multiple argument inv typemaps.
- Someone with more Swig experience should probably review this code.
- 06/24/2003: mkoeppe (Matthias Koeppe)
- [Chicken] Don't emit calls to "C_check_for_interrupt",
- which may result in an endless loop. Patch by felix@proxima-mt.de.
- 06/20/2003: cheetah (William Fulton)
- [C#] Finalizers now use destructor syntax as the override which was used in
- the Finalize method is not in the ECMA standards, spotted by the MS compiler.
- 06/10/2003: cheetah (William Fulton)
- [C#] A number of changes have been made to remove the Java naming
- that was used in the C# module.
-
- Typemap name changes:
- jni -> ctype
- jtype -> imtype
- jstype -> cstype
- javain -> csin
- javaout -> csout
- javainterfaces -> csinterfaces
- javabase -> csbase
- javaclassmodifiers -> csclassmodifiers
- javacode -> cscode
- javaimports -> csimports
- javaptrconstructormodifiers -> csptrconstructormodifiers
- javagetcptr -> csgetcptr
- javafinalize -> csfinalize
- Feature name changes:
- javaconst -> csconst
- javamethodmodifiers -> csmethodmodifiers
- Pragma changes:
- pragma(java) -> pragma(csharp)
- jniclassbase -> imclassbase
- jniclassclassmodifiers -> imclassclassmodifiers
- jniclasscode -> imclasscode
- jniclassimports -> imclassimports
- jniclassinterfaces -> imclassinterfaces
- Special variable name changes:
- $javaclassname -> $csclassname
- $javainput -> $csinput
- $jnicall -> $imcall
- This will break SWIG interface files that use these typemaps, features
- and pragmas. Please update your code or use macros for backwards
- compatibility.
- *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
- 06/10/2003: mkoeppe (Matthias Koeppe)
- [MzScheme] Applied MzScheme module updates contributed by
- John Lenz <jelenz@students.wisc.edu>.
- - Updated mzscheme to use SWIG's common runtime type
- system from common.swg.
- - The Lib/mzscheme directory has been reorganized to
- standardize names across the language modules:
- mzscheme.i was moved to mzscheme.swg, mzscheme.swg and
- mzschemedec.swg have been removed, mzrun.swg (which
- contains the runtime code) has been added.
- - The swig_proxy structure was renamed to swig_mz_proxy.
- swig_mz_proxy now contains a pointer to a swig_type_info
- structure.
- - Added varin and varout typemaps for SWIGTYPE [] and
- SWIGTYPE &.
- - Garbage collection by calling scheme_add_finalizer() has
- been added.
- *** NEW FEATURE [MzScheme] ***
- 06/10/2003: cheetah (William Fulton)
- [Java] New typemaps: javadestruct and javadestruct_derived
- for the C++ destructor wrapper. The javadestruct version gets used by
- classes at the top of an inheritance chain and the javadestruct_derived
- version gets used by other classes.
- [C#] cildispose and cildisposeoverride typemaps replaced by
- csdestruct and csdestruct_derived typemaps. The delete()
- method has been removed and its functionality put into these
- typemaps designed for the Dispose() method.
- - New typemaps csinterfaces and csinterfaces_derived replace
- the javainterfaces typemap. Also fixes the peculiarity of all classes
- in an inheritance chain individually deriving from the IDisposable
- interface.
- - New typemap csfinalize for finalizers. C++ destructors are now called
- by garbage collector during finalization. Problem reported by
- Andreas Schörk.
- 06/10/2003: Tiger
- Modified contract code for error message output.
- Contract code can now print out simple error message.
- Modified contract code to prepare for inheritance
-
- 06/03/2003: mkoeppe
- [Guile] Applied Guile module updates contributed by
- John Lenz <jelenz@students.wisc.edu>.
- - SWIG currently uses Guile's gh_ API, which is marked as
- deprecated in Guile 1.6 and will be removed in Guile
- 1.9. This change introduces a command-line flag "-scm"
- which causes SWIG to generate wrappers that use Guile's
- SCM API instead; this requires Guile >= 1.6.
-
- - The Lib/guile directory has been reorganized to
- standardize names across language modules: guiledec.swg
- and guile.swg have been moved into guile_gh_run.swg,
- guile.i has been moved to guile_gh.swg, guile_scm.swg
- and guile_scm_run.swg which contain the SCM API stuff
- have been added
- - ghinterface.i, which contains the defines from the gh_
- functions to the scm_functions has been added
- - The API for dealing with pointer objects is now
- SWIG_ConvertPtr, SWIG_MustGetPtr, SWIG_NewPointerObj.
- - Added varin and varout typemaps for SWIGTYPE [] and SWIGTYPE &
- - Garbage collection has been added.
- *** NEW FEATURE [Guile] ***
-
- 06/01/2003: cheetah (William Fulton)
- Dimensionless arrays such as
- int foo[] = {1, 2};
- extern int bar[];
- produce a warning that the variable is read-only. Depending on the target
- language, this used to cause compile errors or generate a setter that
- generated a runtime error. A setter cannot be automatically generated
- because the array size cannot be determined by SWIG. A varin, globalin
- or memberin typemap (depending on the target language) must be written
- by the user.
- 05/29/2003: beazley
- Refinement to default typemap matching and arrays. When an
- array is declared like this:
- int foo[4];
- The default typemap now resolves to
- SWIGTYPE [ANY]
- If no match is found for that, it then resolves to
- SWIGTYPE []
- If no array dimension is specified in the original declaration,
- the SWIGTYPE [] is used right away.
- Note: This change has been made to resolve problems related to
- arrays with and without dimensions. For example, sometimes SWIG
- was generating setter functions for array variables with no dimensions
- (an error). Likewise, SWIG sometimes made arrays with dimensions
- read-only (also an error). This fixes the arrays_global test
- problem.
-
- 05/28/2003: beazley
- Fixed subtle type handling bug with references and pointers.
- If you had functions like this:
- typedef Foo Bar;
- Foo *func1();
- void func2(Bar &x);
- Then func2() wouldn't accept objects returned by func1()
- because of a type error. It should work now.
- Reported by Brian Yang.
- 05/21/2003: cheetah (William Fulton)
- Fixes to some of the Visual C++ example project files which would not
- work with spaces in the paths held in the environment variables used to
- point to the target language's library / include directory.
- SF bug #740769
- 05/21/2003: songyanf (Tiger)
- Added -contracts option.
- First try of the idea of "Wrap by Contract":
- build up realiable cross-language module by wrapping with SWIG.
- Implemented basic assertion
- (preassertion & postassertion & invariant)
- for simple C/C++ functions.
-
- Current format of contracts are:
- %contract class_name :: func_name (paras...) {
- require:
- boolean exprs;
- exprs;
- ensure:
- boolean expr;
- exprs;
- invariant:
- boolean expr;
- exprs;
- }
- *** NEW FEATURE ***
-
- 05/19/2003: cheetah (William Fulton)
- Build tweaks. There were a few preprocessor definitions which were
- specified in the Makefile for passing on the commandline when compiling.
- These are now all defined in swigconfig.h. Autoconf doesn't normally
- allow installation directories to be defined in this config header file,
- but an autoconf archive macro enables this. This macro along with future
- autoconf macros are going to be put in the Tools/config directory.
- 'swig -version' now reports the target build platform.
- 05/11/2003: cheetah (William Fulton)
- [C# and Java] Fix to the following typemaps:
- javabase, javainterfaces, javaimports, javaclassmodifiers,
- javaptrconstructormodifiers, javafinalize, javagetcptr & javacode.
- These are the typemaps for modifying/generating proxy classes.
- Previously the typemaps would use the proxy class name and not the
- C++ type, which was inconsistent with all other typemaps.
- In most circumstances the proxy class name and the C++ class name/type
- is the same except for classes in namespace, templated classes etc. so
- this shouldn't affect most cases.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA and C# MODULES ***
- 05/09/2003: cheetah (William Fulton)
- Visual C++ Project files have been added so that the runtime libraries
- can be built on Windows (for Tcl, Perl, Python and Ruby).
- 05/01/2003: beazley
- Fixed problem with return by value, const, and private constructors.
- For example:
- class B {
- private:
- B();
- public:
- B(const B&);
- };
- class A {
- ...
- const B returnB() const;
- ...
- };
- Problem and patch suggestion reported by Bill Hoffman.
- 04/29/2003: cheetah (William Fulton)
- Build changes:
- - Single autoconf invocation - autoconf in the Tools directory has gone.
- - Libtool bootstrapped when running autogen.sh. This requires anyone
- using the cvs version of SWIG to have libtool installed on their
- machine. Suggest version 1.4.2 or higher, preferably the latest - 1.5.
- - Automake is now used to build the runtime libraries in conjunction
- with libtool.
- - Runtime libraries are now successfully built as DLLs on Cygwin.
- - Skipping languages is no longer just determined in the top level
- makefile but in configure.in. This info is used for building
- the runtime libraries and for running the examples and test-suite.
- - These changes have fixed multiple build directory builds, that is
- building from directories other than the top level directory.
- Installation from multiple build directories also working. An initial
- configure in the top level directory is no longer needed as described
- in 04/02/2003 entry. A 'make distclean' will be needed before building
- in a directory other than the top level directory if the autotools
- have been run from this top level directory at some point, but
- autoconf will tell you this. Note that 'make check' only works from
- the top level directory at the moment.
- 04/28/2003: beazley
- Fixed [ 723471 ] Wrapper_print() fails with preprocessor directives.
- 04/28/2003: beazley
- Minor refinement of const static member variable handling
- described in CHANGES 08/11/2002. Previously, SWIG merely
- checked to see if there was an initializer in the declaration.
- Now, SWIG additionally checks to make sure the static member
- is const.
- 04/25/2003: ljohnson (Lyle Johnson)
- [Ruby] Added a kind of limited support for multiple inheritance,
- activated using the -minherit command-line option. I've also updated
- the "C++ Inheritance" section of the Ruby documentation to discuss
- how this works, and its limitations. Also also modified the minherit.i
- test case to run against this.
- 04/25/2003: ljohnson (Lyle Johnson)
- [Ruby] Added the -globalmodule command-line option for the Ruby
- module, for wrapping stuff into the global module (Kernel) instead
- of a nested module. Updated documentation accordingly.
- 04/23/2003: mrose (Mark Rose)
- Fixed symname error in director calls to Python methods
- that extend C++ operators.
- Stopped director destructor wrappers from calling __set_up,
- which was leaving the director flag in an inconsistent state.
- 04/23/2003: beazley
- Fixed problem with namespace resolution and nested namespaces.
- Reported by Alfred Lorber (and Marcelo Matus).
- 04/16/2003: cheetah (William Fulton)
- Patch for Java examples and test-suite to run on Mac OS X.
- 04/15/2003: ljohnson (Lyle Johnson)
- [Ruby] Incorporated Nobu Nakada's patches for supporting the Ruby
- 1.8 allocation framework.
- 04/15/2003: ljohnson (Lyle Johnson)
- [Ruby] Replaced all uses of the deprecated STR2CSTR() macro with the
- safer StringValuePtr() macro. For more information, see ruby-talk:67059
- and follow-ups to that post.
- 04/11/2003: beazley
- Fixed problem with preprocessor macro expansion. For example:
-
- #define min(x,y) ((x) < (y)) ? (x) : (y)
- int f(int min);
- Reported by Sebastien Recio.
- 04/10/2003: cheetah (William Fulton)
- [Java] Added a runtime check to typemaps in arrays_java.i library to check
- that the Java array passed in is the same size as the C array and throw an
- exception if not.
- Also fix to use delete instead of free for arrays created using new.
- 04/07/2003: cheetah (William Fulton)
- Remove GCC3 warning when compiling the examples and test-suite:
- cc1plus: warning: changing search order for system directory "/usr/include"
- cc1plus: warning: as it has already been specified as a non-system directory
- See SF patch #715531 submitted by Gerald Williams
- 04/03/2003: cheetah (William Fulton)
- [C#] Improved wrapping of enums and constants. These were previously
- wrapped as C# variables rather than constants. Either these are wrapped
- as readonly (runtime) constants or compile time constants, depending on
- the %javaconst directive (The directive is likely to change name soon).
- For example wrapping:
- %javaconst(0);
- #define ABC 22
- %javaconst(1) XYZ;
- #define XYZ 33
- is now:
- public static readonly int ABC = examplePINVOKE.get_ABC();
- public const int XYZ = 33;
- 04/03/2003: cheetah (William Fulton)
- [Java] Global constants and enums are put in their own interface called
- xxxConstants, where xxx is the module name. This is an improvement as
- it is possible to derive (implement) a Java class from the xxxConstants
- interface to improve the syntax; namely when wrapping:
- enum {ONE=1, TWO, THREE};
- accessing these from a Java class implementing xxxConstants is neater:
- int number = ONE;
- than the previous:
- int number = xxx.ONE;
- Patch submitted by Dave Dribin.
- 04/02/2003: cheetah (William Fulton)
- Build improvements for multiple builds. This allows one to build
- the SWIG executable and runtime libraries for different platforms/compilers
- etc by running configure in different directories. This isn't 100% just
- yet and won't be until libtool is better configured... a 'configure' and
- 'make distclean' needs to be run in the root directory before it all works.
- For example:
- $ ./configure
- $ make distclean
- $ mkdir config1; cd config1; ../configure CC=gcc CXX=g++; make; cd ..
- $ mkdir config2; cd config2; ../configure CC=cc CXX=c++; make; cd ..
-
- To be improved. A 'make check' does not work yet either.
- 04/01/2003: beazley
- Fixed template partial specialization argument expansion bug.
- This showed up when trying to use std_vector.i with vectors
- of pointers.
- 03/31/2003: cheetah (William Fulton)
- Fix for parallel make builds of SWIG, for example
- make -j 4
- Build failure reported by Bill Clarke.
- 03/28/2003: beazley
- Released 1.3.19.
- Version 1.3.19 (March 28, 2003)
- ===============================
- 03/28/2003: beazley
- Variety of minor bug fixes to the 1.3.18 release including:
- - Segmentation fault with %extend directive.
- - Typemap variable substitution bug.
- - Expression evaluation bug.
- - Large memory leak with template expansion.
- Version 1.3.18 (March 23, 2003)
- ===============================
- 03/21/2003: beazley
- Fixed two problems with the %extend directive, overloading, and
- template expansion. See the 'template_extend_overload' and
- 'template_extend_overload_2' tests in Examples/test-suite for
- details.
- 03/20/2003: cheetah (William Fulton)
- [C#] Added some typemaps as suggested by Andreas Schoerk for handling
- parameters that are passed as pointers or by reference. These have
- been put in typemaps.i.
- 03/20/2003: beazley
- Fixed a C++ scoping bug related to code like this:
- class Foo {
- public:
- int Foo::bar();
- };
- Previously, SWIG just tossed out the Foo::bar() declaration. Now,
- the declaration is wrapped provided that the prefix is exactly the
- same as the current scope (including any enclosing namespaces).
- Reported by Bruce Lowery.
- 03/20/2003: beazley
- Incorporated [ 696516 ] Enabling exception processing for data member access.
- In some compilers, attribute access can generate exceptions. However,
- SWIG ordinarily assumes that no exceptions will be raised. To disable this,
- use the %feature("allowexcept"). For example:
- %feature("allowexcept") Foo::x;
- ...
- class Foo {
- public:
- int x; /* Exception handling enabled */
- ...
- };
- Patch contributed by Yakov Markovitch.
-
- 03/20/2003: beazley
- Incorporated Patch. [ 701860 ] Improve Performance (python proxies).
- Gives a performance boost to proxy class code and the management of the
- .this and .thisown attributes. Contributed by Mike Romberg.
- 03/19/2003: cheetah (William Fulton)
- [C# and Java] Added missing vararg support.
- 03/18/2003: mrose (Mark Rose)
- Removed code related to tagging individual methods for directors.
- The concept of having directors for some but not all virtual methods
- of a class is deeply flawed. The %feature("nodirector") tag is also
- gone.
-
- Directors are off by default. To enable them for a class, issue
- %feature("director") classname; which will create director methods
- for every virtual method in the hierarchy of the class.
- 03/17/2003: beazley
- Fixed a subtle problem with passing arguments of type function. For
- example:
- int foo(int x(int, int));
- or
- typedef int binop_t(int, int);
- int foo(binop_t x);
- In old versions, this would produce code that wouldn't compile. Now,
- SWIG merely adds an extra pointer, making these declarations the same
- as:
- int foo(int (*x)(int, int));
- typedef int binop_t(int, int);
- int foo(binop_t *x);
- Reported by Garth Bushell.
- 03/17/2003: mrose (Mark Rose)
- Fixed the return statement for director base class calls that have no
- return value.
- 03/15/2003: beazley
- Fixed a problem with const smart-pointer wrapping. For example:
- class Foo {
- public:
- int x;
- void bar() const;
- void spam();
- };
- class Blah {
- ...
- const Foo *operator->();
- ...
- };
- In this case, only "x" and "bar" are visible from Blah (since application
- of spam violates constness). Moreover, access to "x" is read-only.
-
- 03/15/2003: mrose (Mark Rose)
- Cleaned up two signed versus unsigned comparisons in python/std_vector.i.
-
- 03/15/2003: cheetah (William Fulton)
- [C#] Global variables are wrapped using properties instead of get and set methods.
- Member variable wrapping bug fixes, for example wrapping pointers work now.
- Typemaps are used for all variable wrapping to generate the property code.
- 03/13/2003: mrose (Mark Rose)
- Fixed a bug in the virtual method unrolling for directors.
- The order of unrolling is now from base to derived, to ensure
- that the most derived implementation of a director method is
- found.
- Director methods for pure virtual methods now throw
- DIRECTOR_PURE_VIRTUAL_EXCEPTION if _up is set.
- 03/12/2003: cheetah (William Fulton)
- [C#] Polymorphism fix: virtual functions now use the appropriate
- keyword in the C# proxy class, virtual or override.
- Some 'using System;' statement fixes needed by the Mono compiler.
- 03/11/2003: beazley
- Fixed subtle bug in the application of SwigValueWrapper<> to
- template classes with default constructors. Reported by
- Bruce Lowery.
- 03/11/2003: beazley
- The $descriptor(type) variable is now expanded in code supplied to
- %extend. This is useful for certain kinds of advanced wrapping
- (especially container classes).
- 03/11/2003: luigi
- Support for std::map.
- (a) Integration with scripting language (a la std::vector) for
- Python, Ruby, MzScheme, and Guile;
- (b) Simple wrapper for other languages
- 03/10/2003: beazley
- Fixed problem with escape sequences in string and character constants. SWIG
- wasn't parsing certain octal codes correctly.
- 03/07/2003: beazley
- Fixed a variety of subtle preprocessor problems reported by
- Sebastien Recio.
- (a) Empty preprocessor values no longer generate "bad constant
- value" errors. For example:
- #define FOO
- #define FOO BAR
- (b) Macro names can now span multiple lines (technically valid,
- although questionable practice). For example:
- #define A_LONG_MACRO_\
- NAME 42
- (c) Whitespace is no longer required before certain macro values.
- For example:
- #define FOO"Hello"
- #define BAR\
- "Hello"
-
- 03/07/2003: ljohnson (Lyle Johnson)
- [Ruby] Added missing long long and unsigned long long typemaps
- in the Lib/ruby/typemaps.i library file.
- 03/07/2003: mrose (Mark Rose)
- Added Examples/python/callback to demostrate how directors can
- be used to implement callbacks in Python
- Added Examples/python/extend to demonstrate virtual method
- calls from C++ to Python (really the same as the callback
- example, just a different context).
- Added four tests for very basic director functionality. These
- have runtime tests under python.
- The Python module now emits #define SWIG_DIRECTORS near the
- top of the output file if directors are enabled. This is useful
- for disabling parts of tests in target languages that don't
- support directors.
- 03/06/2003: mrose (Mark Rose)
- Added a section to Doc/Manual/Python.html on cross language
- polymorphism (directors).
- 03/06/2003: mrose (Mark Rose)
- The short-lived "-fdirectors" command line option has been
- removed. To enable directors, instead use the extended %module
- directive as follows:
- %module(directors="1") modulename
- 03/06/2003: cheetah (William Fulton)
- The long long typemaps have been rewritten so that they can be more
- easily used with non ISO compilers, like Visual C++. For example
- if you are wrapping the Windows 64 bit type __int64 the long long
- typemaps can be used with %apply:
- %apply long long { __int64 };
- __int64 value1(__int64 x);
- __int64 will now appear in the generated code instead of long long.
-
- 03/06/2003: beazley
- *** DEVELOPER CHANGE ***
- Swig module mutation has been changed slightly. When a language
- class method wants to save node attributes, it now uses one of the
- following functions:
- Swig_require()
- Swig_save()
- The first argument to these functions is a namespace in which
- saved attributes are placed. For example,this code
- Node *n;
- Swig_save("cDeclaration",n,"type","parms","name",NIL);
- saves the attributes as "cDeclaration:type", "cDeclaration:parms",
- and so forth. If necessary, a language module can refer to
- old values by using this special namespace qualifier.
- In addition to this, a special attribute "view" contains the name
- of the last namespace used to save attributes. In the above
- example, "view" would have the value "cDeclaration". The value
- of "cDeclaration:view" would have the previous view and so forth.
- Swig_restore(n) restores a node to the state before the last
- Swig_require() or Swig_save() call.
- Note: This change makes it easier for language modules to refer
- to old values of attributes.
- 03/06/2003: mrose (Mark Rose)
- Merged the cross-language polymorphism patch. When enabled, C++
- "proxy" classes (called directors) are generated for each specified
- C++ class. Directors pass method calls from C++ to Python, similar
- to the way the usual proxy (shadow) classes pass method calls from
- Python to C++. Together, these two types of proxies allow C++
- classes that are extended in Python to behave just like ordinary
- C++ classes and be used in C++ like native objects.
-
- This feature is still very experimental and is disabled by default.
- To enable director support, specify '-fdirectors' on the SWIG command
- line or in the SWIG_FEATURES environment variable. In the interface
- file, add %feature("director") to generate directors for all classes
- that have virtual methods.
-
- See http://stm.lbl.gov/~tm2/swig/ProxyDoc.html for more details.
-
- 03/03/2003: beazley
- Fixed a small glitch in typemap local variable replacement. If you had
- a typemap like this:
- %typemap(in) type ($1_type temp) {
- ...
- temp = ...;
- ...
- }
- and no occurrence of "$1_type" appeared in the body, then the local
- variable type wouldn't be substituted.
- 03/03/2003: cheetah (William Fulton)
- [C#] New version of the CSharp module which is typemap based.
- It also uses ECMA C# and no longer uses Microsoft Visual C++.NET
- glue. This means that it will work on non-Windows platforms.
- Contributed by Neil Cawse.
- 02/27/2003: beazley
- Fixed [ 653548 ] error parsing casting operator definition.
- SWIG now ignores casting operators declared outside of a class.
- For example:
- inline A::operator char *() { ... }
- Bug reported by Martin Casado.
- 02/27/2003: beazley
- Added support for anonymous bit-fields. For example:
- struct Foo {
- int x : 4;
- int : 4;
- int y : 8;
- };
- Anonymous bit-fields are ignored by SWIG. Problem
- reported by Franz Höpfinger.
- 02/26/2003: cheetah (William Fulton)
- [Java] Better typemaps in the Examples/java/typemap example and also
- fixes subtle bug when using the StringBuffer typemaps more than once.
- 02/26/2003: beazley
- Fixed [ 642112 ] Constants char bug.
- 02/26/2003: beazley
- Fixed [ 675337 ] Partial template specialization not entirely working.
- There was a subtle problem related to the naming and ordering of
- template partial specialization arguments. Matching worked okay,
- the resulting templates weren't expanded correctly.
- 02/25/2003: beazley
- Fixed problem with parsing (and generating code) for
- references to arrays. For example:
- int foo(int (&x)[10]);
-
- 02/25/2003: beazley
- Fixed [ 635347 ] Compilation warning from libpy.c.
- Reported by Daniel L. Rall.
-
- 02/25/2003: beazley
- Fixed a subtle problem with virtual method implementation
- checking and typedef.
- typedef int *intptr;
- struct A {
- virtual int *foo() = 0;
- };
- struct B : public A {
- virtual intptr foo() { };
- };
- SWIG was treating these declarations as different even though
- they are the same (via typedef).
- 02/25/2003: ljohnson (Lyle Johnson)
- [Ruby] Added range checking for the NUM2USHRT macro, per [ 675353 ].
- 02/24/2003: beazley
- Fixed a subtle problem with the code that determined if a class is abstract
- and can be instantiated. If you had classes like this:
- struct A {
- virtual int foo(int) = 0;
- };
- struct B : virtual A {
- virtual int foo(int);
- };
- struct C : virtual A {
- };
- /* Note order of base classes */
- struct D : B, C { }; /* Ok */
- struct E : C, B { }; /* Broken */
- then SWIG determined that it could instantiate D(), but not E().
- This inconsistency arose from the depth-first search of the
- inheritance hierarchy to locate the implementations of virtual
- methods. This problem should now be fixed---SWIG will attempt
- to locate any valid implementation of a virtual method by
- traversing over the entire hierarchy.
- 02/22/2003: cheetah (William Fulton)
- [Java] Fix for using enum typemaps. The Java final static variable type
- can be set using the jstype typemap, enabling enums to be mapped to
- something other than int. Bug reported by Heiner Petith.
- 02/21/2003: songyanf (Tiger)
- Added CSharp (C#) module prototype
- i.e. csharp.cxx & csharp.h at Source/Modules/.
- They are for test usage only now and need improvement.
- The interface also need to be modified.
- *** NEW FEATURE ***
-
- 02/20/2003: songyanf (Tiger)
- Fixed problem with typedef with -fvirtual.
- Similar as beazley's modification today.
- 02/20/2003: beazley
- Added support for gcc-style variadic preprocessor macros.
- Patch [ 623258 ] GCC-style vararg macro support.
- Contributed by Joe Mason.
- 02/20/2003: beazley
- Fixed [ 605162 ] Typemap local variables.
- Reported by Lyle Johnson.
- 02/20/2003: beazley
- Fixed problem with abstract classes and typedef. For example:
- class Foo {
- public:
- virtual void foo(int x) = 0;
- };
- typedef int Integer;
- class Bar : public Foo {
- public:
- virtual void foo(Integer x);
- };
- SWIG was getting confused about the latter method---making Bar
- abstract. Reported by Marcelo Matus.
- 02/19/2003: cheetah (William Fulton)
- [Java] %javaconst(flag) can also be used on enums as well as constants.
- This feature enables true Java compiler constants so that they can be
- used in Java switch statements. Thanks to Heiner Petith for patches.
- 02/19/2003: songyanf (Tiger)
- Modified -fcompact feature to deal with PP lines
- 02/18/2003: beazley
- Fixed [ 689040 ] Missing return value in std_vector.i.
- Reported by Robert H. de Vries.
- 02/18/2003: beazley
- Fixed a few evil scoping problems with templates, namespaces, and the
- %extend directive. Problem reported by Luigi Ballabio.
- 02/18/2003: cheetah (William Fulton)
- [Ruby] Improved support for Visual C++ and other native Windows compilers.
- It is no longer necessary to specify "/EXPORT:Init_<module>", where <module> is the
- swig module name when linking using these native Windows compilers.
- 02/15/2003: songyanf (Tiger)
- Added -fvirtual option.
- Reduce the lines and size of the wrapper file
- by omitting redifined virtual function in children classes.
- Modified -compact option to -fcompact option
- Added -small option.
- -small = -fvirtual -fcompact
- And it can be extended by future feature options,
- which are used to reduce wrapper file szie.
- Added SWIG_FEATURES environment variable check.
- To dynamically set the feature options such as -fcompact & -fvirtual
- *** NEW FEATURE ***
- 02/13/2003: lenz
- Updated Doc/Manual/Perl5.html to talk about C++ compile problems
- configure.in now checks for PERL5_CCFLAGS
- Runtime/Makefile.in and Example/Makefile.in now use PERL5_CCFLAGS
- Added Lib/perl5/noembed.h which contains all the known macro conflicts
- 02/12/2003: beazley
- Fixed [ 685410 ] C++ Explicit template instantiation causes SWIG to exit.
- Fixes a syntax error with declarations similar to this:
- template class std::vector<int>;
- SWIG now ignores the instantiation and generates a warning message.
- We might do more later. Reported by Thomas Williamson.
- 02/11/2003: cheetah (William Fulton)
- Rewrote bool typemaps to remove performance warning for compiling generated code
- under Visual C++.
- 02/11/2003: cheetah (William Fulton)
- Fix for wrapping reference variables (const non-primitive and all non-const types)
- for example:
- int& i;
- Class& c;
- const Class& c;
- 02/11/2003: beazley
- Fixed more very subtle preprocessor corner cases related to recursive
- macro expansion. For example:
- #define cat(x,y) x ## y
- cat(cat(1,2),3) // Produces: cat(1,2)3
-
- #define xcat(x,y) cat(x,y)
- xcat(xcat(1,2),3) // Produces 123
- See K&R, 2nd Ed. p. 231.
- 02/10/2003: cheetah (William Fulton)
- Fixed [ 683882 ] - patch submitted by F. Postma for SWIG to compile on HP-UX.
- 02/10/2003: beazley
- Fixed subtle preprocessor argument expansion bug. Reported by Marcelo Matus.
- 02/10/2003: songyanf
- Added -compact option.
- Reduce the lines and size of the wrapper file
- by omitting comments and combining short lines.
- *** NEW FEATURE ***
-
- 02/07/2003: beazley
- Fixed [ 651355 ] Syntax error with cstring.i
- Reported by Omri Barel.
- 02/07/2003: beazley
- Fixed [ 663632 ] incompatibility with standard cpp.
- This is a refinement that fixes this problem:
- // Some macro with an argument
- #define FOO(x) x
- int FOO; /* Not a macro---no arguments */
-
- 02/05/2003: beazley
- Fixed [ 675491 ] parse error with global namespace qualification.
- Submitted by Jeremy Yallop.
- 02/04/2003: beazley
- Fixed bug in varargs processing introduced by the numinputs typemap parameter.
- 01/08/2003: ttn
- [xml] Fix string-replacement ordering buglet.
- Thanks to Gary Herron.
- 12/23/2002: cheetah (William Fulton)
- Further build changes:
- - The SWIG executable is now built using a single Makefile.
- - This makefile is generated by Automake (Source/Makefile.am).
- - Dependency tracking and tags support are in this makefile.
- - Automake 1.7.2 and Autoconf 2.54 minimum versions are needed to build SWIG from CVS.
- - Running ./autogen.sh now installs Autoconf/Automake support files into
- Tools/config and these files are no longer stored in CVS.
- - Bug fixes in 'make install' for systems using .exe executable extension and
- ./configure --with-release-suffix=whatever
- 12/16/2002: cheetah (William Fulton)
- More build changes:
- - Autoconf's AC_CANONICAL_HOST replaces proprietary approach for detecting build host.
- - Autoconf support files moved to Tools/config.
- 12/16/2002: cheetah (William Fulton)
- Modifications to run on MacOS, submitted by Bernard Desgraupes.
- Mainly ensuring generated files are output in the appropriate directory for
- some modules.
- 12/11/2002: cheetah (William Fulton)
- Various build modifications and bug fixes:
- - Simplification of version string. Use autoconf's PACKAGE_VERSION instead.
- - Build time removed from SWIG version.
- - Using standard autoconf config header generation.
- - Updated old autoconf macros as reported by autoupdate.
- - Removed $prefix in autoconf from search paths as autoconf won't expand them.
- - Subtle bug fix where 'make prefix=/somewhere; make clean; make prefix=/somwhere/else'
- produced an executable using the incorrect library directories.
- - Added -ldflags commandline option for MzScheme, Ocaml, Pike and PHP.
- - Fixed reporting of compiler used when using -version commandline option.
- - SWIG web address added to -version commandline option.
- 12/11/2002: beazley
- Minor fix to Tcl dynamic cast typemaps. Reported by
- Kristopher Blom.
- 12/10/2002: beazley
- Fixed subtle template argument replace bug. Reported by
- Chris Flatley.
- 12/10/2002: beazley
- Reverted CHANGES 09/03/2002, preprocessor argument evaluation. Arguments
- are not evaluated during collection, K&R, p. 230.
- 12/06/2002: beazley
- Fixed [ 649022 ] Compilation problems with KAI/KCC
- 12/02/2002: beazley
- SWIG 'rel-1-3' CVS branch merged back into the main branch.
- Version 1.3.17 (November 22, 2002)
- ==================================
- 11/19/2002: beazley
- Fixed [ 613922 ] preprocessor errors with HAVE_LONG_LONG.
-
- 11/19/2002: beazley
- Fixed [ 615480 ] mzscheme SWIG_MustGetPtr_.
- 11/19/2002: beazley
- Fixed [ 635119 ] SWIG_croak causes compiler warning.
- 11/16/2002: cheetah (William Fulton)
- [Java] Added typemaps for pointers to class members.
- 11/15/2002: cheetah (William Fulton)
- [Java] Bug fix: Overloaded C++ functions which cannot be overloaded in Java
- once again issue a warning.
- 11/14/2002: cheetah (William Fulton)
- [Java] Handling of NULL pointers is improved. A java null object will now
- be translated to and from a NULL C/C++ pointer by default. Previously when
- wrapping:
- class SomeClass {...};
- void foo(SomeClass *s);
- and it was called from Java with null:
- modulename.foo(null)
- a Java NullPointerException was thrown. Extra typemaps had to be written in
- order to obtain a NULL pointer to pass to functions like this one. Now the
- default wrapping will detect 'null' and translate it into a NULL pointer.
- Also if a function returns a NULL pointer, eg:
-
- SomeClass *bar() { return NULL; }
-
- Then this used to be wrapped with a SomeClass proxy class holding a NULL
- pointer. Now null is returned instead. These changes are subtle but useful.
- The original behaviour can be obtained by using the original typemaps:
- %typemap(javaout) SWIGTYPE {
- return new $&javaclassname($jnicall, true);
- }
- %typemap(javaout) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] {
- return new $javaclassname($jnicall, $owner);
- }
- %typemap(javagetcptr) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{
- protected static long getCPtr($javaclassname obj) {
- return obj.swigCPtr;
- }
- %}
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 11/12/2002: beazley
- Fixed problem with abstract methods and signatures. For example:
- class abstract_foo {
- public:
- virtual int meth(int meth_param) = 0;
- };
-
-
- class abstract_bar : public abstract_foo {
- public:
- int meth(int meth_param_1, int meth_param_2) { return 0; }
- };
- In this case, abstract_bar is still abstract.
- Fixes [ 628438 ] Derived abstract class not abstract.
- Reported and patched by Scott Michel.
- 11/11/2002: beazley
- Fixed a matching problem with typemaps and array dimensions. For example, if you
- had this:
- typedef char blah[20];
- and a typemap:
- %typemap() char [ANY] {
- ... $1_dim0 ...
- }
- then $1_dim* variables weren't be expanded properly. It should work now.
- Problem reported by Pankaj Kumar Goel.
-
- 11/07/2002: mkoeppe
- Added an experimental new module that dumps SWIG's parse
- tree as (Common) Lisp s-expressions. The module is
- invoked with SWIG's -sexp command-line switch. The output
- can be read into Common Lisp. There is (prototype)
- example Lisp code that generates Foreign Function Interface
- definitions for use with Kevin Rosenberg's UFFI.
- *** EXPERIMENTAL NEW FEATURE ***
- 11/07/2002: mkoeppe
- Removed duplicate declaration of "cpp_template_decl" in
- parser.y; bison 1.75 complained.
- 11/06/2002: cheetah (William Fulton)
- [Java] Default primitive array handling has changed like arrays of classes.
- C primitive arrays are no longer wrapped by a Java array but with a pointer
- (type wrapper class). Again the changes have been made for efficiency reasons.
- The original typemaps have been moved into arrays_java.i, so the original
- behaviour can be obtained merely including this file:
- %include "arrays_java.i"
- The array support functions are no longer generated by default. They are only
- generated when including this file, thus this often unused code is only
- generated when specifically requiring this type of array support.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 11/05/2002: ljohnson (Lyle Johnson)
- [Ruby] Added support for nested module declarations (as was
- previously added for the Perl module). So a %module directive
- of the form:
- %module "Outer::Inner::Foo"
- will nest everything as (in Ruby code):
- module Outer
- module Inner
- module Foo
- # stuff goes here
- end
- end
- end
-
- 11/05/2002: mkoeppe
- [MzScheme] Add an argument (-declaremodule) that generates
- code to correctly declare a primitive module extension.
- Patch submitted by Bruce Butterfield.
- 11/02/2002: cheetah (William Fulton)
- [Java] Added patch submitted by Michael Cahill to remove unused parameter
- warnings for the jenv and cls parameters. This patch also also allows one
- to use "void" in the jni typemap for any type without code being generated
- attempting to return a value.
- 10/29/2002: cheetah (William Fulton)
- [Java] Array handling is different. Arrays of classes are no longer wrapped
- with proxy arrays, eg wrapping
- class X {...};
- X foo[10];
-
- used to be wrapped with these Java getters and setters:
- public static void setFoo(X[] value) {...}
- public static X[] getFoo() {...}
- This approach is very inefficient as the entire array is copied numerous
- times on each invocation of the getter or setter. These arrays are now
- wrapped with a pointer so it is only possible to access the first array element
- using a proxy class:
- public static void setFoo(X value) {...}
- public static X getFoo() {...}
- Arrays of enums have also been similarly changed. This behaviour is now like the
- other SWIG language's implementation and the array library should be used to
- access the other elements. The original behaviour can be achieved using the
- macros and typemaps in arrays_java.i, for example:
- %include "arrays_java.i"
- JAVA_ARRAYSOFCLASSES(X)
- class X {...};
- X foo[10];
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 10/29/2002: cheetah (William Fulton)
- [Java] Two new typemaps javain and javaout for generating the proxy class
- and type wrapper class method calls to the JNI class. The new typemaps are
- really used for transforming the jstype (used in proxy class and type wrapper
- classes) to the jtype (used in the JNI class) and visa versa. A javain typemap
- is required whenever an in typemap is written and similarly javaout for an out
- typemap. An example is probably best to show them working:
- %typemap(javain) Class "Class.getCPtr($javainput)"
- %typemap(javain) unsigned short "$javainput"
- %typemap(javaout) Class * {
- return new Class($jnicall, $owner);
- }
- %inline %{
- class Class {};
- Class * bar(Class cls, unsigned short ush) { return new Class(); };
- %}
- The generated proxy code is then:
- public static Class bar(Class cls, int ush) {
- return new Class(exampleJNI.bar(Class.getCPtr(cls), ush), false);
- }
- Some new special variables have been introduced in order to use these typemaps.
- Here $javainput has been replaced by 'cls' and 'ush'. $jnicall has been replaced by
- the native method call, 'exampleJNI.bar(...)' and $owner has been replaced by 'false'.
- $javainput is analogous to the $input special variable. It is replaced by the parameter name.
- $jnicall is analogous to $action in %exception. It is replaced by the call to the native
- method in the JNI class.
- $owner is replaced by either true if %newobject has been used otherwise false.
- The java.swg file contains default javain and javout typemaps which will produce the same code
- as previously. This change is only of concern to those who have written their own typemaps as
- you will then most likely have to write your own javain and javaout typemaps.
- The javaout typemap also makes it possible to use a Java downcast to be used on abstract
- proxy base classes. See the Java documentation on dynamic_cast.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 10/24/2002: ttn
- [Methodology] Upgaded to libtool 1.4.3, presumably w/ better
- support for newish platforms (like MacOS X).
- 10/21/2002: ttn
- Fixed Runtime/Makefile.in bug -- thanks to Richard Calmbach.
- 10/18/2002: ttn
- Fixed typo in doh.h -- thanks to Max Horn.
- Version 1.3.16 (October 14, 2002)
- =================================
- 10/13/2002: beazley
- Fixed bug with %extend directive and %feature reported
- by William Fulton.
- 10/13/2002: beazley
- Added OpenVMS build directory (vms). Contributed by
- Jean-François Pieronne.
- 10/09/2002: cheetah (William Fulton)
- [Java] Added throws clause to the native functions in the JNI class.
- The throws clause is the same as the one generated for proxy functions
- and module class functions.
- 09/27/2002: beazley
- Fixed some problems with the %import directive and classes that
- were defined but not wrapped. Problem reported by Leslie Brooks,
- Gerry Woods, and others.
- 09/23/2002: cheetah (William Fulton)
- [Java] Some error checking added:
- 1) OutOfMemoryException check in the char * typemaps.
- 2) As SWIG treats pointers, references and passing by value all the
- same, it is possible to pass a NULL pointer to a function that expects
- an object passed by value or by reference. A NullPointerException is
- now thrown under this scenario.
- 09/20/2002: ttn
- [Methodology] Reworked "make clean" and "make install"
- to be more table driven.
- [Docs] Explain how to extend "make install" w/ extra-install.list.
- 09/15/2002: beazley
- Deprecation of the "ignore" typemap. The "ignore" typemap has
- been deprecated in favor of a generalization of the "in" typemap.
- To ignore an argument, use something like this instead:
- %typemap(in,numinputs=0) int *output (int temp) {
- $1 = &temp;
- }
- This change fixes a number of subtle bugs related to the interaction
- of the "in" and "ignore" typemaps (which were supposed to be
- mutually exclusive).
- The use of the numinputs argument is reserved for future expansion.
- Currently, values >1 will generate an error. However, future
- releases of SWIG may utilize that to support multi-input typemaps.
- %typemap(ignore) still works, but generates a warning message and is
- translated to %typemap(in,numinputs=0).
- *** POTENTIAL INCOMPATIBILITY ***
- *** NEW FEATURE ***
- 09/15/2002: beazley
- Fixed segmentation fault for unnamed structures. For example:
- typedef struct {
- } *blah;
- Reported by Roger Gibson.
- Note: we might be able to generate wrappers in special cases.
- 09/13/2002: beazley
- Minor modification to generated wrapper functions. Pointer arguments are now
- always set to an initial value of 0. Simplifies typemap writing and cleanup
- code (since you can rely on zero-value initialization). This also greatly
- reduces the need to ever write an "arginit" typemap.
- 09/12/2002: beazley
- Minor enhancement to smart-pointer support. If operator->()
- is part of an ignored base class like this,
- %ignore Bar;
- class Foo {
- public:
- int blah();
- };
- class Bar { /* Ignored */
- public:
- ...
- Foo *operator->();
- ...
- };
- class Spam : public Bar { };
- then methods from Foo are still available. For example,
- >>> s = Spam()
- >>> s.blah()
- 0
- >>>
- The only catch is that the operator->() itself is not available
- (since it wasn't wrapped). Therefore, there won't be any
- __deref__() operation unless it is explicitly added to Spam
- (either using %extend or just placing operator->() in the
- definition of Spam).
- 09/11/2002: ttn
- [Methodology] Reworked "make check" to be more table driven.
- [Docs] Docuemented methodology in Manual/Extending.html.
- 09/11/2002: ttn
- [Docs] Prefixed Manual/*.html with "<!DOCTYPE html ...>" to
- pander dotingly to (over-)sensitive editors.
- 09/10/2002: ttn
- [Guile] Converted Examples/guile/simple "make check"
- behavior to actually check execution results. Reduced
- iteration counts so that the test doesn't take too long.
- 09/10/2002: beazley
- SWIG-1.3.15 released.
- Version 1.3.15 (September 9, 2002)
- ==================================
- 09/09/2002: beazley
- Fixed nasty runtime type checking bug with subtypes and inheritance
- and templates.
- 09/09/2002: cheetah (William Fulton)
- [Java] Java exception classes for a method's throws clause can be generated by
- specifying them in a comma separated list in the throws attribute in any one
- of the following typemaps: in, out, check, freearg, argout and throws. A classic
- example would be to convert C++ exceptions into a standard Java exception:
- %typemap(throws, throws="java.io.IOException") file_exception {
- jclass excep = jenv->FindClass("java/io/IOException");
- if (excep)
- jenv->ThrowNew(excep, $1.what());
- return $null; // or use SWIG_fail
- }
- class file_exception {...};
- void open(const char *filename) throw(file_exception);
- The Java method will then be declared with a throws clause:
- public static void open(String filename) throws java.io.IOException {...}
- 09/08/2002: mkoeppe
- * [Guile] Improved the documentation system. The arglist no
- longer gets cluttered with type specification, making it
- more readable. (Also the ILISP function C-u M-x
- `arglist-lisp' RET works better this way.) The types of
- arguments are explained in an extra sentence after the
- arglist.
-
- There are now two documentation-related typemap arguments:
- %typemap(in, doc="$NAME is a vector of integers",
- arglist="$name") int *VECTOR { ... }
-
- The "arglist" texts of all arguments of a function make up
- its arglist in the documentation. The "doc" texts of all
- arguments are collected to make a sentence that describes
- the types of the arguments. Reasonable defaults are
- provided.
- As usual, $name is substituted by the name of the
- argument. The new typemap variable $NAME is like $name,
- but marked-up as a variable. This means that it is
- upper-cased; in TeXinfo mode ("-procdocformat texinfo") it
- comes out as @var{name}.
-
- The directives %values_as_list, %values_as_vector,
- %multiple_values now also have an effect on the
- documentation. (This is achieved via the new pragmas
- return_nothing_doc, return_one_doc, return_multi_doc.)
- Documentation has also improved for variables that are
- wrapped as procedures-with-setters (command-line switch
- "-emit-setters").
- * [Guile] Emit constants as _immutable_ variables. (This
- was broken recently.)
- 09/07/2002: mkoeppe
- [Guile] Updated the typemaps in list-vector.i.
- 09/07/2002: mkoeppe
- Short-circuit the typechecks for overloaded functions.
- (The changes in code generation are visible in the new
- testcase "overload_complicated".)
- 09/06/2002: cheetah (William Fulton)
- [Java] Solution for [ 596413 ]
- New typemap so that the Java proxy classes and type wrapper classes
- wrapper constructor modifier can be tailored by users. The default value is
- protected. Normally SWIG generates a constructor like this which can only
- be accessed within one package:
- protected Bar(long cPtr, boolean cMemoryOwn) {
- ...
- }
-
- If you are using SWIG across multiple packages or want to use this constructor
- anyway, it can now be accessed outside the package. To modify use for example:
- %typemap(javaptrconstructormodifiers) SWIGTYPE "public"
- to change to public for all proxy classes and similarly for all type wrapper classes:
-
- %typemap(javaptrconstructormodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] "public"
- 09/06/2002: cheetah (William Fulton)
- [Java] Added throws typemaps for the Java module. C++ exceptions get converted into
- java.lang.RuntimeException Java exceptions.
-
- Warning: This may change from java.lang.Runtime exception in the future.
- 09/05/2002: cheetah (William Fulton)
- [Java] Fix for variables declared as references.
- 09/05/2002: beazley
- Fixed [ 605162 ] Typemap local variables. Reported by Lyle Johnson.
- 09/05/2002: ljohnson (Lyle Johnson)
- [Ruby] More updates to the Ruby module documentation, including
- a new typemap example that demonstrates how to collect key-value
- pairs from an argument list into a Hash.
- 09/05/2002: beazley
- Fixed bug with template expansion and constructors.
- template<class T> class Foo {
- public:
- Foo<T>() { }
- };
- The extra <T> in the constructor was carried through in the
- name--causing runtime problems in generated modules.
- Reported by Jordi Arnabat Benedicto.
-
- 09/05/2002: mkoeppe
- [Guile] Support overloading.
- 09/04/2002: ljohnson (Lyle Johnson)
- [Ruby] Updated typemaps for long long and unsigned long long types
- to use Ruby 1.7 support for these types when available.
- 09/04/2002: ljohnson (Lyle Johnson)
- [Ruby] Added output typemaps for const reference to primitive
- types.
- 09/04/2002: mkoeppe
- [Guile] Fix pass-by-value typemaps. Reported by Arno
- Peters via Debian bugtracking (#156902), patch by Torsten
- Landschoff <torsten@debian.org>.
- 09/03/2002: samjam (Sam Liddicott)
- Better reference support.
- Functions that want a void** can take a NULL by reference and
- the void* will be made for you and then passed-by-reference
- Also all integer-class native types can be passed by reference
- where an int* or int& etc is needed
- 09/03/2002: beazley
- Changed the evaluation order of preprocessor macro arguments.
- Arguments are now expanded by the preprocessor *before* they
- are passed to macro expansion. This fixes a subtle expansion
- bug reported by Anthony Heading.
- 09/03/2002: beazley
- Fixed the file include order (again, apparently). See 2/27/99.
- 09/02/2002: beazley
- [Perl] Better exception handling support. Since Perl error handling
- relies on setjmp/longjmp, wrapper functions have been modified slightly
- to provide an extra block scope:
- XS(foo) {
- char _swigmsg[SWIG_MAX_ERRMSG] = "";
- const char *_swigerr = _swigmsg;
- {
- /* Normal wrapper function here */
- ...
- SWIG_croak("An error occurred\n");
- ...
- XSRETURN(argvi); /* Successful return */
- fail:
- /* cleanup code */
- }
- croak(_swig_err);
- }
- The macro SWIG_croak(x) sets the value of _swigerr to x and
- executes a "goto fail". The whole wrapper function is enclosed
- block scope to provide proper cleanup of C++ objects. Since
- croak executes a longjmp(), there is no way to properly reclaim
- resources if this executes in the same scope as the wrapper
- function.
- The _swigmsg[] variable is normally unused, but can be used
- to store small error messages using sprintf or snprintf. It
- has a capacity of at least 256 bytes (SWIG_MAX_ERRMSG).
-
- 09/02/2002: beazley
- [Tcl] Added better support for exceptions. Instead of returning TCL_ERROR,
- use the macro SWIG_fail to return with an error. This ensures that
- arguments are properly cleaned up. Exception specifiers are now
- handled by default.
- 09/02/2002: ljohnson (Lyle Johnson)
- [Ruby] The type-checking system for the Ruby module has had a flaw
- in that some types which should be considered equivalent
- weren't. This bug was best demonstrated by the inherit_missing.i
- test suite case, which defines a base class "Foo" that is
- subclassed by "Bar". The "Foo" class isn't actually wrapped (i.e.
- it's not directly accessible from Ruby) but we'd still like to be
- able to pass "Bar" instances to functions expecting Foos and have
- that work; it wasn't. The revised implementation (similar to that
- used for some other language modules) adds a new instance variable
- (__swigtype__) to each object that indicates its SWIG type;
- that is, each "Bar" instance will now have a string instance
- variable called "__swigtype__" whose value is "_p_Bar".
- Unless developers were taking advantage of this low-level
- implementation detail, they shouldn't notice any compatibility
- problems; nevertheless, I'm marking it as a "potential
- incompatibility".
- *** POTENTIAL INCOMPATIBILITY ***
- 09/01/2002: ljohnson (Lyle Johnson)
- [Ruby] Fixed SF Bug #603199.
- 08/08/2002: cheetah (William Fulton)
- [Java] Added OUTPUT, INPUT and INOUT typemaps in typemaps.i for C++
- references.
- 08/27/2002: mkoeppe
- [Guile] Fixed error in "lib_std_vector" testcase and
- compiler warning in "lib_cdata" testcase.
- 08/27/2002: ljohnson (Lyle Johnson)
- [Ruby] Added the "%mixin" directive, which allows the user to
- specify a comma-separated list of module names to mix-in to a
- class. So, for example, if you'd like to specify that Ruby's
- Enumerable module should be mixed-in to your class Foo, you'd
- write:
-
- %mixin Foo "Enumerable";
-
- or to specify that the modules Fee, Fie and Fo should be mixed
- in to Foo:
-
- %mixin Foo "Fee,Fie,Fo";
-
- *** NEW FEATURE ***
- 08/27/2002: ljohnson (Lyle Johnson)
- [Ruby] Modified the %alias directive so that multiple aliases
- can be specified for an instance method by using a comma-separated
- list of aliases.
- 08/27/2002: ljohnson (Lyle Johnson)
- [Ruby] Added "throw" typemaps for the Ruby module.
- 08/26/2002: beazley
- Two new command line options for printing dependencies.
- 'swig -M' lists all file dependencies. 'swig -MM' lists
- dependencies, but excludes files in the SWIG library.
- Example:
- % swig -M -python example.i
- example_wrap.cxx: \
- /u0/beazley/Projects/lib/swig1.3/swig.swg \
- /u0/beazley/Projects/lib/swig1.3/python/python.swg \
- example.i \
- example.h
- % swig -MM -python example.i
- example_wrap.cxx: \
- example.i \
- example.h
- *** NEW FEATURE ***
- 08/26/2002: beazley
- Fixed [ 597599 ] union in class: incorrect scope.
- Reported by Art Yerkes.
- 08/26/2002: beazley
- Fixed [ 600132 ] Default argument with namespace.
- Reported by Shibukawa Yoshiki.
-
- 08/24/2002: beazley
- Automatic C++ exception handling enabled for all language modules. This is
- pretty simple. If you have a class like this:
- class Foo {
- };
- class Bar {
- public:
- void blah() throw(Foo);
- }
- then the generated wrapper code looks like this:
- wrap_Bar_blah() {
- ...
- try {
- arg1->blah();
- }
- catch (Foo &_e) {
- /* "throw" typemap code inserted. $1 = _e */
- }
- catch (...) {
- throw;
- }
- }
- The "throw" typemap can be used to raise an error in the target
- language. It can do anything. Here is a very simple example:
- %typemap("throw") Foo {
- PyErr_SetString(PyExc_RuntimeError, "Foo exception");
- return NULL;
- }
- To make this work in each language module, simply define a few default
- "throw" typemaps for SWIGTYPE, SWIGTYPE *, int, const char *, and a
- few common exception types. That's all there is to it.
- Automatic exception handling can be disabled using -noexcept or
- setting the NoExcept global variable to 1.
- *** NEW FEATURE ***
- 08/23/2002: beazley
- [ Python ]
- Automatic translation of C++ exception specifications into error handling code.
- For example:
-
- class Foo {
- };
- class Bar {
- public:
- void blah() throw(Foo);
- }
- In this case, Foo is wrapped as a classic-style class (compatible
- with exception handling). Furthermore, you can write Python code
- like this:
- b = Bar()
- try:
- b.blah();
- except Foo,e: # Note use of exception class here!
- # Handle Foo error
- ...
- The object "e" in the exception handler is just a wrapped Foo
- object. Access it like a normal object.
- If an exception is not wrapped as a class, a RuntimeError
- exception is raised. The argument to this exception is
- the exception object. For example:
-
- class Bar {
- public:
- void blah() throw(int);
- }
- b = Bar()
- try:
- b.blah();
- except RuntimeError,e:
- print e.args[0] # Integer exception value
- Comments:
- - If a class is used as an exception, it *must* be wrapped
- as a Python classic-style class (new classes don't work).
- - Automatic exception handling is compatible with %exception.
- - Use -noexcept to turn off this feature.
- - The newly introduced "throw" typemap is used to raise
- Python errors (naturally).
- *** EXPERIMENTAL NEW FEATURE ***
- 08/23/2002: beazley
- Information from throw() specifiers is now stored in the parse
- tree. For example:
- class Foo {
- public:
- int blah() throw(spam,bar);
- }
- The stored information is fully corrected for namespaces and works
- with templates. Uses will follow.
-
- 08/22/2002: beazley
- Exception handling code is no longer applied to member access
- function. For example, in this code
- %exception {
- try {
- $action
- } catch(whatever) {
- ...
- }
- }
- class Foo {
- public:
- int x;
- ...
- }
- The exception handling code is not applied to accessor functions
- for Foo::x. This should reduce the amount of extra code
- generated.
- Caveat: Exception handling code *is* used when attributes are
- accessed through a smart-pointer or a synthesized attributed
- added with %extend is used.
- 08/22/2002: beazley
- Made more patches to hopefully eliminate problems when compiling SWIG
- as a 64-bit executable.
- 08/22/2002: beazley
- Fixed a bug with const reference members, variables, and static members.
- For example:
- class Foo {
- public:
- static const int &ref;
- };
- SWIG was trying to generate "set" functions which wouldn't compile.
- 08/21/2002: beazley
- Made the warning message for "Class X might abstract" off by default.
- Enable with -Wall.
- 08/21/2002: beazley
- Refined handling of const and non-const overloaded methods. If
- a class defines a method like this:
- class Foo {
- public:
- int bar(int);
- int bar(int) const;
- }
- Then the non-const method is *always* selected in overloading and
- the const method silently discarded. If running with -Wall, a warning
- message will be generated.
- 08/19/2002: beazley
- Better support for using declarations and inheritance. Consider this:
- class Foo {
- public:
- int blah(int x);
- };
- class Bar {
- public:
- double blah(double x);
- };
- class FooBar : public Foo, public Bar {
- public:
- char *blah(char *x);
- using Foo::blah;
- using Bar::blah;
- };
- Now SWIG wraps FooBar::blah as an overloaded method that uses all
- accessible versions of blah(). See section 15.2.2 in Stroustrup, 3rd Ed.
- SWIG also supports access change through using declarations. For example:
- class Foo {
- protected:
- int x;
- int blah(int x);
- };
- class Bar : public Foo {
- public:
- using Foo::x;
- using Foo::blah;
- };
- Caveat: SWIG does not actually check to see if declarations imported
- via 'using' are in the inheritance hierarchy. If this occurs, the
- wrapper code won't compile anyways---not sure it's worth worrying about.
-
- 08/18/2002: beazley
- Modified overloading dispatch to not include nodes with an "error" attribute.
- A language module can set this if a node couldn't be wrapped and you don't want
- it included in the dispatch function.
- 08/18/2002: beazley
- Enhancement to overloaded function dispatch. The dispatcher is now aware of
- inheritance relationships. For example:
- class Foo { };
- class Bar : public Foo { };
-
- void spam(Foo *f);
- void spam(Bar *b);
- In this case, the dispatcher re-orders the functions so that spam(Bar *b) is
- checked first---it is more specific than spam(Foo *f).
- 08/17/2002: beazley
- Added -Werror command line option. If supplied, warning messages are treated
- as errors and SWIG will return a non-zero exit code.
- 08/17/2002: beazley
- Fixed [ 596135 ] Typedef of reference can't compile. For example:
- typedef int &IntRef;
- void foo(IntRef i);
- SWIG-1.3.14 generated code that wouldn't compile.
- Version 1.3.14 (August 12, 2002)
- ================================
- 08/11/2002: mmatus
- Static const members initialized during declaration, and
- only them, ie:
- struct A
- {
- static const int a = 1 ; // this one
- static const int b; // not this one
- };
- are emitted like constants (equivalent to enums or
- explicit %constant).
-
- This is because they cannot be added directly to 'cvar'
- since they lack the needed reference (well, you can force
- them to have a real reference, but in an ugly way which
- goes completely again the original purpose of initialize
- them during declaration, you also have to deal with extra
- linking matters, and it take a while to figure out what is
- the problem and how to solve it).
-
- Please test it with your preferred target language, and
- not only the code generation, but really run the example
- in the test-suite (static-const-member-2.i) because the
- problem and the solution cannot be "fully" appreciated
- until you try to load the module and run it.
- In some target languages (python specially), this can
- produces a difference in the way that the static constant
- members 'a' and 'b' are internally wrapped. Hopefully,
- they still can be accessed in the same way.
- 08/11/2002: mmatus
- [python] Now static const members can be accessed in a more
- natural way, ie, if you have
- struct A
- {
- typedef unsigned int viewflags;
- static const viewflags forward_field = 0;
- static const viewflags backward_field;
- };
-
- now you can do:
- print A.backward_field
- and also
- a = A()
- print a.forward_field
-
- Note that if the static const members don't have an
- initializer (like backward_field), still you can access
- them in the same way in the python side, but the
- implementation is a quite different: backward_field will
- still appear in the cvar entity, and also, you are
- responsible to initialize it in some code unit, and link it
- properly. forward_field, by the other hand, will not
- appear in the cvar entity but only as a A member, similar
- to what happen with enum or %constant members.
- 08/11/2002: mmatus
- [python] Common code in the __setattr__/__getattr__ now
- goes to two "free" methods at the beginning of the proxy
- file, from where each class use it. This change reduces
- the size of the proxy file, specially if you wrap a lot of
- small classes in one module (up to 33% in some cases),
- making it faster to load too.
- 08/09/2002: beazley
- [Perl5] If a function that returns char * returns NULL,
- undef is returned to the Perl interpreter.
-
- 08/09/2002: beazley
- Fix to conversion operators and namespaces. For example:
- namespace ns {
- struct Foo { };
- struct Bar {
- operator Foo*();
- };
- }
- In the wrapper code, SWIG was using ->operator Foo*()
- when it should have been using ->operator ns::Foo*().
- Note: if using %rename with a conversion operator, you
- might have to do this:
- %rename(toFooPtr) ns::operator ns::Foo*();
- // ^^^^ note extra qualifier
- namespace ns {
- ...
-
- 08/09/2002: beazley
- [Python] Minor enhancement to 'const' variable declarations.
- Normally const declarations are wrapped as read-only variables
- accessible only through the cvar attribute (see SWIG.html for
- a discussion of why). However, in many programs, "const"
- declarations may just be constants---making the cvar. access
- awkward. To fix this, "const" declarations are now available
- both through cvar. and as a simple name. For example:
- const int FOO = 42;
- In Python:
- >>> print example.cvar.FOO
- 42
- >>> print example.FOO
- 42
- Note: There are cases where the value of a "const" variable
- might change. For example:
- char *const BAR = "Hello World";
- In this case, the pointer itself can not change, but the
- data being pointed to could be modified. In these situations,
- cvar.BAR should be accessed to obtained the current value.
- 08/08/2002: beazley
- [Python] Fixed generation of the proxy code (.py files) to more
- closely follow the order of declarations as they appear in
- the .i file. In the past, all of the class wrappers appeared
- first, followed by function stubs, inserted Python code, and
- other details.
- 08/08/2002: cheetah (William Fulton)
- [Java] Proxy method _delete() changed to delete(). There shouldn't ever
- be a wrapped function called delete() as it is a C++ keyword and there
- is no such thing as a member function in C.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- Backwards compatibility can be achieved by adding the function back in
- for all proxy classes:
- %typemap(javacode) SWIGTYPE %{
- public void _delete() {
- delete();
- }
- %}
- Java backwards compatibility summary
- ------------------------------------
- There are a number of changes that have been made in improving the Java module
- for ver 1.3.14. If at all possible change your code to take advantages of the
- improvements. If you were using proxy classes you may not notice any backwards
- compatibility issues. Here is an example which will help with most backwards
- compatibility problems where it is not possible to modify the code that uses
- the generated output:
- Replace:
- %module modulename
- With:
- %module (jniclassname="modulename") modulename;
- %typemap(javacode) SWIGTYPE %{
- public long getCPtr$javaclassname() {
- return swigCPtr;
- }
- public void _delete() {
- delete();
- }
- %}
- %pragma(java) jniclassclassmodifiers="public";
- The proxy constructors that took parameters (long cPtr, boolean cMemoryOwn)
- were public and are now protected. If you were making use of these then you'll
- have to modify your code and the best solution would be to use the new type
- wrapper classes.
- The other main areas are the pragmas and global variable wrapping. Replace
- the pragmas with one of the new directives or typemaps mentioned below and use
- %rename on the variables.
- If you were not using proxy classes, you will have to define a jstype typemap
- as well as a jtype typemap.
- 08/08/2002: cheetah (William Fulton)
- [Java] Fix for wrapping two dimension array variables.
- 08/07/2002: beazley
- [Python,Tcl]
- Object management now has a much better sense of ownership.
- Ownership bits is changed whenever an object is stored in a
- global variable or structure member. For example:
- struct Foo {
- int val;
- Foo *next;
- };
- Now in Python
- >>> f = Foo()
- >>> f.thisown
- 1
- >>> g = Foo()
- >>> g.next = f # Assign a pointer
- >>> f.thisown # Notice ownership change
- 0
- >>>
- This scheme is mostly a conservative heuristic designed to
- provide segmentation faults. It could cause a memory leak
- if ownership is changed unnecessarily. In this case, you can
- either write a typemap (that doesn't change ownership), or
- manually set the thisown attribute back to 1.
- 08/07/2002: beazley
- [Tcl] Major usability improvements to the object interface.
- Suppose you had code like this:
- struct Foo {
- int x;
- int spam();
- };
- void blah(Foo *f);
- In past versions of SWIG, you could create objects and use
- them like this:
- % Foo f
- % f configure -x 3
- % f spam
- 37
-
- The only problem is that if you tried to call blah(), it didn't
- work:
- % blah f
- Type Error. Expected _p_Foo
- %
- Instead, you had to do this:
- % blah [f cget -this]
-
- SWIG now automatically extracts the -this pointer, avoiding this
- problem. This means that saying "blah f" is perfectly legal and
- everything will still work normally.
- Caveat: Since pointer strings start with a leading underscore (_),
- don't use this in object names. For example:
- % Foo _f
- % blah _f # Potential crash
- Objects now have a -thisown attribute that shows the ownership.
- This builds upon the CHANGES 11/24/2001 entry.
- 08/07/2002: samjam, Sam Liddicott
- Properly implemented pointer system using php resources.
- Still need to work out whether or not to let script-users call
- destructors directly
- 08/06/2002: beazley
- Upgraded mzscheme module to support version 201 and added
- overloading support.
- 08/05/2002: beazley
- Added parsing support for extra grouping (in very limited cases).
- For example:
- typedef int (FuncPtr)(int, double);
- *** EXPERIMENTAL ***
-
- 08/03/2002: ljohnson (Lyle Johnson)
- [Ruby] Updates to typemaps.i as those done previously for Perl,
- Python and Tcl modules. Now supports reference types with INPUT,
- OUTPUT and INOUT typemaps.
- 08/02/2002: beazley
- New library file cstring.i added. Provides macros for
- manipulating char * data.
-
- 08/02/2002: beazley
- Deprecated the %new directive. Use %newobject instead. For
- example:
- %newobject foo;
- ...
- char *foo();
- %newobject follows the same rules as %rename, %ignore, %feature,
- etc.
- *** POTENTIAL INCOMPATIBILITY ***
- 08/01/2002: cheetah (William Fulton)
- [Java] New attribute 'jniclassname' for the module directive allows a way of
- changing the JNI class name from the default which uses the modulename with JNI
- appended after it.
- %module (jniclassname="name") modulename
- If 'name' is the same as 'modulename' then the module class name gets changed
- from 'modulename' to modulenameModule.
- 08/01/2002: beazley
- Fixed problem with file include order. Language specific
- directories should take precedence over generic directories.
- For example: "swig_lib/python/foo.i" should be loaded before
- "swig_lib/foo.i". I thought this was the case already, but
- apparently it has been broken for quite some time.
- 08/01/2002: beazley
- Added std_deque.i library file. Work in progress.
- 08/01/2002: beazley
- [Python,Tcl,Perl]
- Improvements to typemaps.i. INPUT/INOUT typemaps perform better
- error checking. Typemaps are now supplied for references like
- int &OUTPUT, double &INOUT, etc.
-
- 08/01/2002: beazley
- [Python] Deprecated the T_* and L_* typemaps in typemaps.i.
- Multiple return values are always placed in a tuple. Deprecated
- the BOTH typemaps. This is now INOUT (e.g., int *INOUT).
- *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
- 08/01/2002: beazley
- Deprecated the array.i, carray.i, and timer.i library files.
- 08/01/2002: beazley
- Deprecated the pointer.i library file. Use cpointer.i instead.
- *** POTENTIAL INCOMPATIBILITY ***
-
- 08/01/2002: cheetah (William Fulton)
- [Java] For consistency the global variable getters and setters use the JavaBean
- property design pattern like member variables always have. This means if you are
- wrapping a variable called foo, the getter is called getFoo() and the setter is
- called setFoo(). Before the recent changes to the Java module the getters and
- setters were called get_foo() and set_foo(). If you really want the original
- function names use the %rename directive like this: %rename(_foo) Foo;
- 07/31/2002: beazley
- Fixed casting problem with multiple inheritance. If you had this,
- class foo {};
- class bar : public foo {};
- class baz : public foo {};
- class spam : public bar, public baz {};
- then the wrappers wouldn't compile due to an ambiguous cast.
- Reported by Art Yerkes.
- 07/30/2002: cheetah (William Fulton)
- [Java] Due to new static typechecking all pointers held in a Java long are part of
- the internal workings and this pointer value in the Java long has become abstracted
- data. The type wrapper constructor and getCPtr() methods are as such protected.
- If you need to mess around with pointers from Java or for example create a proxy
- class or type wrapper class around a null pointer, add a function/constructor
- to do so with the %javacode typemap. You can also make getCPtr() public again with
- the %javagetcptr typemap.
- 07/30/2002: cheetah (William Fulton)
- [Java] Fixes for %typemap(ignore). In particular when ignoring the last parameter
- in a function. Also for all parameters in constructors. These mods have also fixed
- multi-argument typemaps for proxy classes - SF 581791.
- 07/30/2002: cheetah (William Fulton)
- [Java] %newobject (replacement for %new) now implemented for Java.
- 07/29/2002: beazley
- Fixed problem with typemap copies, %apply, and %clear inside
- C++ namespaces.
- 07/28/2002: cheetah (William Fulton)
- [Java] The JNI class now has package access as the class modifier
- has been changed from "public" to nothing. This has been done
- as this class is now more for the internal workings of SWIG since the module
- class has static type checking for all types.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- Backwards compatibility can be achieved by using the %jniclassclassmodifier
- pragma to change it back to "public".
- 07/28/2002: cheetah (William Fulton)
- [Java] Proxy/Shadow classes are generated by default. The -proxy and
- -shadow command line options are deprecated. If you want to use the
- low-level functional interface then use the new -noproxy commandline option.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 07/28/2002: cheetah (William Fulton)
- [Java] Remaining pragmas shakeup. These were the remaining pragmas and their
- new names where changed:
- modulebase
- modulecode
- moduleclassmodifiers
- moduleimport => moduleimports
- moduleinterface => moduleinterfaces
- The moduleimports works slightly differently to how the moduleimport pragma worked.
- Now it actually takes code which gets placed before the class definition so the
- whole import statement has to be given, for example:
- %pragma(java) moduleimports=%{
- import java.io.*;
- import java.math.*;
- %}
- The moduleinterfaces is slightly different to the old moduleinterface in that if
- more than one interface is required they must be comma separated in one use of
- the pragma, for example:
- %pragma(java) moduleinterfaces="Serializable, MyInterface"
- These last two pragmas are consistent with the javainterfaces and javaimports
- typemap.
- A similar set of pragmas has been introduced, namely:
- jniclassbase
- jniclasscode
- jniclassclassmodifiers
- jniclassimport
- jniclassinterface
- These work in the same way as their module counterparts. Note that previously
- the moduleXXX pragmas worked on the old module class which is now called the
- JNI class (the class with the native functions). The jniclassXXX pragmas now
- work on the new module class (the class that has all the global functions and
- global variable getters and setters when using proxy classes, plus all other
- remaining functions when using the low-level procedural interface).
- In summary the contents of the pragmas make up a class like this:
- <jniclassimports>
- <jniclassmodifiers> class modulename extends <jniclassbase> implements <jniclassinterfaces> {
- <jniclasscode>
- ... SWIG generated functions ...
- }
- }
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 07/28/2002: cheetah (William Fulton)
- [Java] Deprecated modulemethodmodifiers pragma and replaced with
- a better %feature based directive called %javamethodmodifiers.
- A useful example would be for synchronisation in multi-threaded apps:
- %javamethodmodifiers foo(int a) "public synchronized";
- Changes this function from the default ("public") to "public synchronized".
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 07/26/2002: beazley
- Several directives now allow optional configuration parameters.
- These include:
- %module(name="value", name="value", ...) modulename
- %import(name="value", ...) "filename.i"
- %extend(name="value", ...) classname {
- ...
- }
- These currently have no effect and are reserved for
- future expansion.
-
- 07/26/2002: beazley
- Enhancements to smart-pointer handling. SWIG only provides
- extra support for a smart-pointer if operator->() returns
- a proper pointer. For example:
- Foo *operator->();
- If operator->() returns an object by value or reference,
- then SWIG examines the returned object to see if it also
- implements operator->(). If so, SWIG chases operator->()
- until it can find one that returns a pointer. This allows
- cases like this to work:
- class Foo {
- public:
- void blah();
- };
- class Bar {
- ...
- Foo *operator->();
- ...
- };
- class Spam {
- ...
- Bar operator->();
- ...
- };
- For example:
- >>> s = Spam()
- >>> s.blah() # Invokes Foo::blah()
- The s.blah() call actually invokes:
- ((s.operator->()).operator->())->blah();
-
- 07/26/2002: beazley
- Fixed a bug with typedef and references. For example:
- typedef Foo & FooRef;
- FooRef blah();
- Previous versions of SWIG generated code that wouldn't
- compile.
- 07/25/2002: beazley
- Wrapping of static methods has been improved in proxy classes. In older
- versions of SWIG, if you had this:
- class Foo {
- public:
- static void bar();
- };
- The static method was only available as a function Foo_bar(). For example:
- >>> Foo_bar()
- Now, the static method can also be invoked through an instance like this:
- >>> f = Foo()
- >>> f.bar() # Invokes static method
- This works with all versions of Python. Additionally, for Python-2.2,
- the static method can be invoked as:
- >>> Foo.bar()
- The old-style function is still support for backwards compatibility. If
- you care about making your code across different versions of Python,
- either use Foo_bar() or access the method through an instance.
-
- 07/25/2002: beazley
- Changes to the Python module. Proxy classes now utilize new Python-2.2
- features including properties and static methods. However, these features
- are supported in a way that provides backwards compatibility with older
- Python versions. In other words, proxy classes work with all versions
- of Python and only use new features when running on Python-2.2.
- 07/25/2002: beazley
- Modified %extend so that overloaded methods can be added. For example:
- %extend Foo {
- void bar(int x) { };
- void bar(char *s) { };
- ...
- }
- This works with both C++ *and* C.
- 07/24/2002: cheetah (William Fulton)
- [Java] More new typemaps so that the Java proxy classes and type wrapper classes
- can be further tailored by users. These are the default code for generating the
- finalize() methods (proxy classes only) and the getCPtr() methods for proxy
- classes and type wrapper classes:
- %typemap(javafinalize) SWIGTYPE %{
- protected void finalize() {
- _delete();
- }
- %}
-
- %typemap(javagetcptr) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{
- public static long getCPtr($javaclassname obj) {
- return obj.swigCPtr;
- }
- %}
- The javagetcptr typemap will enable users to handle Java null by overriding
- this typemap - a requested feature.
- The -nofinalize commandline option has been deprecated. The javafinalize
- typemap is more powerful as it will allow the removal of the finalize methods
- for all or any one or more particular proxy class.
- 07/23/2002: cheetah (William Fulton)
- [Java] The getCPtrXXX() function has been changed to a static function and
- is now of the form:
- protected static long getCPtr(XXX obj) {...}
- This is a requested change which will allow Java null pointers to be used as null
- can be passed in for obj. However, to achieve this the appropriate code must be
- written using the new javagetcptr typemap directive.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- Backwards compatibility can be achieved by adding this function back in using the
- new javacode typemap:
- %typemap(javacode) SWIGTYPE %{
- // SWIG-1.3.12 and SWIG-1.3.13
- public long getCPtr$javaclassname() {
- return swigCPtr;
- }
- // SWIG-1.3.11 and earlier
- public long getCPtr() {
- return swigCPtr;
- }
- %}
- 07/23/2002: cheetah (William Fulton)
- [Java] New directive to control constant code generation - %javaconst.
- The default handling for handling constants is to get the value through
- a JNI call, eg
- #define YELLOW 5
- #define BIG 1234LL
- results in:
- public final static int YELLOW = modulename.get_YELLOW();
- public final static long BIG = modulename.get_BIG();
- Earlier versions of the Java module initialised the value using the C value:
- public final static int YELLOW = 5;
- public final static long BIG = 1234LL;
- This works in most cases, but the value for BIG won't compile as 1234LL is not
- valid Java code and this is one of the reasons why the default is now to get the
- values through a JNI call. The side effect is that these 'constants' cannot be used
- in switch statements. The %javaconst directive allows one to specify the
- way the constant value is initialised and works like other %feature
- directives, eg
- %javaconst(0); // all constants from this point on are initialised using the C value
- %javaconst(1) BIG; // just BIG initialised using JNI call (must be parsed before BIG is defined)
- 07/23/2002: beazley
- *** IMPORTANT CHANGES TO THE PYTHON MODULE ***
- (1) The Python module now enables shadow/proxy classes by default.
- This means that two files are always created by SWIG. For
- instance, if you have this:
- // file: foo.i
- %module foo
- ...
- Then swig generates two files "foo_wrap.c" and "foo.py".
- (2) The name of the low-level C extension module has been changed
- to start with a leading underscore. This means that you have
- to compile the module as follows:
- $ cc -c -I/usr/local/include/python2.2 foo_wrap.c
- $ cc -shared foo_wrap.o $(OBJS) -o _foo.so
- ^^^^
- note extra underscore
- This naming scheme is consistent with other Python modules that
- utilize extension code. For instance, the socket module consists
- of "_socket.so" and "socket.py". In previous versions of SWIG,
- the shared object file was named "foocmodule.so".
- (3) A new directive can be used to insert Python code into
- the corresponding .py file. For example:
- %pythoncode %{
- def foo():
- print "Hello World"
- %}
- This directive allows you to create modules as a mix of C and Python.
- Python code is seamlessly added to the module.
- (4) The -shadow command line option is deprecated. This is turned on
- by default.
- (5) To disable the generation of the extra python file, use the "-noproxy"
- command line option.
- *** POTENTIAL INCOMPATIBILITY ***
- This change will likely break the build environment of projects that
- utilize shadow classes. To fix this, you probably only need to
- change the name of the target .so file. For example, if you have
- Makefile information like this:
- TARGET = examplecmodule.so
- Just change it to:
- TARGET = _example.so
- *** DOCUMENTATION UPDATE ***
- The file Doc/Manual/Python.html has been updated to describe these changes.
- 07/23/2002: beazley
- Added -noextern option. If supplied, SWIG will not generate
- extra extern declarations. This is sometimes an issue on
- non-unix platforms.
- 07/23/2002: beazley
- Added a warning for ignored friend functions.
- 07/23/2002: beazley
- Fixed [ 574498 ] -proxy and %include "pointer.i" clash.
- Reported by David Creasy.
- 07/23/2002: beazley
- Fixed [ 576103 ] global destruction warning with shadow.
- Perl extensions should no longer report the warning
- "Use of uninitialized value during global destruction."
-
- when running with "perl -w". Reported by
- Brett Williams.
- 07/23/2002: beazley
- In C++ mode, SWIG now always defines namespace std. By default,
- it's empty. However, this will silence errors from programs
- that include statements such as "using namespace std;".
- This fixes Bug [ 584017 ] using namespace std generates error.
- Reported by Joseph Winston.
- 07/22/2002: beazley
- Added a new warning message for %apply. If you use %apply but no typemaps
- are defined, you will get a warning message. This should help with
- problems like this:
- %apply char *OUTPUT { ... };
- In old versions of SWIG, this silently did nothing. Now you get an error like this:
-
- file:line. Warning. Can't apply (char *OUTPUT). No typemaps are defined.
- 07/22/2002: cheetah (William Fulton)
- [Java] Started Java pragma deprecation. Replacements use %typemap based
- directives and enable proxy classes and the new type wrapper classes to be
- tailored in various ways. These are the new typemaps:
-
- %typemap(javabase) - base (extends) for Java class
- %typemap(javaclassmodifiers) - class modifiers for the Java class: default is "public"
- %typemap(javacode) - java code is copied verbatim to the Java class
- %typemap(javaimports) - import statements for Java class
- %typemap(javainterfaces) - interfaces (extends) for Java class
-
- And these are the %pragma directives being deprecated:
- allshadowbase
- allshadowclassmodifiers
- allshadowcode
- allshadowimport
- allshadowinterface
- shadowbase
- shadowclassmodifiers
- shadowcode
- shadowimport
- shadowinterface
-
- Note that it is possible to target a particular proxy class:
- %typemap(javaimports) Foo "import java.util.*"
- or a particular type wrapper class:
- %typemap(javaimports) double* "import java.math.*"
- Note that $javaclassname in these typemaps are substituted with either the proxy
- classname when using proxy classes or the SWIGTYPE class name.
- 07/18/2002: cheetah (William Fulton)
- [Java] Java module overhaul to implement static type checking of all
- types.
-
- 1) Changes when using Java Proxy classes
- ----------------------------------------
- Previously when wrapping global functions:
- class SomeClass{};
- void foo(SomeClass* s);
- SomeClass* bar();
- The native method prototypes used a long for pointers and looked like this:
- public class modulename {
- ...
- public final static native void foo(long jarg1);
- public final static native long bar();
- }
- and unlike member functions of a C++ class there was no wrapper around the native calls
- to make the use of them more user friendly. They would be used from Java like this:
- SomeClass s = new SomeClass(modulename.bar(), false);
- modulename.foo(s.getCPtrSomeClass());
- Note that the following will have the same effect, but then it would not have
- been possible to call any proxy member functions in SomeClass:
- long s = modulename.bar();
- modulename.foo(s);
- Now wrapper functions are generated:
- public class modulename {
- public static void foo(SomeClass s) {
- // calls the native function
- }
- public static SomeClass bar() {
- // calls the native function
- }
- }
- Which means these functions can now be used more naturally with proxy classes:
- SomeClass s = modulename.bar();
- modulename.foo(s);
- 2) Changes when not using Java Proxy classes
- --------------------------------------------
- The so called low-level interface was rather low-level indeed. The
- new static type checking implementation makes it less so but it remains a
- functional interface to the C/C++ world. Proxy classes are the obvious way to use
- SWIG generated code, but for those who want a functional interface all non-primitive
- types now have a simple Java class wrapper around the C/C++ type. Pointers and
- references to primitive types are also wrapped by type wrapper classes. The type
- wrapper classnames are based on the SWIG descriptors used by the other language
- modules. For example:
- C/C++ type Java type wrapper class name
- ---------- ----------------------------
- int* SWIGTYPE_p_int
- double** SWIGTYPE_p_p_double
- SomeClass* SWIGTYPE_p_SomeClass
- SomeClass& SWIGTYPE_p_SomeClass
- SomeClass SWIGTYPE_p_SomeClass
- Note that everything wrapped by SWIG is accessed via a pointer even when wrapping
- functions that pass by value or reference. So the previous example would now be
- used like this:
- SWIGTYPE_p_SomeClass s = example.bar();
- example.foo(s);
- Note that typedefs that SWIG knows about are resolved, so that if one has
- class Foo{};
- typedef Foo Bar;
- then any use of Bar will require one to use SWIGTYPE_p_Foo;
- Some considerations:
- Make sure you make a firm decision to use either proxy classes or the functional
- interface early on as the classnames are different.
- 3) Pointers and non-parsed types
- --------------------------------
- Sometimes SWIG cannot generate a proxy class. This occurs when the definition of
- a type is not parsed by SWIG, but is then used as a variable or a parameter.
- For example,
- void foo(Snazzy sds);
- If SWIG has not parsed Snazzy it handles it simply as a pointer to a Snazzy.
- The Java module gives it a type wrapper class around the pointer and calls it
- SWIGTYPE_p_Snazzy. In other words it handles it in the same manner as types are
- handled in the low-level functional interface. This approach is used for all
- non-proxy classes, eg all pointer to pointers and pointers to primitive types.
- 4) Backwards compatibility
- -----------------------
- Backwards compatibility is not an issue if you have been using proxy classes and
- no global variables/functions. Otherwise some changes will have to be made.
- The native methods still exist but they are now in a JNI class, which is called
- modulenameJNI. As this class is really part of the internal workings,
- it should not be required so the class has become protected. Some pragmas/directives
- will hopefully be added to help with backwards compatibility.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 07/18/2002: beazley
- Modified wrapping of uninstantiated templates returned by
- value. Just to be safe, they are now wrapped by SwigValueWrapper<>
- just in case they don't define a default constructor. This
- would be used if you had code like this
- Foo<int> blah();
- void moreblah(Foo<int> x);
- but you didn't instantiate Foo<int> using %template.
- We should probably add a warning for this.
- 07/17/2002: beazley
- Added an error check to detect shadowed template paramaters.
- For example:
- template<class T> class Foo {
- public:
- int T;
- };
- This results in an error, not a warning. This warning is
- also needed to fix some rather insidious problems like
- this:
- struct T {
- int blah;
- };
- template<class T> class Foo {
- public:
- typedef T Traits; // Which T is this????
- };
- In this case, the template parameter T shadows the outer
- structure (which is what you want).
- 07/16/2002: beazley
- Improved support for templates with integer arguments. SWIG is
- much more aware of situations such as this:
- const int Size = 100;
- %template(Foo100) Foo<100>;
- void bar(Foo<Size> *x); // Knows that Foo<Size> is the same as Foo<100>;
- 07/15/2002: beazley
- Fixed bug with %feature/%ignore/%rename and namespaces.
- For example:
- %ignore Foo::Bar
- namespace Foo {
- class Bar {
- ...
- };
- }
- Reported by Marcelo Matus.
- 07/09/2002: beazley
- Added parsing support for constructors that try to catch
- exceptions in initializers. For example:
- class Foo {
- Bar b;
- public:
- Foo(int x) try
- : b(x) { ... }
- catch(int) {
- ...
- }
- }
- This has no effect on the generated wrappers. However, the try and catch
- parts of the declaration are ignored. See Stroustrup, 3rd Ed, section
- 14.4.6.1 for details.
-
- 07/06/2002: beazley
- Fixed bug in template symbol table management. This fixes
- two bugs. First, mixing abstract methods, templates, and
- inheritance no longer generates a failed assertion.
-
- template <class T>
- class A {
- public:
- virtual void foo() = 0;
- };
-
- template <class T>
- class B : public A<T>
- {
- };
- %template(A_int) A<int>;
- %template(B_int) B<int>;
- This fix also fixes a subtle problem with default values and
- templates. For example:
- template <class C>
- struct B {
- typedef unsigned int size_type;
- static const size_type nindex = static_cast<size_type>(-1);
- void foo(size_type index = nindex);
- };
- Bugs reported by Marcelo Matus.
- 07/05/2002: ljohnson (Lyle Johnson)
- [Ruby] Changed the definition of the SWIG_ConvertPtr() function
- for the SWIG/Ruby runtime support so that it looks like the
- Python version. If the last argument (flags) is non-zero,
- SWIG_ConvertPtr() will raise an exception for type mismatches
- as before. If flags is zero, this function will return -1 for
- type mismatches without raising an exception.
- *** POTENTIAL INCOMPATIBILITY FOR RUBY MODULE ***
- 07/04/2002: beazley
- Overloaded functions/methods/constructors now work in many language
- modules. The support is completely transparent--just call the
- function normally and SWIG will dispatch to the correct implementation.
- There are a variety of issues associated with this. Please refer
- to the overloading section of Doc/Manual/SWIGPlus.html for details.
- *** NEW FEATURE ***
-
- 07/04/2002: beazley
- Fixed a bug with namespaces, enums, and templates. For example:
- namespace hello {
- enum Hello { Hi, Hola };
-
- template <Hello H>
- struct traits
- {
- typedef double value_type;
- };
-
- traits<Hi>::value_type say_hi()
- {
- return traits<Hi>::value_type(1);
- }
- }
- SWIG wasn't generating wrappers that properly qualified
- traits<Hi>. Reported by Marcelo Matus.
- 06/30/2002: beazley
- Supplied array variable typemaps for Tcl module. If you have a
- variable like this:
- int foo[10];
- then a set function like this is generated:
- void foo_set(int *x) {
- memmove(foo,x,10*sizeof(int));
- }
- 06/30/2002: beazley
- New %fragment directive. When writing typemaps, it can be easy to
- get carried away and write a lot of code. However, doing so causes
- tremendous code bloat. A common way to solve this is to write
- helper functions. For example:
- %{
- void some_helper_function() {
- ...
- }
- %}
- %typemap(in) type {
- some_helper_function(...);
- }
- The only problem with this is that the wrapper file gets polluted
- with helper functions even if they aren't used. To fix this,
- a new fragment directive is available. For example:
- (corrected typo in line below - 06/26/2008)
- %fragment("type_header","header") %{
- void some_helper_function() {
- ...
- }
- %}
- %typemap(in, fragment="type_header") type {
- some_helper_function(...);
- }
- In this case, the code fragment is only emitted if the typemap is
- actually used. A similar capability is provided for declaration
- annotation and the %feature directive. For example:
- %feature("fragment","type_header") SomeDeclaration;
- The first argument to %fragment is the fragment name. The second argument
- is the file section where the fragment should be emitted.
- The primary use of this directive is for writers of language modules
- and advanced users wanting to streamline typemap code.
- *** EXPERIMENTAL NEW FEATURE ***
- 06/30/2002: beazley
- Supplied memberin typemaps for all arrays in an attempt to eliminate
- confusion about their use.
- 06/29/2002: beazley
- Experimental support for smart-pointers. When a class defines
- operator->() like this
- class Foo {
- ...
- Bar *operator->();
- ...
- };
- SWIG locates class Bar and tries to wrap its member variables and
- methods as part of Foo. For example, if Bar was defined like this:
- class Bar {
- public:
- int x;
- int spam();
- };
- You could do this (in the target language):
- f = Foo()
- f.x = 4 # Accesses Bar::x
- f.spam() # Accesses Bar::spam
- The primary use of this feature is to emulate the behavior of C++
- smart-pointers---which allow attributes to accessed transparently
- through operator->.
- This feature is supported automatically in SWIG---no special directives
- are needed. To disable this behavior. Use %ignore to ignore
- operator->.
- *** NEW FEATURE ***
- 06/26/2002: beazley
- Deprecated the %except directive. %exception should be used instead.
- 06/25/2002: beazley
- Major cleanup of the modules directory. Eliminated most
- header files, consolidated module code into single files.
- 06/24/2002: beazley
- Reworked the instantiation of language modules. All language
- modules must now define a factory function similar to this:
- extern "C" Language *
- swig_python(void) {
- return new PYTHON();
- }
- This function is then placed in a table and associated with
- a command line option in swigmain.cxx.
- This approach has a number of benefits. It decouples the
- SWIG main program from having to know about the class
- definitions for each module. Also, by using a factory
- function, it will be easier to implement dynamic loading
- of modules (simply load the file and invoke the factory
- function).
- 06/24/2002: beazley
- Fixed syntax error for reference conversions. For example:
- operator Foo &();
- 06/24/2002: beazley
- Fixed syntax error for operator new[] and operator delete[].
- 06/24/2002: beazley
- Fixed code generation problem for constants and default arguments
- involving templates.
- 06/19/2002: ljohnson (Lyle Johnson)
- [Ruby] Fixed a bug for the '-feature' command line argument;
- that setting was effectively being ignored and so the feature
- name was always set equal to the module name.
- 06/17/2002: beazley
- Fixed problems with static members and enums in templates.
- Version 1.3.13 (June 17, 2002)
- ==============================
- 06/16/2002: beazley
- Fixed a bug with __FILE__ expansion in the preprocessor. On Windows,
- the backslash (\) is now converted to (\\) in the string literal
- used for __FILE__. Reported by Steve Glaser.
- 06/14/2002: beazley
- Fixed warning message about 'name private in this context'. The
- warning is only generated for public methods. Reported by
- Scott Michel.
-
- 06/14/2002: beazley
- Fixed some problems related to template instantiation
- and namespaces. When SWIG expands a template, it does
- so with fully resolved types. For example, if you have this:
- template<class T> class foo { };
- typedef double Double;
- %template(foo_d) foo<Double>;
- then, it is handled as foo<double> in the typesystem.
- This fixes a number of subtle problems with inheritance
- and templates.
- 06/14/2002: ljohnson (Lyle Johnson)
- [Ruby] Added missing bool typemaps for INPUT, OUTPUT and
- INOUT in Lib/ruby/typemaps.i.
- 05/29/2002: cheetah (William Fulton)
- [Java] Fix for a couple of broken pragmas.
- 05/29/2002: cheetah (William Fulton)
- Fix for unnecessary cast when wrapping global variable where
- the type is not parsed by SWIG - Java variables example
- failure as reported by Larry Virden.
- 06/10/2002: beazley
- Modified %template to allow for empty instantiations.
- %template() foo<int,int>;
- This registers foo<int,int> with the type system, but
- doesn't wrap it (same as %ignore). This may only be a
- temporary measure. SWIG might be able to automatically
- instantiate templates in certain cases.
- 06/10/2002: beazley
- Fixed function prototype problems with Tcl 8.4
- 06/09/2002: beazley
- Fixed problem with templates and location of base classes.
- This one is a little mind-bending, but here is an example
- that illustrates:
-
- template <class ArgType, class ResType>
- struct traits
- {
- typedef ArgType arg_type;
- typedef ResType res_type;
- };
-
- template <class ArgType, class ResType>
- struct Function
- {
- };
-
- template <class AF, class AG>
- struct Class : Function<typename traits<AF, AG>::arg_type,
- typename traits<AF, AG>::res_type>
- {
- };
- %template(traits_dd) traits <double, double>;
- %template(Function_dd) Function <double, double>;
- %template(Class_dd) Class <double, double>;
- In this example, the base class of 'Class' is determined from
- the Function template, but the types are obtained through typedefs.
- Because of this, SWIG could not locate the wrapped base class
- (Function<double,double>). Should be fixed in 1.3.13 even
- though I can think of a million other things that might
- also be broken.
- 06/07/2002: beazley
- Fixed a problem with conversion operators. If you had an
- operator like this,
- operator double() const;
- SWIG was ommitting the "const" qualifier. This affected
- %rename and other directives. Reported by Zhong Ren.
- 06/07/2002: beazley
- Lessened the strictness of abstract class checking. If
- you have code like this:
- class Foo {
- public:
- virtual int method() = 0;
- };
- class Bar : public Foo {
- public:
- Bar();
- ~Bar();
- };
- SWIG will go ahead and generate constructor/destructors
- for Bar. However, it will also generate a warning message
- that "Bar" might be abstract (since method() isn't defined).
- In SWIG-1.3.12, SWIG refused to generate a constructor at all.
- 06/07/2002: beazley
- Change to %template directive. If you specify something like this:
- %template(vi) std::vector<int>;
- It is *exactly* the same as this:
-
- namespace std {
- %template(vi) vector<int>;
- }
- SWIG-1.3.12 tried to instantiate the template outside of the namespace
- using some trick. However, this was extremely problematic and full
- holes. This version is safer.
- 06/07/2002: beazley
- Fixed bug with scope qualification and templates. For example:
- A<B::C>::DD
- Before, this was separated as scopes A<B, C>, and DD. Fixed now.
- 06/06/2002: beazley
- Allow the following syntax:
-
- class A { };
- struct B : A { ... };
- A base class without a specifier is assumed to be public for a struct.
-
- 06/06/2002: beazley
- Fixed syntax error with template constructor initializers.
- Reported by Marcelo Matus.
- 06/06/2002: beazley
- Fixed bug with default template arguments.
- Reported by Marcelo Matus.
- 06/05/2002: beazley
- Fixed subtle problems with %rename directive and template
- expansion.
- Code like this should now work:
- %rename(blah) foo<double>::method;
- ...
- template<class T> class foo {
- public:
- void method();
- };
- %template(whatever) foo<double>;
- 06/05/2002: beazley
- Resolved some tricky issues of multi-pass compilation and
- and inheritance. The following situation now generates
- an error:
- class Foo : public Bar {
- ...
- };
- class Bar {
- ...
- };
- The following code generates a warning about incomplete classes.
- class Bar;
- class Foo : public Bar { };
- The following code generates a warning about an undefined class.
- class Foo : public Bar { }; // Bar undefined
- This fixes a failed assertion bug reported by Jason Stewart.
- 06/05/2002: ljohnson
- [Ruby] Added a warning message for the Ruby module about the lack
- of support for multiple inheritance. Only the first base class
- listed is used and the others are ignored. (Reported by Craig
- Files).
-
- 06/03/2002: beazley
- Fixed a bug with struct declarations and typedef. For example:
- typedef struct Foo Foo;
- struct Foo {
- ...
- };
- A few other subtle struct related typing problems were
- also resolved.
- Version 1.3.12 (June 2, 2002)
- =============================
-
- 05/30/2002: beazley
- Fixed problem related to forward template class declarations and
- namespaces. Bug reported by Marcelo Matus.
- 05/30/2002: beazley
- Added 'make uninstall' target. Contributed by Joel Reed.
- 05/29/2002: beazley
- Fixed rather insidious bug with %rename, %feature and template specialization.
- For example:
- %exception vector::__getitem__ {
- ... some exception ...
- }
- template<class T> class vector {
- ...
- T __getitem__(int index); // Fine
- ...
- };
- template<> class vector<int> {
- ...
- T __getitem__(int index); // Oops.
- ...
- };
- Now, the %exception directive (and other features) should correctly apply to
- both vector and specializations.
- 05/29/2002: beazley
- Subtle changes to %template() directive. Template arguments are now
- reduced to primitive types in template matching. For example:
- template<class T> class vector<T *> {
- ... partial specialization ...
- }
- typedef int *IntPtr; // Gross typedef
- // Gets the above partial specialization
- %template(vectorIntPtr) vector<IntPtr>;
- This change is extremely subtle, but it fixes a number of potential
- holes in Luigi's STL library modules. For example:
- typedef int Integer;
- %template(vectori) vector<int>;
- 05/29/2002: beazley
- Fixed rather insidious typemap bug related to const. const
- was being discarded through typedefs.
- 05/29/2002: ljohnson (Lyle Johnson)
- [Ruby] Added input typemaps for const references to primitive
- types (in Lib/ruby/ruby.swg).
- 05/29/2002: cheetah (William Fulton)
- [Java] The java arrray support functions are enclosed by
- a SWIG_NOARRAYS #define. Useful if not using arrays and
- it is desirable to minimise the amount of compiled code.
- 05/29/2002: cheetah (William Fulton)
- [Java] Enums were not renamed when using %name or %rename
- fix.
- 05/28/2002: ljohnson
- [Ruby] Modified the name of the wrapper functions for the
- "new" singleton method and "initialize" instance method for
- consistency with the other language modules. The wrapper name
- for the function that implements "new" is alloc_classname and
- the wrapper name for the function that implements "initialize"
- is new_classname.
- 05/27/2002: beazley
- Changes to runtime. Pointer conversion/creation functions
- now almost always have an extra "flags" argument. For
- example:
- SWIG_ConvertPtr(obj, void **, swig_type_info *ty, int flags);
- ^^^^^^^^^^
- This extra parameter is reserved for future expansion and will
- be used for more control over pointers in future versions.
- 05/27/2002: beazley
- Fix for C++ classes with private assignment operators. It
- is now possible to safely return objects like this by value.
- Caveat: the class must provide a copy constructor.
-
- 05/26/2002: beazley
- -proxy option added to many language modules. This is the
- same as -shadow. We are merely changing terminology.
-
- 05/26/2002: beazley
- [perl] Fixed some inconsistencies in the -package option.
- -package merely sets the package name to be used on the
- wrappers. It does not change the name of the shared library
- file or the name of the generated .pm file. This was
- broken at some point, but works again now.
- 05/25/2002: beazley
- [perl] Fixed [ 475452 ] memory leak in return-by-value.
- Problem related to static member variables returning newly
- allocated objects. Reported by Roy Lecates.
-
- 05/25/2002: beazley
- [perl] Fixed [ 513134 ] %BLESSEDMEMBERS isn't always right.
- Reported by Fleur Diana Dragan.
- 05/25/2002: beazley
- Fixed [ 540735 ] -importall and the -I option.
- 05/25/2002: beazley
- [guile] Fixed [ 532723 ] Default arg for char* can SegV.
- Error in guile module. Reported by Brett Williams.
- 05/25/2002: beazley
- Subtle change to typemap application code. The "freearg"
- typemap must exactly match up with the "in" or "ignore"
- typemap. For example:
- %typemap(in) (char *data, int len) { ... }
- %typemap(freearg) char *data { ... }
- void foo(char *data, int len);
- In this case, the "in" typemap is applied, but the
- freearg typemap is not. This is because the freearg
- typemap doesn't match up with the input argument sequence.
- 05/25/2002: beazley
- Fixed [ 548272 ] Default argument code missing braces.
- Reported by Brett Williams.
- 05/25/2002: beazley
- Fixed [ 547730 ] SwigValueWrapper needed for constructors.
- Reported by William Fulton.
- 05/25/2002: beazley
- Undefined identifiers now evaluate to 0 when evaluating
- preprocessor expressions. For example:
- #if !FOO
- ...
- #endif
-
- where FOO is undefined or set to some non-numeric value.
- Fixes [ 540868 ] #if defined whatever - not parsed.
- Reported by Adam Hupp.
-
- 05/24/2002: beazley
- SWIG now ignores the C++ 'export' keyword.
- 05/23/2002: beazley
- Some refinement of type-name mangling to account for pointers, arrays,
- references, and other embedded type constructs.
- 05/23/2002: beazley
- Initial attempt at supporting template partial specialization. At
- the very least, it is parsed and the classes are stored. Matching
- of instantiations to specialized version is more limited and based on
- the SWIG default typemap rules:
- SWIGTYPE *
- SWIGTYPE []
- SWIGTYPE &
- Now, why in the world would you want to use this feature? Other
- than allowing for slightly modified class APIs, this capability is
- primarily used to provide advanced wrapping support for STL-like
- objects. It can also be mixed with typemaps. Here is an example:
- /* Generic version */
- template<class T> class vector {
- %typemap(in) vector<T> * {
- // A container of objects
- }
- };
- /* Partial specialization (pointers) */
- template<class T> class vector<T *> {
- %typemap(in) vector<T> * {
- // A container of pointers to objects.
- }
- };
- /* Specialization (integers). */
- template<> class vector<int> {
- %typemap(in) vector<int> * {
- // A container of integers.
- }
- };
- *** EXPERIMENTAL FEATURE ***
-
- 05/23/2002: beazley
- Enhancement to typemaps. Normally, typemap variables are
- renamed to avoid conflicts. For example:
- %typemap(in) int * (int temp) {
- $1 = &temp;
- }
- This results in code that creates and uses variables "temp1","temp2",
- "temp3" and so forth depending on how many times the typemap is used.
- Sometimes you want a single variable instead. To do that, using
- the following naming scheme:
- %typemap(in) int *(int _global_temp) {
- }
-
- Is this case, a single variable _global_temp is emitted in the
- wrapper functions. It is shared across all typemaps. Repeated
- typemaps do not replicate the variable---they use the first one
- emitted.
- *** NEW FEATURE ***
-
- 05/23/2002: beazley
- Minor enhancement to typemaps. If you have this code,
- %typemap(in) Foo (int somevar = 3) {
- ...
- }
- the default value for somevar is now emitted into the wrapper code.
- 05/22/2002: beazley
- Fixed %extend to be better behaved in namespaces. If you have code
- like this:
- namespace foo {
- struct bar {
- %extend {
- void blah();
- };
- };
- }
-
- SWIG matches the blah() method to a C function named
- void foo_bar_blah(foo::bar *self).
- This is consistent with the non-namespace version.
- Bug reported by Marcelo Matus.
- 05/22/2002: beazley
- New library files: cpointer.i, carrays.i, cmalloc.i. These
- provide access to C pointers and memory allocation functions.
- See Doc/Manual/Library.html for details.
- 05/22/2002: cheetah (William Fulton)
- [Java] C type char no longer maps to Java type byte, but to Java type char.
- It is now treated as a character rather than a signed number. This fits in
- with the other language modules and is a more natural mapping as char* is
- mapped as a string of characters. Note that the C signed char type is still
- mapped to a Java byte.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 05/22/2002: cheetah (William Fulton)
- [Java] Improved constants wrapping. Constants (#define and %constant) values
- are now obtained through a JNI call. Previously the value was compiled as
- Java code, but this didn't work for all cases, eg #define 123ULL.
- 05/22/2002: beazley
- Fixed bogus error message with %extend directive and C++
- access specifiers. Reported by Marcelo Matus.
- 05/22/2002: beazley
- Namespaces and enums now work correctly. For example:
- namespace Foo {
- enum Bar { A, B };
- }
- Bug reported by Marcelo Matus.
- 05/21/2002: beazley
- The %types directive can now be used to specify inheritance relationships
- in the runtime type system. For example,
- %types(Foo = Bar);
- specifies that Foo isa Bar. Using this is potentially quite dangerous.
- However, this is useful in certain cases (and in the SWIG library).
-
- 05/20/2002: beazley
- %nodefault and %makedefault directives now require a trailing semicolon.
- For example:
- %nodefault;
- ...
- %makedefault;
- In addition both directives can take a class name. For example:
- %nodefault Foo;
- class Foo { /* No default constructor/destructor */
- };
- class Bar { /* Default constructor/destructor generated */
- };
- *** POTENTIAL INCOMPATIBILITY ***
- If you don't use the trailing semicolon, things will mysteriously break.
- 05/20/2002: beazley
- More improvements to type system handling. SWIG now correctly handles
- template names and parameters in a namespace. For example:
- namespace foo {
- template<class T> class bar { };
- typedef int Integer;
- void blah(bar<Integer> *x);
- };
- In the generated code, all of the typenames are properly qualified.
- 05/17/2002: cheetah (William Fulton)
- [Java] deprecated broken -jnic and -jnicpp commandline options. The C or C++
- JNI calling convention is now determined from the -c++ commandline option.
- 05/16/2002: cheetah (William Fulton)
- [Java] The JCALL macros which exist so that the same typemaps can be used
- for generating both the C and C++ JNI calling conventions no longer appear
- in the generated code. This is because the output is now passed through the
- SWIG preprocessor which does the macro expansion for either C or C++ (depending
- on whether -c++ is passed on the SWIG commandline).
- The generation of the functions used in the array typemaps have been adjusted
- to take account of this. The side effect is that any typemaps which contained
- JCALL macros within %{ %} brackets will have to be moved within {} brackets
- so that the SWIG preprocessor can expand the macros.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 05/13/2002: beazley
- Class templates may now be used as template parameters. For example:
- template<class T, template<class> class C> class Foo {
- ...
- };
- template<class T> class Bar {
- ...
- };
- %template(Fooi) Foo<int, Bar>;
-
- SWIG doesn't really do anything special with this---it's just
- another way of specifying a template parameter.
-
- 05/13/2002: beazley
- Minor refinement of template support. Template parameter names are no longer
- required for types. For example:
- template<bool> class Foo {
- };
- Obviously, names are required for template<class T>;
- 05/12/2002: beazley
- New macro expansion in typemaps. The sequence:
- $descriptor(type)
- Will expand into the SWIG type descriptor structor for
- the given type. Type may be any abstract datatype.
- For example:
- $descriptor(int *)
- $descriptor(int (*)(int,double))
- $descriptor(vector<int> *)
- Caveat: It is *NOT* currently legal to use other typemap
- substitution variables in the macro. For example
- $descriptor($1_type).
- The primary purpose of this modification is to better
- support typemaps for container objects or to allow typemaps
- that might be performing type conversions.
- *** NEW FEATURE ***
- 05/11/2002: beazley
- The wrapping of references to primitive types has been
- changed as follows:
- Arguments of type 'const primitive &' are now passed
- by value as opposed to pointers. Return values of
- type 'const primitive &' are returned as values instead of
- pointers.
- 'primitive' is any one of int, short, long, long long,
- char, float, double, bool (as well as unsigned variants).
-
- This change is being made to better support C++ wrapping--especially
- code that makes use of templates and the STL.
-
- 05/11/2002: beazley
- The %template directive can now be used to access templates
- in a namespace. For example:
- namespace std {
- template<class T> class complex {
- T re, im;
- public:
- complex(T _r = T(), T _i = T()) : re(_r), im(_i) { }
- T real() { return re; }
- T imag() { return im; }
- };
- }
- %template(complex) std::complex<double>;
- Note: There are some very subtle namespace/symbol table
- management issues involved in the implementation of this.
- It may not work in certain cases.
- 05/10/2002: beazley
- Member template constructor support added. For example:
- template<typename _T1, typename _T2>
- struct pair {
- _T1 first;
- _T2 second;
- pair() : first(_T1()), second(_T2()) { }
- template<class _U1, class _U2> pair(const pair<_U1,_U2> &x);
- };
- To instantiate the template, use %template and %extend.
- For example, this expands the constructor into a default
- copy constructor:
- %extend pair {
- %template(pair) pair<_T1,_T2>;
- }
-
- Highly experimental. Other uses may be broken.
- 05/10/2002: beazley
- The %extend (%addmethods) directive no longer works unless
- it appears in the public section of a class. An error
- message is now generated (as opposed to a segmentation fault).
- 05/09/2002: beazley
- New %warnfilter() directive. This directive attaches a warning
- filter to specific declarations and has the same semantics as
- %rename, %ignore, %feature, and so forth. For example:
- %warnfilter(501) foo; // Suppress overloaded warning
- int foo(int);
- int foo(double);
- or
- %warnfilter(501) Object::foo(double);
- class Object {
- public:
- int foo(int);
- int foo(double);
- };
- This feature only suppresses warnings in later stages of code
- generation. It does not suppress warnings related to preprocessing
- or parsing.
- *** NEW FEATURE ***
- 05/09/2002: beazley
- SWIG now supports C99 variadic preprocessor macros. For example:
- #define debugf(fmt,...) fprintf(stderr,fmt,__VA_ARGS__)
- The argument "..." is used to indicate variable arguments which
- are all placed into the special argument name __VA_ARGS__ in
- the macro expansion.
- SWIG also implements the GNU (##) extension for swallowing the
- preceding comma when __VA_ARGS__ is empty. For example:
- #define debugf(fmt,...) fprintf(stderr,fmt, ##__VA_ARGS__)
- Here is how this is expanded:
- debugf("%d", 3) --> fprintf(stderr,"%d",3)
- debugf("Hello") --> fprintf(stderr,"Hello" )
- (notice the deleted comma).
- *** NEW FEATURE ***
- 05/08/2002: samjam (Sam Liddicott)
- Many changes to php module. Shadow classes are now implemented
- entirely in native C and no need for php-code shadow wrappers
- Populated template config.m4 and Makefile.in as needed by
- phpize are generated.
- 05/08/2002: ljohnson (Lyle Johnson)
- [Ruby] A copy constructor is now turned into a "clone"
- instance method (see Dave's change for copy constructors
- dated 4/7/2002). This seems like the appropriate thing
- to do for Ruby code.
- 05/08/2002: ljohnson (Lyle Johnson)
- [Ruby] Fixed [ 553864 ] Inline destructor code not written.
- 05/08/2002: beazley
- %ignore behaves better with constructors, destructors, and the
- type system in general. For constructors and destructors,
- %ignore now suppresses the creation of a default constructor
- or destructor. For example:
- %ignore ~Foo;
- class Foo {
- public:
- Foo();
- ~Foo();
- ...
- };
- In SWIG-1.3.11, ~Foo() simply "disappeared" and the code generator
- created a wrapper for a default destructor (as if it was never
- declared in the interface). In SWIG-1.3.12, %ignore suppresses
- the creation of a destructor if one is actually defined.
- Similarly, even though a declaration is ignored, information
- may still be needed to properly handle types. For example, here
- is a very subtle error that is fixed by this change:
- %ignore std::string; // Prevent class wrapping
- namespace std {
- class string {
- ...
- };
- %typemap(in) string * {
- ...
- }
- }
-
- void foo(std::string *s); // Broken.
- Before this fix, %ignore would cause the class definition to disappear.
- This, in turn, would cause the typemap to be misapplied.
-
- 05/08/2002: beazley
- Minor changes to %rename, %ignore, %feature, and related directives
- for better support of destructors. Destructors can now be precisely
- tagged. For example:
- %ignore Foo::~Foo;
- %feature("action") ~Bar {
- ...
- }
-
- *Developer warning*
- Operations such as renaming and feature attachment for classes used to
- be applied to destructors as well. For instance, if you did this:
-
- %rename(Bar) Foo;
- The operation applied to the class itself, the constructor, and
- the destructor. This is no longer the case. Now such operations
- will only apply to the class and the constructor. Note: if you
- were relying on this for class renaming, be aware that renamed
- classes should really only be handled at the level of the class itself
- and not the level of individual declarations in the class (although
- they can be renamed individually if needed). As far as I know,
- the Language class is already taking care of this case correctly.
- 05/07/2002: beazley
- New set of tests. The Examples/test-suite/errors directory contains
- tests that try to exercise all of SWIG's error and warning messages.
- 05/07/2002: beazley
- Start of a warning framework. Warning messages are now assigned numeric values
- that are shown in warning messages. These can be suppressed using the
- -w option. For example:
- swig -w302 example.i
- swig -w302,305 example.i
- Alternatively, the #pragma preprocessor directive can be used to disable this:
- #pragma SWIG nowarn=302
- #pragma SWIG nowarn=302,305
- Note: Since SWIG is a multi-pass compiler, this pragma should
- only be used to change global settings of the warning filter. It should
- not be used to selectively enable/disable warnings in an interface file.
- The handling of #pragma occurs in the C++ preprocoessor and affects all
- subsequent stages of compilation.
- The -Wall option turns on all warnings and overrides any filters that
- might have been set.
- Warnings can be issued from an interface using %warn. For example:
- %warn "110:%section is deprecated"
- The first part of a warning message is an optional warning number.
- A complete set of warning numbers is found in Source/Include/swigwarn.h.
- *** NEW FEATURE ***
- 05/07/2002: beazley
- Internal parsing change. Directives to include files now use brackets [ ... ]
- instead of { ... }.
- %includefile "foo.i" [
- ...
- ]
- The use of { ... } was a bad choice because they were included implicitly by
- the preprocessor and made it impossible to properly detect legitimate missing '}'
- errors.
- 04/16/2002-
- 05/02/2002: beazley
- SWIG European Tour: Paris-Amsterdam-Bath.
- 04/23/2002: beazley
- The %addmethods directive has been renamed to %extend.
- For example:
- class Foo {
- ...
- };
- %extend Foo {
- int blah() { ... };
- int bar() { ... };
- ...
- };
- Motivation: the %addmethods directive can be used for many
- other tasks including adding synthesized attributes, constructors,
- and typemaps. Because of this, "addmethods" is somewhat misleading.
- %extend more precisely describes this operation---extension of a
- class or structure.
- *** POTENTIAL INCOMPATIBILITY ***
- %addmethods still works via a macro definition. However,
- a warning message may be generated. Errors involving %addmethods
- will actually refer to the %extend directive.
-
- 04/23/2002: beazley
- Further refinement of the type system. Typedef now
- propagates through functions, pointers to functions,
- and pointers to member functions.
- For example:
- typedef int Integer;
- void foo(int (*x)(int), Integer (*y)(Integer));
- In this case, arguments 'x' and 'y' have exactly
- the same type (and would obviously accept objects
- of either type).
- Similarly, consider this:
- class Foo {
- };
- typedef Foo Bar;
- void bar(int (Foo::*x)(int), int (Bar::*y)(int));
- In this case, arguments x and y are the same
- type (via typedef).
-
- 04/22/2002: beazley
- SWIG now generates a warning message if any part of
- an expression involves values from a private part of a class.
- For example:
- class Foo {
- private:
- static int X;
- public:
- void blah(int a, int b = X); // Warning
- };
- In this case, the default argument is ignored. There
- are workarounds, but they are rather clumsy. For instance,
- you might do this:
- %feature("action") blah(int,int) {
- if ($nargs == 1) {
- result = blah(arg1);
- } else {
- result = blah(arg1,arg2);
- }
- }
- void blah(int a, int b = 0);
- 04/21/2002: beazley
- Use of the %inline directive inside a namespace is
- forbidden and now generates an error message. This is
- not allowed since the inlined code that is emitted is
- not placed inside a namespace. This confuses other
- stages of parsing.
-
- 04/21/2002: beazley
- Some bug fixes to casting operations and expression
- parsing. Due to some parsing issues, it is not
- currently possible to use casts for all possible
- datatypes. However, the common cases work.
- 04/20/2002: beazley (Amsterdam)
- Member templates now work. Simply use the %template
- directive inside a class or %addmethods to create
- instantiations (see Doc/Manual/SWIGPlus.html). Supporting
- this was easy---earlier changes to templates made it
- possible using only a two-line modification to the parser
- and a few minor modifications elsewhere. Hmmm, come to
- think of it, the smoke was rather thick in that Internet "cafe".
- *** NEW FEATURE ***
-
- 04/19/2002: beazley (TGV)
- Improved handling of non-type template parameters. For example:
- vector<int,100>;
- Simple numbers and strings can be used with the %template
- directive as well. For example:
- %template(vecint100) vector<int,100>;
- Note: Arithmetic expressions are not currently allowed.
-
- Default template arguments now work and do not have to
- be given to %template.
-
- 04/18/2002: beazley (Paris)
- Change in internal template handling. Template
- parameters are now fully integrated into the type
- system and are aware of typedefs, etc. This builds
- upon the change below.
- *** DEVELOPER WARNING ***
- Word of caution to language module writers. The "name"
- parameter of certain parse tree nodes (classes, functions, etc.)
- may be parameterized with types. This parameterization is
- done using SWIG type-strings and not the underlying C version.
- For example,
- int max<int *>(int *,int *)
- has a name of "max<(p.int)>". If you use the name directly,
- you may get syntax errors in the generated code. To fix this,
- use SwigType_namestr(name) to convert a parameterized name
- to a C name with valid syntax. The internal version is
- used to reduce template types to a common representation
- and to handle issues of typedef.
-
- 04/16/2002: beazley (somewhere over the Atlantic)
- Enhancement of typedef resolution. The type system is now
- aware of template arguments and typedef. For example:
- typedef int Integer;
-
- foo(vector<int> *x, vector<Integer> *y);
- In this case, vector<int> and vector<Integer> are
- the same type. There is some interaction between this
- mechanism and the implementation of typemaps. For example,
- a typemap defined for vector<int> * would apply to either type.
- However, a typemap for vector<Integer> * would only apply to
- that type.
- Typedefs and typemaps and matched by left-most expansion.
- For example:
- vector<Integer,Integer> -->
- vector<int, Integer> -->
- vector<int, int>
- 04/24/2002: cheetah (William Fulton)
- [Java] Changes to Java shadow classes.
- Overcomes a bug where the module assumed that a pointer to a derived
- class could be used in place of a pointer to a base class. Thanks
- to Stephen McCaul for analysing the bug and submitting patches.
- A consequence is that the getCPtr() method in each shadow class has
- disappeared and has been replaced with a getCPtrXXX(), where XXX is the
- shadow class name. If you have code that previously used getCPtr(),
- and the associated class is wrapping a C struct or a C++ class that
- is not involved in an inheritance chain, just use the new method. If
- however, the class is involved in an inheritance chain, you'll have
- to choose which pointer you really want. Backwards compatibility
- has been broken as not using the correct pointer can lead to weird bugs
- through ill-defined behaviour. If you are sure you want the old methods,
- you could add them back into all shadow classes by adding this at the
- beginning of your interface file:
- %pragma(java) allshadowcode=%{
- public long getCPtr(){
- return swigCPtr;
- }
- %}
- Please see entry dated 07/23/2002 to see how to do this after the deprecation
- of the allshadowcode pragma.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 04/13/2002: beazley
- Fixed problem with default arguments and references. Declarations such
- as this should now work:
- void foo(const string &x = "Hello");
- 04/12/2002: beazley
- Added typemap $* substitutions for typemaps involving arrays.
- Requested by William Fulton.
- 04/11/2002: beazley
- Template specialization is now supported. For example:
- template<> class vector<int> {
- ...
- };
- When the %template directive is used, it will use a specialization
- if one is defined. There are still some limitations. Partial
- specialization is not supported. A template of type <void *> does
- not match all pointers.
- *** NEW FEATURE ***
- 04/11/2002: beazley
- Major change to template wrapping internals. Template declarations are
- no longer processed as macros but now result in real parse-tree
- nodes. The %template directive expands these nodes into a
- specific instantiation. This change enables a number of
- new and interesting capabilities:
- Directives such as %rename, %feature, and %addmethods can
- now be applied to uninstantiated templates. For example:
- %rename(barsize) vector::bar(char *buf, int len);
- ...
- template<typename T> class vector {
- public:
- ...
- void bar(char *buf);
- void bar(char *buf, int len); // Renamed
- ...
- };
- %template(intvector) vector<int>; // Renaming carries through
-
- By parsing templates into an internal data structure, it will
- be possible to support specialization (and maybe partial
- specialization).
-
- This is highly experimental and a work in progress.
- *** POTENTIAL INCOMPATIBILITY ***
- In SWIG-1.3.11, template declarations were simply processed
- as weird macros. No other information was retained. This
- made it impossible to support more advanced features and
- complicated many other parts of the implementation.
- 04/09/2002: beazley
- Change to template class wrapping. There were a variety of
- "issues" with the old approach related to parsing, the type
- system, and namespaces. These changes are meant to rectify
- some of these problems:
- A specific instantiation of a template can now be specified
- by including the class inline like this:
-
- class vector<int> {
- public:
- vector();
- ~vector();
- ... whatever ...
- };
- This is template specialization, but partial specialization is
- not yet implemented.
-
- The %template directive has been modified to expand roughly as
- follows:
- %template(vecint) vector<int>;
- becomes
- %rename(vecint> vector<int>;
- class vector<int> {
- public:
- vector();
- ...
- };
- Note that this simply builds upon the code above (templates
- included inline).
- This modified approach to wrapping fixes some subtle type
- issues. For instance, you can now define typemaps and typedefs
- like this:
- %typemap(in) vector<int> * {
- ...
- }
- typedef vector<int> intvector;
- ...
- void blah(intvector *v); // Gets the above typemap
- This did not work in SWIG-1.3.11 due to a peculiarity of
- the template implementation.
- %template(name) no longer installs the template as a class
- with name "name". This might break %addmethods as described
- in the manual. For example:
- %template(vecint) vector<int>;
- %addmethods vecint { // Fails. vecint not a class
- ...
- };
-
- To fix this, just use the template name instead:
- %addmethods vector<int> {
- ...
- }
- Note: This technique might be a way to implement some bizarre
- template specialization techniques. For example:
- %addmethods vector<int> {
- // Only applied if vector<int> instantiated later
- %typemap(in) vector<int> * {
- ...
- }
- ...
- };
- *** POTENTIAL INCOMPATIBILITY ***
-
- 04/08/2002: beazley
- Fixed [ 540868 ] #if defined whatever - not parsed. SWIG should
- now correctly handle preprocessor directives like this:
- #if defined __cplusplus
- ...
- #endif
-
- Note: was implemented previously, but there was a minor bug.
- Reported by Adam Hupp.
-
- 04/07/2002: beazley
- %readonly and %readwrite are deprecated due to a change in the
- implementation. Instead of being pragmas, mutability is now
- controlled as a "feature" using the following two directives:
- %immutable;
- int x; // read-only variable
- int y; // read-only variable
- %mutable;
- int z; // Modifiable
- %immutable and %mutable are much more powerful than their older
- counterparts. They can now pinpoint a specific declaration like
- this:
- %immutable x; /* Any x */
- %immutable Foo::x; /* x in class Foo */
- In fact, the matching algorithm is the same as for %rename,
- %ignore, and other directives. This means that the declaration
-
- %immutable Foo::x;
- would not only apply to class Foo but to all derived classes
- as well.
- *** POTENTIAL INCOMPATIBILITY ***
- %immutable and %mutable must be terminated by a semi-colon. This
- differs slightly from the older %readonly and %readwrite directives.
- Since %immutable and %mutable can be applied to declarations the
- semicolon is needed to distinguish between a global feature and
- one targeted to a single declaration. Note: this incompatibility is the
- primary reason for changing the name of the directive.
- 04/07/2002: beazley
- New handling of copy constructors. If a class defines
- constructors like this:
- class Foo {
- public:
- Foo();
- Foo(const Foo &); // Copy constructor
- ...
- };
- SWIG now generates a function copy_Foo() for the copy
- constructor.
- In previous verions, this generated a name-clash and an
- error message. To preserve backwards compatibility, SWIG
- does not change the behavior if %rename is used to resolve
- the name conflict. However, if no name resolution is made,
- this new approach is used.
- Copy constructors may be handled as a special case in the
- target language. However, this is up to the language module
- itself.
-
- 04/07/2002: beazley
- The %template directive is now namespace aware. This allows
- code like this:
- namespace foo {
- template<typename T> max(T a, T b) { return a > b ? a : b; }
- }
- using namespace foo;
- %template(maxint) max<int>; // Ok
- namespace bar {
- using foo::max;
- %template(maxdouble) max<double>; // Ok
- }
- Caveat: the template name supplied to %template must be defined in the
- same scope in which the %template directive appears. This code is
- illegal:
- %template(maxint) foo::max<int>;
- 04/07/2002: beazley
- Minor enhancement to preprocessor. The preprocessor can now perform
- string comparison. For example:
- #define A "hello"
- ...
- #if A == "hello"
- ...
- #endif
- The primary use of this is in SWIG macros. For example:
- %define FOO(x)
- #if #x == "int"
- /* Special handling for int */
- ...
- #endif
- %enddef
- Normal users can probably safely ignore this feature. However, it may
- be used in parts of the SWIG library.
- 04/07/2002: beazley
- Further refinement of default constructor/destructor wrapper generation.
- SWIG is now much more aware of pure virtual methods. For instance:
- class A { /* Abstract */
- public:
- virtual void method1() = 0;
- virtual void method2() = 0;
- };
- class B : public A { /* Abstract */
- public:
- virtual void method1() { };
- };
- class C : public B { /* Ok */
- public:
- virtual void method2() { };
- };
- In this case, SWIG will only generate default constructors for C.
- Even though B looks fine, it's missing a required method and is abstract.
- 04/04/2002: beazley
- Subtle change to structure data member access. If you
- have a structure like this:
- struct Foo {
- Bar b;
- };
- The accessor functions for b are generated as follows:
- (1) If b is *not* defined as a structure or class:
- Bar Foo_b_get(Foo *self) {
- return self->b;
- }
- void Foo_b_set(Foo *self, Bar value) {
- self->b = value;
- }
- (2) If b *is* defined as a structure or class:
- Bar *Foo_b_get(Foo *self) {
- return &self->b;
- }
- void Foo_b_set(Foo *self, Bar *value) {
- self->b = *value;
- }
- See the "Structure data members" section of Doc/Manual/SWIG.html
- for further details.
- *** POTENTIAL INCOMPATIBILITY ***
- This may break interfaces that relied on a lot of a undeclared
- structure and class names. To get the old behavior, simply
- use a forward declaration such as "struct Bar;"
-
- 04/04/2002: beazley
- C++ namespace support added. SWIG supports all aspects of
- namespaces including namespace, using, and namespace alias
- declarations. The default behavior of SWIG is to flatten
- namespaces in the target language. However, namespaces are
- fully supported at the C++ level and in the type system.
- See Doc/Manual/SWIGPlus.html for details on the implementation.
-
- 04/02/2002: cheetah (William Fulton)
- [Java] Sun has modified javac in jdk1.4 to no longer compile
- an import of an unnamed namespace. To fix this SWIG no longer
- generates the import for packageless classes.
- http://developer.java.sun.com/developer/bugParade/bugs/4361575.html
- As reported SF #538415.
- 03/27/2002: ljohnson (Lyle Johnson)
- [Ruby] Added support for pointer-to-member, similar to that
- for the Python module. Remarkably similar. Also added a new
- example for this (Examples/ruby/mpointer), which is remarkably
- similar to the Python example of the same name.
- 03/26/2002: ljohnson (Lyle Johnson)
- [Ruby] Made a few minor edits to the "Advanced Topics"
- chapter of the SWIG manual and added a new major section
- about how to create multi-module Ruby packages with SWIG.
- 03/26/2002: ljohnson (Lyle Johnson)
- [Ruby] Removed all of the old Ruby pragmas. If any of this
- functionality is truly missed we can resurrect it, preferably
- with some kind of feature-based directive.
-
- 03/25/2002: ljohnson (Lyle Johnson)
- [Ruby] Fixed SWIG exception library support for Ruby, which
- has apparently been broken for some time. Luckily, no one seems
- to have noticed.
- 03/23/2002: beazley
- C++-namespace support in SWIG directives.
- %addmethods:
- The %addmethods directive now accepts a fully qualified classname
- and can be used inside C++ namespace declarations. For example:
- // Attaches to the class Foo::Bar below
- %addmethods Foo::Bar {
- int somemethod() { ... }
- };
- namespace Foo {
- class Bar {
- public:
- ...
- };
-
- // Attaches to the class Bar above
- %addmethods Bar {
- int othermethod() { ... };
- }
- }
- %feature, %rename, %ignore, %exception, and related directives:
- Namespaces are fully integrated into the renaming and declaration
- matcher. For example:
- %rename(display) Foo::print; // Rename in namespace Foo
- %ignore Foo::Bar::blah; // Ignore a declaration
- %rename directives can be placed inside namespace blocks as well. For
- example:
- namespace Foo {
- %rename(display) print; // Applies to print below
- void print();
- };
- Most other SWIG directives should work properly inside namespaces.
- No other changes are needed.
-
- 03/22/2002: beazley
- Some changes to internal symbol table handling. SWIG no longer
- manages structures and unions in a separate namespace than normal
- declarations like ANSI C. This means you can't have a structure
- with the same name as a function. For example:
- struct Foo {
- ...
- }
-
- int Foo() { ... }
- This approach is more like C++. It's not clear that SWIG ever
- really supported the ANSI C anyways---using the same name would
- almost certainly generate a name-clash in the target language.
- 03/22/2002: ljohnson (Lyle Johnson)
- [Ruby] Fixed [ 517302 ] for handling of renamed overloaded
- constructors. Now, renamed overloaded constructors are converted
- into class singleton methods (basically acting as "factory"
- methods).
- 03/21/2002: beazley
- Fixed [ 532957 ] %ignore parse error and casting operator.
- Reported by William Fulton.
- 03/18/2002: beazley (** ADVANCED USERS ONLY **)
- Added support for dynamic casting in return values. A somewhat
- common problem in certain C++ programs is functions that hide
- the identity of underlying objects when they are returned
- from methods and functions. For example, a program might include
- some generic method like this:
- Node *getNode();
- However, Node * may just be base class to a whole hierarchy
- of different objects. Instead of returning this generic Node *,
- it might be nice to automatically downcast the object into the
- appropriate type using some kind dynamic cast.
- Assuming you understand the peril involved, a downcast can now
- be performed using the following function in the run-time type
- checker:
- swig_type_info *SWIG_TypeDynamicCast(swig_type_info *, void **ptr);
- This function checks to see if the type can be converted to another
- type. If so, a different type descriptor (for the converted type)
- is returned. This type descriptor would then be used to create
- a pointer in the target language.
- To use this, you would write a typemap similar to this:
- %typemap(out) Node * {
- swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor, (void **) &$1);
- $result = SWIG_NewPointerObj($1, ty);
- }
- Alternatively,
- %typemap(out) Node * = SWIGTYPE *DYNAMIC;
- To make the typemap have any effect, you have to write a supporting
- function that knows how to perform downcasting. For example:
- %{
- static swig_type_info *
- Node_dynamic_cast(void **ptr) {
- Node **nptr = (Node **) ptr;
- Element *e = dynamic_cast<Element *>(*nptr);
- if (e) {
- *ptr = (void *) e;
- return SWIGTYPE_p_Element;
- }
- Data *d = dynamic_cast<Data *>(*nptr);
- if (d) {
- *ptr = (void *) d;
- return SWIGTYPE_p_Data;
- }
- return 0;
- }
- %}
- There is no restriction on how types are determined. dynamic_cast<>
- uses C++ RTTI. However, if you had some other mechanism for determining
- the type, you could use that here. Note: it is important to save
- the new pointer value back into the argument as shown. When downcasting,
- the value of the pointer could change.
- Finally, to make the casting function available, you have to register
- it with the run-time type checker. Put this macro in your interface file.
- DYNAMIC_CAST(SWIGTYPE_p_Node, Node_dynamic_cast);
- Note: this feature does not introduce a performance penalty on
- normal SWIG operation. The feature is only enabled by writing
- a new typemap that explicitly calls SWIG_TypeDynamicCast() to
- make a conversion.
-
- Examples/test-suite/dynamic_cast.i contains a simple example.
- This feature is not supported in the Java module due to differences
- in the type-checking implementation.
- *** EXPERIMENTAL FEATURE ***
- 03/17/2002: beazley
- Small change to type-name handling of unnamed structures and
- typedef. If a structure of this form appears:
- typedef struct {
- ...
- } Foo;
- Then 'Foo' is used as the proper typename for the structure.
- Furthermore, Foo can now be used as a name in C++ inheritance.
- SWIG was already kind of doing this, but this modification refines
- the implementation to more closely follow the C++ ARM, section
- 7.1.3, p. 106. This fixes a couple of obscure corner cases.
- 03/16/2002: beazley
- Modified C++ inheritance with a few enhancements. First, type information
- needed for casting and type-equivalence is generated even when base-classes
- aren't defined in the interface. For example:
- class Foo : public Bar { /* Bar unspecified */
- public:
- ...
- };
- void blah(Bar *b);
- In this case, the blah() function still accepts Foo * even though nothing
- is really known about Bar. Previous SWIG versions would just generate
- a type error.
- Inheritance has also been modified to work through typedef. For example:
- class Bar {
- };
- typedef Bar OtherBar;
- class Foo: public OtherBar {
- }
- In this case, the base class of OtherBar is correctly resolved back to
- Bar. The use of the name OtherBar is lost in this resolution (the wrappers
- will simply use Bar instead of the typedef name OtherBar).
-
- 03/13/2002: beazley
- %typemap, %apply, and related directives can now appear inside
- class definitions.
- 03/13/2002: beazley
- Fixed a variety of problems related to compiling SWIG on 64-bit
- platforms.
- 03/12/2002: beazley
- Fixed problem with "ignore" and "in" typemaps. Local variables
- associated with "in" were being added to the wrapper function even
- though they were never used. Mostly harmless, but it would lead
- to a variety of compilation warnings.
-
- 03/12/2002: beazley
- Some changes to the internal type system and handling of nested C++
- types. In previous versions of SWIG, if you had the following:
- class Foo {
- public:
- typedef int Blah;
- };
- class Bar : public Foo {
- public:
- void somemethod(Blah x);
- };
- The argument type in somemethod() would implicitly be set to Bar::Blah.
- Although this is technically allowed, it breaks typemaps. For example:
- %typemap(in) Foo::Blah { ... }
- doesn't match like you expect. This has been changed in SWIG-1.3.12.
- Now, types are expanded using the class in which they were defined.
- So, the argument type in somemethod() will be Foo::Blah---since the
- type Blah was defined in Foo.
-
- 03/10/2002: beazley
- Fixed some subtle type scoping problems with typedef and C++ classes.
- For example:
-
- typedef int Blah;
- class Bar {
- public:
- typedef double Blah;
- void foo(Blah x, ::Blah y);
- ...
- }
- 03/10/2002: beazley
- Highly experimental change to handle variable length arguments.
- First, there is no portable or reliable way to wrap
- a varargs function in full generality. However, you *can* change
- the function signature using %varargs.
- %varargs(char *) fprintf;
- ...
- void fprintf(FILE *f, char *fmt, ...);
- In this case, the variable length parameter "..." is
- simply replaced by the parameters given in %varargs. This
- results in a function like this:
- void fprintf(FILE *f, char *fmt, char *s);
- More than one argument can be used and default values
- can be defined. For example, this code specifies a
- maximum of four arguments.
- %varargs(char *x1 = 0, char *x2 = 0, char *x3 = 0, char *x4 = 0) fprintf;
-
- *** EXPERIMENTAL NEW FEATURE ***
-
- 03/10/2002: beazley
- Change to handling of variable length arguments. varargs
- is now handled as a proper parameter and is passed to the
- code generator. However, it still can't be handled correctly
- (and will generate a typemap warning). This change has been
- made to better incorporate variable length arguments with other
- directives such as %ignore, %rename, %feature, and so forth.
- 03/10/2002: beazley
- Fixed [ 522555 ] Syntax error parsing "define" construct. SWIG
- is a little more restrictive in determining #define statements
- that will be wrapped as constants. Also added a better parser
- error rule for handling bad constants.
- 03/08/2002: cheetah (William Fulton)
- [Java] Bug fix: Classes renamed with %rename that are derived from
- another class generate more appropriate shadow class code.
- 03/08/2002: cheetah (William Fulton)
- [Java] Fixed SF [ #523632 ] and [ #513335 ] both reported by Israel
- Tanner. Support for types that are used which are in a typedef. The
- appropriate shadow class name is generated. Also generated correct
- shadow classname when a templated class is used within another
- templated class. See the cpp_typedef.i testcase.
- 03/08/2002: cheetah (William Fulton)
- [Java] Bug fix: No type was generated in shadow classes for types
- that weren't wrapped by SWIG. The type is treated as a raw
- pointer, ie no shadow class.
- 02/22/2002: beazley
- Refined the matching algorithm used by %rename, %ignore, and
- %feature. If a type signature is supplied, it must exactly
- match that used in the declaration---including any use of
- const. For example:
- %rename(foo1) foo(int);
- %rename(bar1) bar(int) const;
- class Blah {
- public:
- void foo(int); // Matched --> foo1
- void foo(int) const; // Not matched
- void bar(int); // Not matched
- void bar(int) const; // Matched --> bar1
- }
- In previous versions, a non-const specification would match
- both the non-const and const declarations. However, the whole
- point of %rename and related directives is that they be able
- to precisely pinpoint exact declarations in an interface. This
- fixes the problem.
- 02/21/2002: beazley
- Reworked the handling of default constructor and destructors.
- SWIG now makes a preliminary pass over the parse tree to discover
- which classes support default allocation. This fixes a number
- of very subtle issues in code generation and call/return by value.
- 02/18/2002: cheetah (William Fulton)
- Improved support on Cygwin: Perl, Python, Tcl, Ruby and Java should
- work out of the box, barring the runtime library. Removed dllwrap
- and replaced with newly working gcc -shared instead for Cygwin.
- All this will require the new improved binutils 20010802 and later,
- but the latest Cygwin is usually the best recommendation.
- 02/15/2002: beazley
- Fixed some problems related to wrapping of global variables
- and Perl shadow classes. Reported by Chia-liang Kao.
- 02/15/2002: ljohnson (Lyle Johnson)
- [Ruby] Made a fix to the code generation for C++ class
- constructors so that we get both a "new" singleton method
- and an "initialize" instance method for each class. This
- change enables developers to derive new Ruby classes from
- SWIG-wrapped C++ classes and then override their initialize
- methods to provide subclass-specific instance initialization.
- 02/15/2002: ljohnson (Lyle Johnson)
- [Ruby] Massive documentation update for the Ruby module,
- contributed by Craig Files.
- 02/14/2002: ljohnson (Lyle Johnson)
- [Ruby] Bug fix: An error in the SWIG runtime support for Ruby
- was causing several of the examples to fail. Reported by
- William Fulton.
- 02/14/2002: ljohnson (Lyle Johnson)
- [Ruby] Bug fix: Enumerations defined within a class (such
- as those seen in the Examples/ruby/enum example) were not
- being exported with the correct names. Reported by William
- Fulton.
- 02/13/2002: ljohnson (Lyle Johnson)
- [Ruby] Added a warning message when we run across overloaded
- class constructors for C++ code, that this is currently not
- supported (even if the overloads have been %renamed). For an
- example of where this doesn't work, see Examples/ruby/operator.
- 02/13/2002: ljohnson (Lyle Johnson)
- [Ruby] Added an "ignored" warning message when the parser runs
- across an operator!=() declaration for C++ code.
- 02/11/2002: ljohnson (Lyle Johnson)
- [Ruby] Added the "import", "import_template", "operator" and
- "template" examples.
- 02/11/2002: ljohnson (Lyle Johnson)
- [Ruby] Added multi-module support.
- 02/09/2002: ljohnson (Lyle Johnson)
- [Ruby] Added the missing "#define SWIG_NOINCLUDE" at the top of
- the wrapper code when the '-c' option is used.
- 02/09/2002: ljohnson (Lyle Johnson)
- Corrected a minor off-by-one error for the size of the
- swig_types[] array that's generated in the wrapper code.
- 02/08/2002: beazley
- Fixed SF [ #515058 ] Wrong code for C++ templates.
- Reported by Israel Taller.
- Version 1.3.11 (January 31, 2002)
- =================================
- 01/30/2002: beazley
- Fix to pass/return by value for C++ objects that define
- no default constructor. Changes to the typemap system
- made it impossible to wrap C++ objects with no default
- constructor. This has been fixed, but the solution
- involves some clever template magic contributed by
- William Fulton. Please see the comments in the file
- Lib/swig.swg for further details. This solution is
- experimental and may be refined in a future release.
- 01/30/2002: beazley
- Global variables and member data of type "const char *"
- can be set, but the old value is silently discarded without
- any garbage collection. This may generate a memory leak.
- This change is needed to more safely handle variables
- like this:
- const char *foo = "Hello World\n";
- In this case, it's not safe to free the old value. However,
- SWIG can dynamically allocate a new value and make foo point
- to it. To fix this memory leak, you can probably do this:
- %clear const char *foo;
- %apply char * {const char *foo};
- *** POTENTIAL INCOMPATIBILITY ***
-
- 01/30/2002: beazley
- Two minor typemap enhancements have been added. First,
- typemaps can issue a warning message by including a special
- warning attribute. For example:
- %typemap(in,warning="I'm going to do something dangerous") ...
- The warning message will show up whenever the typemap is
- applied.
- Second, a typemap can force a no-match by defining
- %typemap(in) sometype "pass"
- If this is used, the typemap system will *not* record a
- typemap match for "sometype". This can be used to block
- selected typemaps. For example, if you wanted to disable
- a typemap feature for some type, you could do this.
- // Do not allow global variables of type 'const char *' to be set.
- %typemap(varin) const char * "pass"
- It might also be possible to use this to do subtle and
- strange things with typemaps. For example, if you wanted to
- make 'blah *' an output value and 'const blah *' an input
- parameter, you might do this:
- %typemap(ignore) blah *(blah temp) {
- $1 = &temp;
- }
- %typemap(argout) blah * {
- ... return a value ...
- }
- /* Block unqualified typemaps defined above */
- %typemap(ignore) const blah * "pass"
- %typemap(argout) const blah * "pass"
- %typemap(in) const blah * {
- ... get input value ...
- }
- (This potential applications of typemaps suggested by Greg Stein).
- *** NEW FEATURE ***
- 01/29/2002: cheetah (william fulton)
- [Java] Bug fix: No enumerations were wrapped when the -shadow
- commandline option was not specified. Reported by Israel Taller.
- 01/28/2002: cheetah (william fulton)
- [Java] Global arrays are successfully wrapped. In fact they started
- mostly working in SWIG-1.3.10.
- 01/28/2002:richardp
- Added first attempt at C++ and -shadow support for PHP4 module,
- please test and mail me if any problems/ideas on improving it.
- There is a known problem with uninitialized member variables,
- please see Examples/php4/sync/README for details.
- Also more PHP documentation added to Doc/Manual/Php.html
- 01/27/2002:beazley
- The ANSI C size_t type is now recognized as an integer by default.
- 01/26/2002:beazley
- long long and unsigned long long support added to many language modules.
- This is not a portable feature and will require compiler support
- for the long long type. In target languages that do not support
- long long (e.g., Tcl and Perl), numbers are converted to a string
- of digits. This prevents their use in arithmetic calculations, but
- still allows values to be set from a string.
- long long support requires the use of the strtoll() and strtoull()
- functions as well as the 'lld' and 'llu' format specifiers
- of sprintf().
- 01/26/2002:beazley
- Fixed [ #501827 ] Delete method is not called. The Tcl
- module wasn't correctly calling destructors when they
- were defined using %addmethods. This has been fixed.
- Reported by Reinhard Fobbe.
- 01/26/2002: beazley
- Better support for long long and unsigned long long. Typemaps
- have been included in a number of modules for handling these types.
- In addition, the parser has been modified to accept long long
- literals such as 1234LL and 1234ULL.
- 01/27/2002: cheetah (william fulton)
- [Java] A C char[] is mapped to a Java String which is the default
- SWIG handling of char[] and char*. It used to be mapped to byte[].
- Note that a C signed char[] array is mapped to byte[].
- *** POTENTIAL INCOMPATIBILITY ***
- 01/25/2002: beazley
- Fixed a problem with return-by-value, C++, and
- objects that define no default constructor.
- Reported by Joel Reed.
- 01/25/2002: cheetah (william fulton)
- [Java] Overhaul of the Java module. The C code generation is now
- done from typemaps.
- 01/24/2002: cheetah (william fulton)
- [Java] Support for arrays of enum pointers
- 01/20/2002: cheetah (william fulton)
- [Java] Error checking for null Java objects being passed to native
- functions. Exception thrown now whereas before the JVM crashed.
- 01/18/2002: cheetah (william fulton)
- [Java] Corrected behaviour for functions that take arrays. For
- example, when this c function:
- void arrayfn(int array[]);
-
- is wrapped the corresponding native function
- public final static native void arrayfn(int[] array);
- is produced. Previously if the C function made any changes to the
- array elements, these were not reflected back into the Java array.
- This has now been corrected so that the changes are propogated back
- to Java and the calling function will see these changes. This is
- how pure Java functions work, ie arrays are passed by reference.
- 01/15/2002:mkoeppe
- [Guile] New file cplusplus.i with C++ typemaps contributed
- by Marcio Luis Teixeira <marciot@holly.colostate.edu>.
- 01/11/2002: cheetah (william fulton)
- [Java] Changed mapping of C long to Java type. Was mapped to Java
- long, now mapped to Java int. If you want the previous mapping to
- Java long use this approach in your interface file:
-
- %clear long;
- %typemap(jni) long "jlong"
- %typemap(jtype) long "long"
- %typemap(jstype) long "long"
- %clear long[ANY];
- %typemap(jni) long[ANY] "jlongArray"
- %typemap(jtype) long[ANY] "long[]"
- %typemap(jstype) long[ANY] "long[]"
- %typemap(in) long[ANY] {write me for array support}
- %typemap(out) long[ANY] {write me for array support}
- %typemap(argout) long[ANY] {write me for array support}
- %typemap(freearg) long[ANY] {write me for array support}
- *** POTENTIAL INCOMPATIBILITY ***
- This new mapping is more appropriate when interfacing to 32 bit
- applications which are used in the current 32-bit JVMs. For future
- 64-bit JVMs you may have to change these mappings - eg on Unix LP64
- systems, but not on Microsoft 64bit Windows which will be using a
- P64 IL32 model. This may be automated in a future version of SWIG.
- 01/10/2002:beazley
- Fixed [ 501677 ] %init block in wrong place. Reported
- by Luigi Ballabio.
- 01/09/2002: cheetah (william fulton)
- [Java] Default support for the long long type. signed long long is
- mapped to a Java long. unsigned long long is mapped to BigInteger.
- 01/09/2002:beazley
- Experimental change to parser to better support mixing of
- int, long, short, unsigned, float, and double. The parser
- should now support types like this:
-
- short unsigned int
- int unsigned short
- unsigned short int
- unsigned int short
- This change also enables a type of 'long double' (previously
- unsupported) to be used.
- *** NEW FEATURE ***
- 01/05/2002: cheetah (william fulton)
- [Java] Casting fix for when function return type is a pointer as
- reported by Gary Pennington 2002-01-05. The upper 32bits of the
- 64 bit jlong will have contained junk for 32bit pointers.
- 01/05/2002: cheetah (william fulton)
- [Java] Better pointer handling in Java is possible as the
- INPUT, OUTPUT and INOUT typemaps have been added into typemaps.i.
- 01/05/2002: cheetah (william fulton)
- [Java] $null can be used in input typemaps to return early from JNI
- functions that have either void or a non-void return type. Example:
- %typemap(check) int * %{
- if (error) {
- SWIG_exception(SWIG_IndexError, "Array element error");
- return $null;
- }
- %}
- If the typemap gets put into a function with void as return, $null
- will expand to nothing:
- void jni_fn(...) {
- if (error) {
- SWIG_exception(SWIG_IndexError, "Array element error");
- return ;
- }
- ...
- }
- otherwise $null expands to zero, where javareturntype is either a
- pointer or a primitive type:
- javareturntype jni_fn(...) {
- if (error) {
- SWIG_exception(SWIG_IndexError, "Array element error");
- return 0;
- }
- ...
- }
- 01/02/2002: cheetah (william fulton)
- [Java] The Java module incorrectly used argout typemaps for
- strings. This is now corrected and the code now resides
- in the freearg typemap. The argout array typemaps have been split into
- argout and freearg typemaps. This correction may require some user
- written typemaps to be modified.
- *** POTENTIAL INCOMPATIBILITY ***
- 12/28/2001: cheetah (william fulton)
- [Java] Multi typemaps now working for Java see multimap example.
- [Java] Fix for recently introduced bug - freearg typemap code was appearing
- before the function call.
- 12/28/2001: cheetah (william fulton)
- [Java] JCALL macro for JNI calls that work in both C and C++ typemaps
- have been replaced with JCALL0, JCALL1, JCALL2, JCALL3 and JCALL4
- macros.
- *** POTENTIAL INCOMPATIBILITY ***
- 12/22/2001:beazley
- Resolved some inconsistent behavior with %rename and class renaming.
- If you specify the following:
-
- %rename(Foo) Bar;
- class Bar {
- public:
- Bar();
- ~Bar();
- }
- Then the %rename directive applies to the class itself, the constructor,
- and the destructor (all will be renamed to Foo).
- If a class defines more than one constructor, the overloaded variants
- can still be renamed by specifying parameters to %rename. For example:
- %rename(Bar_copy) Bar(Bar &);
- class Bar {
- public:
- Bar();
- Bar(Bar &);
- ~Bar();
- };
- There are still some odd corner cases. If you specify
- %rename(Foo) ::Bar;
- then only the name of the class is changed and the constructor/destructor
- names are left unmodified. If you specify
- %rename(Foo) *::Bar;
- then the names of the constructor/destructor functions are modified but
- the name of the class is not.
- 12/21/2001: cheetah (william fulton)
- [Java] jni, jtype and jstype typemaps no longer hardcoded but real
- typemaps. New variable substitution, $javaclassname, can be used in
- the jstype typemaps. It is replaced with the Java shadow class name
- where applicable.
- [Java] Fix for recently introduced bug to do with inheritance when
- using %import.
- [Java] A few more bug fixes, todo with %rename and using the kind
- with the type, eg
- void fn(union uni myuni, struct str mystr, class cl mycl);
- 12/20/2001:beazley
- Fixed [ #494524 ] Preprocessor bug - apostrophe and #subst.
- 12/20/2001:beazley
- Added SWIG_VERSION preprocessor symbol. This is a hexadecimal
- integer such as 0x010311 (corresponding to SWIG-1.3.11). This can
- be used in the interface as follows:
- #if SWIG_VERSION >= 0x010311
- /* Use some fancy new feature */
- #endif
- Note: The version symbol is not defined in the generated SWIG
- wrapper file.
- *** NEW FEATURE ***
- 12/20/2001:mkoeppe
- [MzScheme]: Renamed mzswig_make_boolean to
- swig_make_boolean, as the latter is used in the typemaps.
- Reported by Luigi Ballabio.
- 12/17/2001:mkoeppe
- [Guile]: Rewrote list-vector.i using multi-dispatch
- typemaps. Updated pointer-in-out.i. Make the
- deprecated typemap-substitution of "$source" in "argout"
- work as before.
- 12/16/2001:mkoeppe
- [Guile]: Fixed macros %values_as_list, %values_as_vector,
- %multiple_values to use the proper %pragma syntax. New
- Guile example/test "multivalue"; new Guile run-test for
- test-suite item "list-vector" (currently broken).
- 12/14/2001:mkoeppe
- [Guile]: Fixed typemap-substition bug for "varin". Relaxed
- valid-identifier check to allow all R5RS identifiers.
- Version 1.3.10 (December 10, 2001)
- ==================================
- 12/08/2001:beazley
- Modified %typemap so that %{ ... %} can also be used as a
- code block (mostly for completeness). For example:
-
- %typemap(in) blah %{
- ...
- %}
- This form does not introduce a new block scope. Also, the
- code enclosed in %{ ... %} is not processed by the preprocessor.
- 12/08/2001:beazley
- Fixed [ #459614 ] SWIG with multiple TCL interpreters.
- 12/08/2001:beazley
- Fixed [ #417141 ] rubydec.swg is wrong
- Reported by Paul Brannan.
- 12/08/2001:beazley
- Fixed [ #410557 ] Problem with %addmethods on NT.
- Reported by Magnus Ljung.
- 12/08/2001:beazley
- Fixed [ #445233 ] Enhancement: handle access change.
- SWIG now parses (but ignores) C++ access changes for the
- the following:
- class A {
- protected:
- void something() { }
- public:
- A() {}
- };
- class B : private A {
- public:
- B() : A() { }
- protected:
- A::something; <---- Parsed, but ignored
- };
-
- Suggested by Krzysztof Kozminski.
- 12/08/2001: cheetah (william fulton)
- Fix for Ruby to work using Visual C++.
- 12/06/2001:beazley
- Fixed [ #465687 ] unsigned short parameters fail.
- Reported by Gerald Williams.
- 12/06/2001:beazley
- Fixed SF [ #489594 ] PyString_FromString can't take NULL arg.
- Reported by John Merritt. SWIG now converts string values
- to Python using code like this:
- resultobj = result ? PyString_FromString(result) : Py_BuildValue("");
- 12/06/2001:beazley
- Fixed SF [ #463561 ] Type conversions not generated.
- Reported by Gerald Williams.
-
- 12/04/2001:beazley
- Fixed SF [ #470217 ] Tcl default argument handling.
- Reported by Shaun Lowry.
- 12/04/2001:beazley
- Fixed SF [ #472088 ] defined(MACRO) expanded everywhere.
- Embedded preprocessor directives such as
- %#if defined(FOO)
- are not expanded by the SWIG preprocessor.
- Reported by Gerald Williams.
- 12/04/2001:beazley
- Fixed SF [ #476467 ] Problems with #define & commas.
- 12/04/2001:beazley
- Fixed SF [ #477547 ] wrong declaration of pointer functions.
- Bad prototypes in Lib/tcl/ptrlang.i.
- 12/04/2001:beazley
- Fixed SF [ #483182 ] Constants can take args by mistake.
- When swig -perl5 -const is used, constants are declared
- with a void prototype. For example:
- sub ICONST () { $examplec::ICONST }
- Patch submitted by Rich Wales.
- 12/03/2001:beazley
- New %exception directive. This is intended to replace %except.
- It works in exactly the same manner except it does not accept a
- language specifier. For example:
- %exception {
- try {
- $action
- }
- catch(SomeError) {
- error
- }
- }
- %exception is also name aware---allowing it to be applied to
- specific declarations in an interface. For example:
- %exception foo {
- ...
- exception for any function/method foo
- ...
- }
- %exception Foo::bar {
- ...
- exception for method bar in class Foo
- ...
- }
-
- %exception Foo::bar(double) {
- ...
- exception for method bar(double) in class Foo
- ...
- }
- The semantics of this name matching is exactly the same as for %rename.
- *** NEW FEATURE ***
-
- 12/03/2001:beazley
- Substantial cleanup of the Python shadow class code. Shadow classes
- used to be created in this rather complicated manner involving about
- a half-dozen strings created in bits and pieces. Shadow classes
- are now generated in a more straightforward manner--in the same
- order that appears in the interface file.
- *** POTENTIAL INCOMPATIBILITY ***
- The order in which declarations appear in the shadow file may differ.
-
- 12/03/2001:beazley
- The %insert directive (%{ ... %}, %runtime, %header, %wrapper, etc.)
- can now be used inside of a class definition. This has potential
- uses when generating shadow class code. For example:
- class Foo {
- ...
- %insert("shadow") %{
- # Some python code
- def blah(self):
- print "I'm blah!"
- %}
- ...
- };
- The support for class code insertion depends on the language module.
- However, the intent of this feature is to simplify the task of extending
- shadow class code. In the Python module, this inserts code with the
- proper level of indendation (regardless of what was used in the SWIG
- interface).
- *** NEW FEATURE ***
- 11/29/2001: cheetah (william fulton)
- Modifications for Java and Python modules to work on cygwin.
- Unfortunately a lot of the python module has started to produces code
- which cannot be auto-imported using cygwin libtools so most of it is
- still broken.
- 11/28/2001:beazley
- The %rename and %feature directive can now be used inside
- of a class definition. For example:
- class Foo {
- %rename(foo_i) foo(int);
- %rename(foo_d) foo(double);
- public:
- ...
- void foo(int);
- void foo(double);
- ...
- };
- When used in this manner, the %rename directive only applies
- to members of the class in which it appears as well as all
- derived classes. In fact, this is really just the same
- as saying:
- %rename(foo_i) Foo::foo(int);
- %rename(foo_d) Foo::foo(double);
- class Foo {
- ...
- };
- *** NEW FEATURE ***
- 11/26/2001:beazley
- Added the experimental %feature directive. %feature can be
- used to attach arbitrary string attributes to parse tree nodes.
- For example:
- %feature("except") blah {
- try {
- $function
- } catch (Error) {
- whatever;
- }
- }
- or
- %feature("set") *::x_set "x";
- or
- %feature("blah") Foo::bar(int,double) const "spam";
- The syntax is borrowed from the %rename directive. In fact, the
- exact same semantics apply (inheritance, matching, etc.).
- %feature is a very powerful low-level primitive that can be used to
- customize individual language modules and to provide hints to
- any stage of code generation. Features are attached to
- parse tree nodes as attributes with names like "feature:*" where *
- is replaced by the feature name (e.g., "feature:except", "feature:set",
- etc.). Language modules can then look for the features using
- a simple attribute lookup.
- %feature is intended to be a replacement for a number of
- older SWIG directives including %except and specialized
- pragmas. It is more powerful (due to its parameterized
- name matching) and it provides very precise control over
- how customization features are attached to individual
- declarations. There are future expansion plans that will
- build upon this capability as well.
- It's not certain that %feature will ever be used directly
- by SWIG users. Instead, it may be a low-level primitive
- that is used in high-level macro definitions. For instance,
- to support properties, you might define a macro like this:
- %define %property(name, setf, getf)
- %feature("set") setf #name;
- %feature("get") getf #name;
- %enddef
- Which allows a user to specify things like this:
- %property(p, get_p, set_p);
- class Blah {
- public:
- int get_p();
- void set_p(int);
- };
- *** EXPERIMENTAL NEW FEATURE ***
-
- 11/24/2001:beazley
- The Tcl module has been expanded with some new features for
- managing object ownership. For example:
-
- set c [Circle -args 20]
- $c area # Invoke a method
- $c -disown # Releases ownership of the object
- $c -acquire # Acquires ownership of the object
- If Tcl owns the object, its destructor is invoked when the
- corresponding object command is deleted in Tcl.
- To simplify the destruction of objects, the following syntax
- can be used:
- $c -delete # Delete an object
- This is an alternative for the more obscure variant of
- rename $c {}
- These features also add functionality at the C API level.
- The following functions manage ownership from C and
- can be used in typemaps.
- SWIG_Acquire(void *ptr);
- SWIG_Disown(void *ptr);
- A new function for constructing instances is also available:
- Tcl_Obj *
- SWIG_NewInstanceObj(Tcl_Interp *interp, void *ptr,
- swig_type_info *type, int own);
- When used in a typemap, this creates a pointer object and
- an interpreter command that can be used to issue methods and
- access attributes as shown above.
- *** NEW FEATURE ***
-
- 11/23/2001:beazley
- All Python-related %pragma operations have been eliminated.
- Most of these were written for older SWIG versions in order to
- compensate for limitations in earlier releases. In an effort
- to reduce the amount of code-clutter and potential for errors,
- it is easier to simply eliminate the pragmas and to start over
- (if needed). To be honest, I'm not even sure the pragmas
- worked in 1.3.9 and recent releases.
- Note: If you need to insert code into the shadow class file
- created by SWIG, simply use the %shadow directive like this:
- %shadow %{
- def some_python_code():
- print "blah!"
- %}
- *** POTENTIAL INCOMPATIBILITY ***
- 11/22/2001:beazley
- Sweeping changes to the way in which the Python module handles
- shadow classes. In early implementations, shadow classes were
- merely Python wrappers around typed pointer objects. However,
- some users actually wanted to receive the shadow class object in C.
- To accommodate this, the dereferencing of the "this" pointer in
- a shadow class was moved to C as described in CHANGES [8/8/99].
- However, the process of returning pointers to Python was still
- somewhat problematic. Specifically, shadow classes never worked
- in situations such as these:
- - Use of any kind of output typemap ('out' or 'argout')
- - Global variables (broken as far as I can tell).
- In the past, some users have dealt with this by manually trying
- to create shadow class objects themselves from C/C++. However,
- this was difficult because the C wrappers don't really know how
- to get access to the corresponding Python class.
- The Python module has now been modified to automatically attach
- shadow class objects to pointers when they are returned to
- Python. This process occurs in the function SWIG_NewPointerObj()
- so the process is completely transparent to users. As a result,
- shadow classes are now more seamlessly integrated with typemaps
- and other features of SWIG.
- This change may introduce a number of incompatibilities. The
- SWIG_NewPointerObj() now takes an extra parameter "own" to
- indicate object ownership. This can be used to return a pointer
- to Python that Python should destroy. In addition, older code
- that tries to manually construct shadow class objects or which
- expects bare pointers may break---such pointers may already be
- encapsulated by a shadow class.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/20/2001:beazley
- Modified the %insert directive to accept single braces { ... }.
- For example:
- %insert("header") {
- ... some code ...
- }
- This works exactly like %{ ... %} except that the code in the
- braces is processed using the preprocessor. This can be useful
- in certain contexts such as low-level code generation in
- language modules.
- *** NEW FEATURE ***
-
- 11/20/2001:beazley
- Command line options are now translated into preprocessor
- symbols. For example:
-
- ./swig -python -shadow -module blah interface.i
- Creates the symbols:
- SWIGOPT_PYTHON 1
- SWIGOPT_SHADOW 1
- SWIGOPT_MODULE blah
-
- Modules can look for these symbols to alter their code generation
- if needed.
- *** NEW FEATURE ***
-
- 11/20/2001:beazley
- Massive overhaul of the Perl5 module. A lot of code generation is
- now driven by tables and typemaps. The generated wrapper code
- also makes use of tables to install constants, variables, and
- functions instead of inlining a bunch of procedure calls. The
- separate variable initialization function is gone. Most
- code generation is controlled via the perl5.swg file in the
- library.
- *** POTENTIAL INCOMPATIBILITY ***
-
- 11/13/2001:beazley
- Added parsing support for the C++ typename keyword. Primarily this
- is added to better support templates. For example:
- template<typename T> void blah(C& v) {
- typename C::iterator i = v.begin();
- }
- Note: typename is supported in the parser in the same way as 'struct'
- or 'class'. You probably shouldn't use it anywhere except in templates.
- *** NEW FEATURE ***
- 11/11/2001:beazley
- Massive overhaul of the language module API. Most functions now
- use a common, very simple, API. There are also a number of
- interesting semantic side-effects of how code is actually generated.
- Details will be forthcoming in Doc/Manual/Extending.html.
- *** POTENTIAL INCOMPATIBILITY *** Language modules written for
- previous versions of SWIG will no longer work,
- 11/10/2001:beazley
- Fixed a very subtle bug due to unnamed class wrapping. For example, if
- you did this
- typedef struct {
- int x,y;
- } gdPoint, *gdPointPtr;
- void foo(gdPointPtr x);
- Then the foo function would get a type-error. The problem has
- to do with internal typedef handling and the fact that the typedef
- declarations after the struct appear later in the parse tree.
- It should work now. Problem reported by Vin Jovanovic.
- 11/09/2001:beazley
- Subtle change to "out" typemaps (and related variations). The name
- that is attached to the typemap is now the raw C identifier that
- appears on a declaration. This changes the behavior of
- member functions. For example:
- %typemap(out) int foo {
- ...
- }
- class Blah {
- public:
- int foo(); // typemap gets applied
- }
-
- Previous versions never really specified how this was supposed to
- work. In SWIG1.1, you could probably write a typemap for the
- wrapper name like this:
- %typemap(out) int Blah_foo { ... }
- However, this old behavior is now withdrawn and not supported.
- Just use the member name without any sort of special prefix.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/06/2001:beazley
- Changes to Tcl module initialization:
- (1) SWIG now automatically includes the code needed to work with
- Tcl stubs. Simply compile with -DUSE_TCL_STUBS.
- (2) SWIG now automatically calls Tcl_PkgProvide to register
- a package name. The package name is the same as the name
- specified with the %module directive. The version number is
- set to "0.0" by default. To change the version number, use
- swig -pkgversion 1.2 interface.i.
- *** POTENTIAL INCOMPATIBILITY ***
- Modules that provided stubs and Tcl_PkgProvide on their own might
- break. Simply remove that code.
- 11/05/2001:beazley
- Changed code generation of constants in the Tcl module. Constants
- are now stored in a large table that get installed at module startup.
- There are also no longer any static variables so it should generate
- somewhat less code.
- 11/04/2001:beazley
- The "const" typemap has been renamed to "constant" in many language
- modules. "const" is a C keyword which made the handling of the typemap
- directive somewhat awkward in the parser.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/04/2001:beazley
- %typemap directive can now accept nearly arbitrary keyword parameters.
- For example:
- %typemap(in,parse="i",doc="integer") int "..."
- The purpose of the keyword parameters is to supply code generation
- hints to the target language module. The intepretation of the
- parameters is language specific.
- *** NEW FEATURE ***
- 11/04/2001:beazley
- Slight semantic change to internal call/return by value handling.
- In previous versions of SWIG, call-by-value was translated
- into pointers. For example:
- double dot_product(Vector a, Vector b);
- turned into this:
- double wrap_dot_product(Vector *a, Vector *b) {
- return dot_product(*a,*b);
- }
- This translation was normally performed by the SWIG core, outside
- of the control of language modules. However, a side effect
- of this was a lot of bizarre typemap behavior. For example,
- if you did something like this:
- %typemap(in) int32 {
- ...
- }
- You would find that int32 was transformed into a pointer everywhere!
- (needless to say, such behavior is unexpected and quite awkward to
- deal with). To make matters worse, if a typedef was also used,
- the pointer behavior suddenly disappeared.
- To fix this, the pointer transformation is now pushed to the
- language modules. This produces wrappers that look roughly
- like this:
- double wrap_dot_product(Vector *a, Vector *b) {
- Vector arg1 = *a;
- Vector arg2 = *b;
- return dot_product(arg1,arg2);
- }
- This change also makes it easy to define typemaps for
- arbitrary undefined types. For example, you can do this (and it
- will work regardless what int32 is):
- %typemap(in) int32 {
- $1 = (int32) PyInt_AsLong($input);
- }
- *** POTENTIAL IMCOMPATIBILITY ***
- This change may break call/return by value code generation in
- some language modules.
- 11/03/2001:beazley
- Changed the name of the default typemaps to the following:
- %typemap() SWIGTYPE {
- ... an object ...
- }
- %typemap() SWIGTYPE * {
- ... a pointer ...
- }
- %typemap() SWIGTYPE & {
- ... a reference ...
- }
- %typemap() SWIGTYPE [] {
- ... an array ...
- }
- %typemap() enum SWIGTYPE {
- ... an enum value ...
- }
- %typemap() SWIGTYPE (CLASS::*) {
- ... pointer to member ...
- }
- These types are used as the default for all types that don't match
- anything else. See CHANGES log entry for 8/27/2000 for the
- old behavior. The role of these types is also described in
- Doc/Manual/Typemaps.html
- *** POTENTIAL INCOMPATIBILITY ***
-
- 10/25/2001:beazley
- Modified Guile and Mzscheme modules to support
- multi-argument typemaps.
- 10/25/2001: cheetah (william fulton)
- [Java] Fix to handle pointers to arrays.
- 10/24/2001:beazley
- Defining a typemap rule for enum SWIGENUM can now be used
- to define default behavior for enum variables.
- 10/22/2001:beazley
- Ruby module modified to support multi-argument typemaps.
- 10/22/2001:beazley
- The Ruby module can now handle functions with an arbitrary
- number of arguments. Previous versions were limited to
- to functions with only 9 or 16 arguments depending on
- the use of default arguments. Note: from some inspection
- of the Ruby interpreter source, the new approach might be
- a little faster as well.
- 10/18/2001:beazley
- Fixed a bug with forward class declarations and
- templates.
- class Foo <S,T>;
- Bug reported by Irina Kotlova.
- 10/16/2001:beazley
- Support for multivalued typemaps added. The typemaps
- are specified using the syntax below. Within each
- typemap, variable substitution is handled as follows:
- %typemap(in) (int argc, char *argv[]) {
- $arg; // The input object in the target language
- $1; // C local variable for first argument
- $2; // C local variable for second argument
- // These variables refer to either argument
- $1_type, $1_ltype, $1_basetype, etc... (argc)
- $2_type, $2_ltype, $2_basetype, etc... (argv[])
- // Array dimension of argv
- $2_dim0
- }
- Basically any variable that was available in normal typemaps
- is available for either argument by prefacing the variable
- name by '$n_' where n is the argument position.
- Notes:
- (1) Multi-valued typemaps can only be applied to a single
- object in the target scripting language. For example,
- you can split a string into a (char *, int) pair or
- split a list into a (int, char []) pair. It is not
- possible to map multiple objects to multiple arguments.
- (2) To maintain compatibility with older SWIG versions, the
- variables such as $target and $type are preserved and
- are mapped onto the first argument only.
- (3) This should not affect compatibility with older code.
- Multi-valued typemaps are an extension to typemap handling.
- Single valued typemaps can be specified in the usual
- way.
- The old $source and $target variables are officially
- deprecated. Input variables are referenced through
- $arg$ and output values are reference through $result$.
- *** NEW FEATURE ***
- 10/16/2001:beazley
- Added parsing support for multivalued typemaps. The syntax
- is a little funky, but here goes:
- // Define a multivalued typemap
- %typemap(in) (int argc, char *argv[]) {
- ... typemap code ...
- }
- // Multivalued typemap with locals
- %typemap(in) (int argc, char *argv[])(int temp) {
- ... typemap code ...
- }
-
- // Copy a multivalued typemap
- %typemap(in) (int argcount, char **argv) = (int argc, char *argv[]);
- // Apply a multivalued typemap
- %apply (int argc, char *argv[]) { (int argcount, char **argv) };
- Note: this extra parsing support is added for future extension.
- No language modules currently support multi-valued typemaps.
- 10/11/2001:beazley
- Modified the typemap matching code to discard qualifiers when
- checking for a match. For example, if you have a declaration
- like this:
- void blah(const char *x);
- The typemap checker checks for a match in the following order:
- const char *x
- const char *
- char *x
- char *
- If typedef's are involved, qualifier stripping occurs before
- typedef resolution. So if you had this,
- typedef char *string;
- void blah(const string x);
- typemap checking would be as follows:
- const string x
- const string
- string x
- string
- const char *x
- const char *
- char *x
- char *
- The primary reason for this change is to simplify the implementation
- of language modules. Without qualifier stripping, one has to write
- seperate typemaps for all variations of const and volatile (which
- is a pain).
- *** POTENTIAL INCOMPATIBILITY *** Typemaps might be applied in
- places where they weren't before.
- 10/9/2001: beazley
- SWIG now generates wrappers that properly disambiguate
- overloaded methods that only vary in constness. For
- example:
- class Foo {
- ...
- void blah();
- void blah() const;
- ...
- };
- To handle this, the %rename directive can be used normally.
-
- %rename(blah_const) blah() const;
- In the resulting wrapper code, method calls like this
- are now generated:
- (obj)->blah() // Non-const version
- ((Foo const *)obj)->blah() // const version
- This should force the right method to be invoked.
- Admittedly, this is probably obscure, but we might
- as well get it right.
- 10/8/2001: beazley
- The preprocessor now ignores '\r' in the input.
- This should fix the following bug:
- [ #468416 ] SWIG thinks macro defs are declarations?
- 10/8/2001: beazley
- Added support for ||, &&, and ! in constants. This
- fixes SF [ #468988 ] Logical ops break preprocessor.
- However, at this time, constants using these operators
- are not supported (the parser will issue a warning).
- 10/4/2001: beazley
- Added -show_templates command line option. This makes
- SWIG display the code it actually parses to generate
- template wrappers. Mostly useful for debugging.
- *** NEW FEATURE ***
- 10/4/2001: beazley
- Change to semantics of %template directive. When
- using %template, the template arguments are handled
- as types by default. For example:
- %template(vecint) vector<int>;
- %template(vecdouble) vector<double>;
- To specify a template argument that is *not* a type, you
- need to use default-value syntax. For example:
- %template(vecint) vector<int,int=50>;
- %template(vecdouble) vector<int,size=100>;
- In this case, the type name doesn't really matter--only
- the default value (e.g., 50, 100) is used during
- expansion. This differs from normal C++, but I couldn't
- figure out a better way to do it in the parser. Might
- implement an alternative later.
- *** POTENTIAL INCOMPATIBILITY ***
-
- 10/4/2001: beazley
- Major changes to template handling in order to provide
- better integration with the C++ type-system. The main
- problem is as follows:
- Suppose you have a template like this:
- template<class T> void blah(const T x) { stuff };
-
- Now suppose, that you instantiate the template on a
- type like this in SWIG:
- %template(blahint) blah<int *>;
- In C++, this is *supposed* to generate code like this:
- void blah(int *const x) { stuff };
- However, in SWIG-1.3.9, the template substitution gets it wrong
- and produces
- void blah(const int *x) { stuff };
- (notice the bad placement of the 'const' qualifier).
- To fix this, the SWIG parser now generates implicit typedefs
- for template type arguments that produces code roughly
- equivalent to doing this:
- typedef int *__swigtmpl1;
- %template(blahint) blah<__swigtmpl1>;
- which generates code like this:
- void blah(const __swigtmpl1 x) { stuff };
- Since this is correct in both C++ and SWIG, it provides the right
- semantics and allows everything to compile properly. However,
- to clean up the generated code a little bit, the parser keeps
- track of the template types and performs back-substitution to
- the original type when building the parse tree. Thus, even
- though the implicit typedef is used in the input and may appear
- in the generated wrapper file (for proper compilation), the parse
- tree will hide a lot of these details. For example:
- void blah(const __swigtmpl1 x) { stuff };
- will look like it was declared as follows (which is what
- you want):
- void blah(int *const x) { stuff }
- The only place you are likely to notice the typedef hack
- is in bodies of template functions. For example, if you
- did this,
- template<class T> class blah {
- ...
- %addmethods {
- void spam() {
- T tempvalue;
- ...
- }
- }
- }
- you will find that 'T tempvalue' got expanded into some
- strange typedef type. This *still* compiles correctly
- so it's not a big deal (other than looking kind of ugly
- in the wrapper file).
- 10/4/2001: beazley
- Fixed some inheritance problems in Tcl Object interface.
- 10/1/2001: beazley
- Tcl module has changed to use byte-backed pointer strings. This
- implementation should be safe on 64-bit platforms. However,
- the order in which digits appear in pointer values no longer
- directly corresponds to the actual numerical value of a
- pointer (on little-endian machines, pairs of digits appear
- in reverse order).
- 10/1/2001: beazley
- Perl5 module is now driven by a configuration file 'perl5.swg'
- in the SWIG library.
- 10/1/2001: beazley
- The perl5 module no longer tries to apply the "out" typemap
- in code generated for magic variables. I'm surprised that
- this ever worked at all (since all of the code that was there
- was wrong anyways). Use the "varout" typemap to handle
- global variables.
- 10/1/2001: beazley
- Fixed a bug related to character array members of structures.
- For example:
- struct Foo {
- char name[32];
- };
- SWIG is normally supposed to return a string, but this was
- broken in 1.3.9. The reason it was broken was actually
- due to a subtle new feature of typemaps. When a data member
- is set to an array like this, the return type of the related
- accessor function is actually set to an array. This means
- that you can now write typemaps like this:
- %typemap(python,out) char [ANY] {
- $target = PyString_FromStringAndSize($source,$dim0);
- }
- This functionality can be used to replace the defunct
- memberout typemap in a more elegant manner.
- 9/29/2001: beazley
- Some further refinement of qualified C++ member functions.
- For example:
- class Foo {
- ...
- void foo() const;
- ...
- };
- (i) The SWIG parser was extended slightly to allow 'volatile'
- and combinations of 'const' and 'volatile' to be used. This
- is probably rare, but technically legal. Only added for
- completeness.
- (ii) For the purposes of overloading, qualified and non-qualified
- functions are different. Thus, when a class has methods like this:
- void foo();
- void foo() const;
- Two distinct methods are declared. To deal with this, %rename
- and similar directives have been extended to recognize const.
- Thus, one can disambiguate the two functions like this:
- %rename(fooconst) Foo::foo() const;
- or simply ignore the const variant like this:
- %ignore Foo::foo() const;
- Note: SWIG currently has no way to actually invoke the const
- member since the 'const' is discarded when generating wrappers
- for objects.
- 9/27/2001: beazley
- New directive. %namewarn can be used to issue warning
- messages for certain declaration names. The name
- matching is the same as for the %rename directive.
- The intent of this directive is to issue warnings for
- possible namespace conflicts. For example:
- %namewarn("print is a python keyword") print;
- The name matching algorithm is performed after a name
- has been resolved using %rename. Therefore, a
- declaration like this will not generate a warning:
- %rename("Print") print;
- ...
- void print(); /* No warning generated */
- Since the warning mechanism follows %rename semantics, it is
- also to issue warnings for specific classes or just for
- certain member function names.
- (Dave - I've been thinking about adding something like this
- for quite some time. Just never got around to it)
- *** NEW FEATURE ***
- 9/27/2001: beazley
- Enhanced the %ignore directive so that warning messages
- can be issued to users. This is done using %ignorewarn
- like this:
- %ignorewarn("operator new ignored") operator new;
- The names and semantics of %ignorewarn is exactly the
- same as %ignore. The primary purpose of this directive
- is for module writers who want to ignore certain types
- of declarations, but who also want to alert users about it.
- A user might also use this for debugging (since messages
- will appear whenever an ignored declaration appears).
- *** NEW FEATURE ***
- 9/26/2001: beazley
- Super-experimental support for overloaded operators.
- This implementation consists of a few different parts.
- (i) Operator names such as 'operator+' are now allowed
- as valid declarator names. Thus the 'operator' syntax
- can appear *anyplace* a normal declarator name was used
- before. On the surface, this means that operators can
- be parsed just like normal functions and methods.
- However, it also means that operator names can be used
- in many other SWIG directives like %rename. For example:
- %rename(__add__) Complex::operator+(const Complex &);
- (ii) Operators are wrapped *exactly* like normal functions
- and methods. Internally, the operator name is used
- directly meaning that the wrapper code might contain
- statements like this:
- arg0->operator*((Complex const &)*arg1);
- This all seems to parse and compile correctly (at least
- on my machine).
- (iii) SWIG will no longer wrap a declaration if its symbol
- table name contains illegal identifier characters. If
- illegal characters are detected, you will see an error
- like this:
-
- Warning. Can't wrap operator* unless renamed to a valid identifier.
- The only way to fix this is to use %rename or %name to bind
- the operator to a nice name like "add" or something. Note:
- the legal identifier characters are determined by the target
- language.
- There are certain issues with friend functions and operators.
- Sometimes, friends are used to define mixed operators such
- as adding a Complex and a double together. Currently, SWIG
- ignores all friend declarations in a class. A global operator
- declaration can probably be made to work, but you'll have to
- rename it and it probably won't work very cleanly in the
- target language since it's not a class member.
- SWIG doesn't know how to handle operator specifications
- sometimes used for automatic type conversion. For example:
- class String {
- ...
- operator const char*();
- ...
- };
- (this doesn't parse correctly and generates a syntax error).
- Also: operators no longer show up as separate parse-tree
- nodes (instead they are normal 'cdecl' nodes). I may
- separate them as a special case later.
- See Examples/python/operator for an example.
- *** SUPER-EXPERIMENTAL NEW FEATURE ***
- Version 1.3.9 (September 25, 2001)
- ==================================
- 9/25/2001: beazley
- Fixed parsing problem with type declarations like
- 'char ** const'. SWIG parsed this correctly, but the
- internal type was represented incorrectly (the pointers
- and qualifiers were in the wrong order).
- 9/25/2001: beazley
- Withdrew experimental feature (noted below) that was
- causing serious parsing problems.
- Version 1.3.8 (September 23, 2001)
- ==================================
- 9/23/2001: beazley
- Included improved distutils setup.py file in the Tools
- directory (look for the setup.py.tmpl file). Contributed by
- Tony Seward.
- 9/23/2001: beazley
- Included two new RPM spec files in the Tools directory. Contributed
- by Tony Seward and Uwe Steinmann.
-
- 9/21/2001: beazley
- Fixed SF Bug [ #463635 ] Perl5.swg does not compile in Visual C++
- 9/21/2001: beazley
- Two new directives control the creation of default
- constructors and destructors:
- %nodefault
- %makedefault
- These replace %pragma nodefault and %pragma makedefault.
- (old code will still work, but documentation will only
- describe the new directives).
- 9/21/2001: beazley
- Fixed SF Bug [ #462354 ] %import broken in 1.3.7.
- 9/20/2001: beazley
- Parser modified to ignore out-of-class constructor
- and destructor declarations. For example:
- inline Foo::Foo() :
- Bar("foo")
- {
- }
- inline Foo::~Foo() {
- }
- Suggested by Jason Stewart.
- *** EXPERIMENTAL FEATURE ***
- 9/20/2001: beazley
- Modified the parser to ignore forward template class
- declarations. For example:
- template <class V, long S> class MapIter;
- Suggested by an email example from Irina Kotlova.
- 9/20/2001: beazley
- Fixed problem with undeclared tcl_result variable in
- the "out" typemap for Tcl. Reported by Shaun Lowry.
- 9/20/2001: beazley
- Incorporated changes to make SWIG work with ActivePerl.
- Contributed by Joel Reed.
- 9/20/2001: beazley
- Slight change to the parsing of C++ constructor initializers.
- For example:
- class Foo : public Bar {
- public:
- Foo() : Bar(...) {...}
- };
- SWIG now discards the contents of the (...) regardless of
- what might enclosed (even if syntactically wrong). SWIG
- doesn't need this information and there is no reason to
- needless add syntax rules to handle all of the possibilities
- here.
- 9/20/2001: beazley
- Change to typemaps for structure members. If you have a
- structure like this:
- struct Vector {
- int *bar;
- };
- The member name 'bar' is now used in any accessor functions.
- This allows the "in" typemap to be used when setting the value.
- For example, this typemap
- %typemap(python,in) int *bar {
- ...
- }
- now matches Vector::bar. It should be noted that this will also
- match any function with an argument of "int *bar" (so you should
- be careful).
- *** NEW FEATURE. POTENTIAL INCOMPATIBILITY ***
- 9/20/2001: beazley
- Fixed SF bug #462642 setting string values in structures
- 9/20/2001: beazley
- Fixed SF bug #462398 problem with nested templates.
- 9/20/2001: beazley
- Fixed SF bug #461626 problem with formatting and C++ comments.
-
- 9/20/2001: beazley
- Fixed SF bug #462845 Wrong ownership of returned objects.
-
- 9/19/2001: beazley
- Fixed SF bug #459367. Default constructors for classes
- with pure virtual methods.
- 9/19/2001: beazley
- Fixed problem with default arguments and class scope. For
- example:
- class Foo {
- public:
- enum bar { FOO, BAR };
- void blah(bar b = FOO);
- ...
- }
- SWIG now correctly generates a default value of "Foo::FOO" for
- the blah() method above. This used to work in 1.1, but was
- broken in 1.3.7. Bug reported by Mike Romberg.
- Version 1.3.7 (September 3, 2001)
- ==================================
- 9/02/2001: beazley
- Added special %ignore directive to ignore declarations. This
- feature works exactly like %rename. For example:
- %ignore foo; // Ignore all declarations foo
- %ignore ::foo; // Only ignore foo in global scope
- %ignore Spam::foo; // Only ignore in class Spam
- %ignore *::foo; // Ignore in all classes
- %ignore can also be parameterized. For example:
- %ignore foo(int);
- %ignore ::foo(int);
- %ignore Spam::foo(int);
- %ignore *::foo(int);
- *** NEW FEATURE ***
-
- 9/02/2001: cheetah (william fulton)
- [Java] shadowcode pragma modified so that the code that is output
- in the shadow file is placed relative to where it is placed in the
- c/c++ code. This allows support for JavaDoc function comments.
- 9/01/2001: beazley
- Fixed SF Patch [ #447791 ] Fix for python -interface option.
- Submitted by Tarn Weisner Burton.
- 9/01/2001: beazley
- SWIG no longer generates default constructors/destructors
- for a class if it only defines a private/protected constructor
- or destructor or if any one of its base classes only has
- private constructors/destructors. This was reported in
- SF Patch [ #444281 ] nonpublic/default/inhereted ctor/dtor
- by Marcelo Matus.
- 9/01/2001: beazley
- Added patch to Perl5 module that allows constants to be
- wrapped as constants that don't require the leading $.
- This feature is enabled using the -const option.
- Patch contributed by Rich Wales.
- *** NEW FEATURE ***
- 8/31/2001: beazley
- Added parsing support for the 'volatile' type qualifier.
- volatile doesn't mean anything to SWIG, but it is
- needed to properly generate prototypes for declarations
- that use it. It's also been added to make the SWIG type
- system more complete.
- *** NEW FEATURE ***
- 8/30/2001: beazley
- Added support for parameterized %rename directive. *** This
- new feature can be used to greatly simplify the task of
- resolving overloaded methods and functions. ***
-
- In prior versions of SWIG, the %rename directive was
- used to consistently apply an identifier renaming. For
- example, if you said this:
- %rename foo bar;
- Every occurrence of 'foo' would be renamed to 'bar'.
- Although this works fine for resolving a conflict with a
- target language reserved word, it is useless for
- for dealing with overloaded methods. This is because
- all methods are simply renamed to the same thing
- (generating the same conflict as before).
- Therefore, the only way to deal with overloaded methods
- was to go through and individually rename them all using
- %name. For example:
- class Foo {
- public:
- virtual void bar(void);
- %name(bar_i) virtual void bar(int);
- ...
- };
- To make matters worse, you had to do this for all
- derived classes too.
- class Spam : public Foo {
- public:
- virtual void bar(void);
- %name(bar_i) virtual void bar(int);
- ...
- };
- Needless to say, this makes it extremely hard to resolve
- overloading without a lot of work and makes it almost
- impossible to use SWIG on raw C++ .h files.
- To fix this, %rename now accepts parameter declarators.
- The syntax has also been changed slightly. For example,
- the following declaration renames all occurrences of 'bar(int)'
- to 'bar_i', leaving any other occurrence of 'bar' alone.
- %rename(bar_i) bar(int);
- Using this feature, you can now selectively rename
- certain declarations in advance. For example:
- %rename(bar_i) bar(int);
- %rename(bar_d) bar(double);
- // Include raw C++ header
- %include "header.h"
- When %rename is used in this manner, all occurrence of bar(int)
- are renamed wherever they might occur. More control is obtained
- through explicit qualification. For example,
- %rename(bar_i) ::bar(int);
- only applies the renaming if bar(int) is defined in the global scope.
- The declaration,
-
- %rename(bar_i) Foo::bar(int);
- applies the renaming if bar(int) is defined in a class Foo.
- This latter form also supports inheritance. Therefore, if you
- had a class like this:
- class Spam : public Foo {
- public:
- void bar(int);
- }
- The Spam::bar(int) method would also be renamed (since Spam
- is a subclass of Foo). This latter feature makes it easy
- for SWIG to apply a consistent renaming across an entire
- class hierarchy simply by specifying renaming rules for
- the base class.
- A class wildcard of * can be used if you want to renaming
- all matching members of all classes. For example:
- %rename(bar_i) *::bar(int);
- will rename all members bar(int) that are defined in classes.
- It will not renamed definitions of bar(int) in the global
- scope.
- The old use of %rename is still supported, but is somewhat
- enhanced.
- %rename(foo) bar; // Renames all occurrences of 'bar'.
- %rename(foo) ::bar; // Rename all 'bar' in global scope only.
- %rename(foo) *::bar; // Rename all 'bar' in classes only.
- %rename(foo) Foo::bar; // Rename all 'bar' defined in class Foo.
- *** NEW FEATURE ***
- 8/30/2001: beazley
- Added support for data-member to member-function
- transformation. For example, suppose you had a
- structure like this:
- struct Vector {
- double x,y;
- };
- Now suppose that you wanted to access x and y
- through a member function interface instead
- of the usual SWIG behavior. For example:
- f.set_x(3.4) # instead of f.x = 3.4
- x = f.get_x() # instead of x = f.x
- To do this, simply use the new %attributefunc
- directive. For example:
- %attributefunc(get_%s,set_%s)
- struct Vector {
- double x,y;
- };
- %noattributefunc
- The arguments to %attributefunc are C-style printf
- format strings that determine the naming convention
- to use. %s is replaced with the actual name of the
- data member. SWIG provides a number of printf
- extensions that might help. For example, if you
- wanted to title case all of the attributes, you
- could do this:
- %attributefunc(get%(title)s,set%(title)s);
- This will turn an attribute 'bar' to 'getBar()' and 'setBar()'.
- (someone requested this long ago, but I finally figured
- how to implement it in a straightforward manner).
- *** EXPERIMENTAL NEW FEATURE ***
-
- 8/30/2001: beazley
- SWIG now automatically generates default constructors
- and destructors if none are defined. This used to be
- enabled with a command line switch -make_default, but
- most people want these functions anyways. To turn
- off this behavior use the -no_default option or include
- the following pragma in the interface file:
-
- %pragma no_default;
-
- This may break certain interfaces that defined their
- own constructors/destructors using the same naming
- convention as SWIG. If so, you will get duplicate
- symbols when compiling the SWIG wrapper file.
- *** POTENTIAL INCOMPATIBILITY ***
- 8/29/2001: beazley
- Changes to Perl5 shadow class code generation. Iterators
- are no longer supported (FIRSTKEY, NEXTKEY). Also, attribute
- access has been changed to rely on inheritance in order
- to provide better behavior across modules.
- 8/28/2001: beazley
- Various obscure improvements to the type system and classes.
- Strange declarations like this are now wrapped correctly
- (i.e., the generated wrapper code doesn't cause the C++
- compiler to die with a type error).
- class Foo {
- public:
- typedef double Real;
- Real foo(Real (*op)(Real,Real), Real x, Real y);
- };
- Inheritance of types is also handled correctly.
-
- 8/28/2001: beazley
- Changes to class wrappers. When SWIG sees two classes like this,
-
- class X {
- public:
- void foo();
- ...
- }
-
- class Y : public X {
- public:
- void bar();
- ...
- }
-
- it now only generates two wrapper functions:
-
- X_foo(X *x) { x->foo(); }
- Y_bar(Y *y) { y->bar(); }
-
- Unlike SWIG1.15, the foo() method does *not* propagate to a wrapper
- function Y_foo(). Instead, the base class method X_foo() must be
- used.
- This change should not affect modules that use shadow classes, but
- it might break modules that directly use the low-level C wrappers.
- This change is being made for a number of reasons:
- - It greatly simplifies the implementation of SWIG--especially
- with anticipated future changes such as overloaded methods.
- - It results in substantially less wrapper code--especially
- for big C++ class hierarchies (inherited declarations
- are no longer copied into every single derived class).
- - It allows for better code generation across multiple
- SWIG generated modules (code isn't replicated in
- every single module).
- *** POTENTIAL INCOMPATIBILITY ***
- 8/22/2001: cheetah (william fulton)
- Provided some Windows documentation in the Win directory and some
- Visual C++ project files for running examples on Windows.
- 8/28/2001: mkoeppe
- [Guile] Handle renamed overloaded functions properly;
- thanks to Marc Zonzon <Marc.Zonzon@univ-rennes1.fr> for the
- patch. See the new test case name_cxx.
- 8/27/2001: mkoeppe
- [Tcl] Removed lots of warnings issued by the Sun Forte
- compilers, which were caused by mixing function pointers
- of different linkages (C++/C).
- 8/23/2001: mkoeppe
- Improved the MzScheme module by porting Guile's pointer
- type checking system and making type dispatch
- typemap-driven.
- 8/22/2001: beazley
- Entirely new symbol table processing. SWIG should be able to
- report much better error messages for multiple declarations.
- Also, the new symbol table allows for overloaded functions
- (although overloading isn't quite supported in the language
- modules yet).
- 8/22/2001: cheetah (william fulton)
- * [Java] %new support added.
- * [Java] Package JNI name refixed!
- 8/19/2001: beazley
- Python module modified to support pointers to C++ members. This
- is an experimental feature.
- *** NEW FEATURE ***
-
- 8/19/2001: beazley
- Added limited parsing and full type-system support for pointers to
- members. None of SWIG's language modules really know how to deal with
- this so this is really only provided for completeness and future
- expansion. Note: SWIG does not support pointers to members which
- are themselves pointers to members, references to pointers to members,
- or other complicated declarations like this.
- *** NEW FEATURE ***
- 8/19/2001: beazley
- SWIG is much better at parsing certain C++ declarations. Operators and
- friends generally don't cause anymore syntax errors. However, neither
- are really supported.
- 8/18/2001: beazley
- Added *highly* experimental support for wrapping of C++
- template declarations. Since C++ templates are essentially
- glorified macros and SWIG has a fully operational C
- preprocessor with macro support, the parser now converts
- template declarations to macros. For example, a function
- template like this
- template<class T> T max(T a, T b);
- is internally converted into a macro like this:
- %define %_template_max(__name,T)
- %name(__name) T max(T a, T b);
- %enddef
- To instantiate a version of the template, a special %template declaration
- is used like this:
- %template(maxint) max<int>;
- %template(maxdouble) max<double>;
- The parameter to the %template directive must be proper C identifier that's
- used to uniquely name the resulting instantiation. When used, the
- the expanded macro looks like this:
- %name(maxint) int max(int a, int b);
- %name(maxdouble) double max(double a, double b);
- A similar technique is used for template classes. For instance:
- template<class T> class vector {
- T *data;
- int sz;
- public:
- vector(int nitems);
- T *get(int n);
- ...
- };
- Gets converted into a macro like this:
- %define %_template_vector(__name, T)
- %{
- typedef vector<T> __name;
- %}
- class __name {
- T *data;
- int sz;
- public:
- __name(int nitems);
- T *get(int n);
- ...
- };
- typedef __name vector<T>;
- %enddef
- A specific instantiation is created in exactly the same way:
- %template(intvec) vector<int>;
- The resulting code parsed by SWIG is then:
- %{
- typedef vector<int> intvec;
- %}
- class intvec {
- int *data;
- int sz;
- public:
- intvec(int nitems);
- int *get(int n);
- ...
- };
- typedef intvec vector<int>;
- Note: the last typedef is non-standard C and is used by SWIG to provide
- an association between the name "intvec" and the template type
- "vector<int>".
- CAUTION: This is an experimental feature and the first time SWIG has
- supported C++ templates. Error reporting is essential non-existent.
- It will probably break in certain cases.
- *** EXPERIMENTAL NEW FEATURE ****
- 8/15/2001: beazley
- Change to wrapping of multi-dimensional arrays. Arrays
- are now properly mapped to a pointer to an array of
- one less dimension. For example:
- int [10]; --> int *
- int [10][20]; --> int (*)[20];
- int [10][20][30]; --> int (*)[20][30];
- This change may break certain SWIG extensions because
- older versions simply mapped all arrays into a single
- pointer such as "int *". Although possibly unusual,
- the new version is correct in terms of the C type system.
- *** POTENTIAL INCOMPATIBILITY ***
-
- 8/06/2001: cheetah (william fulton)
- * [Java] Array setters generated for struct/class array members.
- 8/13/2001: beazley
- Many improvements to Tcl/Perl/Python modules to better
- work with multiple interface files and the %import directive.
- 8/13/2001: beazley
- Fixed up the behavior of %import in the Python module.
- SWIG no longer pollutes the module namespace by using
- 'from module import *' to refer to the other module.
- Instead, it does a proper 'import module'. Also, SWIG
- may work a lot better when importing modules that include
- references to other imported modules.
- 8/13/2001: mkoeppe
- Added new typemap substitutions, generalizing those of the
- Guile-specific 5/27/2001 changes:
- * $descriptor is the same as SWIGTYPE$mangle, but also
- ensures that the type descriptor of this name gets
- defined.
- * $*type, $*ltype, $*mangle, $*descriptor are the same as
- the variants without star, but they REMOVE one level of
- pointers from the type. (This is only valid for pointer
- types.)
- * $&type, $<ype, $&mangle, $&descriptor are the same as
- the variants without ampersand, but they ADD one level of
- pointers to the type.
- The Guile-specific substitution $basedescriptor was removed
- because it was useless.
- 8/12/2001: beazley
- The %extern directive is now deprecated and withdrawn. The
- purpose of this directive was to import selected definitions
- from other interface files and headers. However, the same
- functionality is better handled through %import. This
- leaves SWIG with two file inclusion directives:
- %include filename - Inserts into current interface
- %import filename - Import types and classes from
- another module
- *** POTENTIAL INCOMPATIBILITY ***
- 8/09/2001: beazley
- Added new support for wrapping C/C++ callback functions.
- A common problem with some C libraries is that many
- functions take a function pointer as an argument. For example:
- int do_op(..., int (*op)(int,int), ...);
- Unfortunately, the only way to call such a function is to
- pass it a function pointer of some compatible type. In
- previous versions of SWIG, you had to solve this problem
- with some really gross hacks. For example, if you wanted to
- use the following function as a callback,
- int foo(int, int);
- you had to install a pointer to it as a constant. For example:
- %constant int (*FOO)(int,int) = foo;
- or
- const int (*FOO)(int,int) = foo;
- or if you had a really old SWIG version:
- typedef int (*OP_FUNC)(int,int);
- int do_op(..., OP_FUNC, ...);
- const OP_FUNC FOO = foo;
-
- Now, you can do one of two things:
- %constant int foo(int,int);
- This creates a constant 'foo' of type int (*)(int,int).
- Alternatively, you can do this:
- %callback("%s");
- int foo(int,int);
- int bar(int,int);
- %nocallback;
- In this case, the functions are installed as constants where
- the name is defined by the format string given to %callback().
- If the names generated by the format string differ from the
- actual function name, both a function wrapper and a callback
- constant are created. For example:
- %callback("%(upper)s");
- int foo(int,int);
- int bar(int,int);
- %nocallback;
-
- Creates two wrapper functions 'foo', 'bar' and additionally
- creates two callback constants 'FOO', 'BAR'.
- Note: SWIG still does not provide automatic support for
- writing callback functions in the target language.
- *** NEW FEATURE ***
- 8/06/2001: cheetah (william fulton)
- * struct nesting fixes as per SF bug #447488.
- 8/03/2001: beazley
- The %name directive now applies to constants created with
- #define and %constant. However, most language modules
- were never written to support this and will have to be
- modified to make it work. Tcl, Python, and Perl modules
- are working now.
- *** NEW FEATURE ***
- 8/03/2001: beazley
- Massive changes and simplification of C declaration parsing.
- Although SWIG is still not a full C parser, its ability
- to handle complex datatypes including pointers to functions
- and pointers to arrays has been vastly improved.
- 8/03/2001: cheetah (william fulton)
- * Distribution fixes: autoconf no longer needed to install SWIG.
- 8/02/2001: beazley
- Removed two undocumented parsing features. SWIG no longer
- supports out-of-class static function or variable
- declarations. For example:
- static int Foo::bar;
- This feature may return if there is sufficient demand.
- However, since SWIG is most often used with header files,
- it is more likely for these definitions to be included
- in the class definition.
- *** POTENTIAL INCOMPATIBILITY ***
- 8/02/2001: cheetah (william fulton)
- * Cleanup of the GIFPlot examples. Upgraded Java GIFPlot example.
- 8/01/2001: cheetah (william fulton)
- * [Java] Efficiency changes: _cPtr used where possible rather than
- getCPtr(). Bug fixes for inheritance - derived class sometimes
- didn't delete the c memory when _delete() was called.
- * [Java] Abstract c++ classes are wrapped with a java abstract shadow
- class. Also a pure virtual function is mapped with an abstract method.
- * The default output file has always been <module>_wrap.c. It is now
- <module>_wrap.cxx if the -c++ commandline option is passed to swig.
- This has been done as otherwise c++ code would appear in a c file.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/31/2001: beazley
- Modified the %constant directive to be more C-like in syntax.
- The syntax is now:
- %constant NAME = VALUE;
- %constant TYPE NAME = VALUE;
-
- For example:
- %constant Foo *Bar = &Spam;
- A more subtle case is as follows:
- %constant int (*FOO)(int,int) = blah;
- *** POTENTIAL INCOMPATIBILITY *** Modules that were using
- the %constant directive directly will need to be modified.
-
- 7/30/2001: beazley
- Removed obscure and undocumented form of the %inline directive:
- %inline int blah(int a, int b) {
- ...
- }
- *** POTENTIAL INCOMPATIBILITY ***
- (note: this feature was never documented and is withdrawn)
- 7/30/2001: beazley
- Removed support for functions with no explicitly declared
- return type. For example:
- foo(int);
- In C, such functions were implicitly assumed to return an 'int'.
- In C++, this is illegal. Either way, it's considered bad
- style. Removing support for this in SWIG will simplify
- certain issues in parsing.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/30/2001: mkoeppe
- * Partial merge from the CVS trunk. The Source/DOH directory
- and most of the Source/Swig directory is up-to-date now.
- * [Guile] %scheme is now a macro for %insert("scheme").
- New syntax: %scheme "FILENAME";
- New syntax: %scheme %{ SCHEME-CODE %}
- New macros %multiple_values, %values_as_list,
- %values_as_vector.
- 7/29/2001: beazley
- %readonly and %readwrite have been turned into SWIG pragmas.
- %pragma(swig) readonly and %pragma(swig) readwrite. Macros
- are used to provide backwards compatibility.
- 7/29/2001: beazley
- Minor changes to %pragma directive. %pragma must always
- be directed to a specific language. For example:
- %pragma(swig) make_default;
- %pragma(perl5) include = "blah.i";
- Also extended the pragma directive to allow code blocks
-
- %pragma(foo) code = %{
- ... some code ...
- %}
- *** POTENTIAL INCOMPATIBILITY ***
- 7/29/2001: beazley
- Change to the way 'const' variables are wrapped. In
- previous versions of SWIG, a 'const' variable was
- wrapped as a constant. Now, 'const' variables are
- wrapped as read-only variables. There are several
- reasons for making this change, mostly pertaining to
- subtle details of how 'const' actually works.
- This will probably break old interfaces that used 'const'
- to create constants. As a replacement, consider using this:
- const int a = 4; ===> %constant int a = 4;
- *** POTENTIAL INCOMPATIBILITY ***
- 7/29/2001: beazley
- Reorganization and simplification of type parsing.
- Types with 'const' should work correctly now.
- 7/29/2001: beazley
- Most swig directives related to the documentation system
- are now deprecated.
- 7/29/2001: beazley
- Removed support for Objective-C in order to simplify
- parser reconstruction. Will return if there is sufficient
- demand.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/29/2001: beazley
- Code inclusion has been modified in the parser. A common
- directive %insert is now used for everything. This
- inserts a file into the output:
- %insert(header) "foo.swg"
- This inserts some inline code into the output
- %insert(header) %{
- ... some code ...
- %}
- There are five predefined targets for the insert directive:
- "header" - Header section of wrapper file
- "runtime" - Runtime section of wrapper file
- "wrapper" - Wrapper section
- "init" - Initialization function
- "null" - Nothing. Discard.
- The following directives are still supported, but are
- now defined in terms of macros:
- %{ ... %} -> %insert(header) %{ ... %}
- %init %{ ... %} -> %insert(init) %{ ... %}
- %wrapper %{ ... %} -> %insert(wrapper) %{ ... %}
- %runtime %{ ... %} -> %insert(runtime) %{ ... %}
- Language modules can define new named targets by using the
- C API function Swig_register_filebyname() (see main.cxx).
- For example, if you wanted to expose a shadow class file,
- you could do this:
- Swig_register_filebyname("shadow", f_shadow);
- Then in the interface file:
- %insert(shadow) %{ ... %}
- Note: this change should not affect any old interfaces, but
- does open up new possibilities for enhancements.
- 7/29/2001: beazley
- SWIG now always includes a standard library file 'swig.swg'.
- This file defines a large number of macro definitions
- that define the behavior of various SWIG directives.
- Previously, all SWIG directives were handled as special
- cases in the parser. This made the parser a large
- bloated mess. Now, the parser is stripped down to a few
- simple directives and macros are used to handle everything else.
- 7/26/2001: cheetah (william fulton)
- * Fixes for Sourceforge bug #444748 - new testcase cpp_static:
- [TCL] Class with just static member variable/function fix
- [Java] Fixed static variables support
- [Ruby] Static variables workaround removed
- 7/27/2001: mkoeppe
- * stype.c (SwigType_default): Strip qualifiers first. The
- default type of "int * const" is now "SWIGPOINTER *".
- * main.cxx: Define "__cplusplus" in SWIG's preprocessor if
- in C++ mode.
- * [Guile]: Added some support for arrays and C++
- references, fixing the "constant_pointers" test case.
- * Moved most tests from the old Guile-specific test-suite
- to the new test-suite. Also moved perl5/pointer-cxx
- example there.
- 7/26/2001: cheetah (william fulton)
- * Test-suite added.
- * Initial testcases: constant_pointers cpp_enum defines
- sizeof_pointers unions virtual_destructor
- * Make clean improvements.
- 7/24/2001: cheetah (william fulton)
- * [Java] Underscores in the package name and/or module name
- no longer give linking problems.
- 7/17/2001: cheetah (william fulton)
- * More parser bug fixes for constant pointers
- 7/19/2001: mkoeppe
- * [Guile] Aesthetic improvement in variable wrappers.
- 7/18/2001: beazley
- * Fixed core-dump problem in pointer library when
- freeing character arrays.
- SF Bug [ #415837 ] pointer lib core dump
- 7/18/2001: beazley
- * Fixed problem with default destructors and shadow
- classes. SF bug #221128.
- 7/18/2001: beazley
- * To provide better line-number tracking in interfaces
- with lots of macros, special locator comments are
- now generated by the SWIG preprocessor. For example:
- /*@foo.i,42,BLAH@*/expanded macro/*@@*/
- The first /*@...@*/ sequence sets the context
- to point to the macro code. The /*@@*/ comment
- terminates the context. The SWIG parser should
- ignore all of the locator comments as should
- the C compiler (should such comments end up
- in generated wrapper code).
- 7/18/2001: mkoeppe
- * The parser now handles severely constified types in
- typemaps. This introduced a new shift/reduce conflict, but
- only with a heuristic function-pointer catch-all rule.
- * [Guile]: Added typemaps for severely constified types.
- * Fixed the "template-whitespace" problem by canonicalizing
- whitespace, especially around angle brackets and commas.
- 7/17/2001: mkoeppe
- * [Guile]: A Scheme file is emitted if the -scmstub FILE.SCM
- command-line option is used. The %scheme directive
- (implemented as a macro for a pragma) allows to insert
- arbitrary code here. In "simple" and "passive" linkage,
- the file gets filled with define-module and export
- declarations.
- 7/17/2001: cheetah (william fulton)
- * Parser bug fix to support constant pointers, eg int* const ptr.
- Fixed everywhere - variables, parameters, return types etc. Note that
- when wrapping a constant pointer variable only the getter is generated.
- 7/17/2001: mkoeppe
- * Fixed SF bug #441470 (#define X "//" would not be parsed,
- see test-suite entry "preproc-1"), reported by T. W. Burton
- <twburton@users.sf.net>.
- * Changed the type of character constants to "char", rather
- than "char *". Changed the individual language modules
- to keep the old behaviour, except for the Guile module,
- where it is desired to make them Scheme characters. This
- fixes SF bug #231409, test-suite entry "char-constant".
- * Applied patch for DOH/Doh/memory.c by Les Schaffer
- <schaffer@optonline.net> (avoid required side effects in
- assert).
- 7/17/2001: cheetah (william fulton)
- * Bug fix in parser for virtual destructor with void as parameter
- * Bug fix in parser #defines embedded within classes/structs/unions
- Consequently %constant can now also be placed within a struct/class/union.
- * Bug fix in parser to allow sizeof(*I_am_a_pointer) within a #define
- 7/16/2001: mkoeppe
- * Added changes for the Macintosh contributed by Luigi
- Ballabio <ballabio@mac.com>.
- * Some "const" fixes in the code.
- * [Guile]: Made the constant-wrapper functions much shorter.
- 7/13/2001: mkoeppe
- * [Guile]: Some "const" fixes for Guile version 1.3.4.
- * Handle anonymous arguments with default values and static
- array members of classes. Both bugs reported by Annalisa Terracina
- <annalisa.terracina@datamat.it>; see the files
- Examples/guile/test-suite/static-array-member.i and
- anonymous-arg.i.
- Version 1.3.6 (July 9, 2001)
- =============================
- 7/09/2001: cheetah (william fulton)
- * GIFPlot examples: FOREGROUND and BACKGROUND definition missing
- after TRANSPARENT #define fix in GIFPlot
- 7/03/2001: beazley
- Fixed up the version numbers so that the release is known
- as 1.3.6. All future releases should have a similar
- version format.
- 7/02/2001: mkoeppe
- * [Python]: Prevent the problem of self.thisown not being
- defined if the C++ class constructor raised an exception.
- Thanks to Luigi Ballabio <ballabio@mac.com>.
- 6/29/2001: mkoeppe
- * More portability fixes; fixed "gcc -Wall" warnings.
- 6/29/2001: cheetah (william fulton)
- * GIFPlot examples: TRANSPARENT #define multiple times on Solaris
- (clashes with stream.h).
- * Multiple definition bug fix for shadow classes. The perl and python
- modules had workarounds which have been replaced with fixes in
- the core. Many of the Language::cpp_xxxx functions now set a
- flag which the derived classes can access through
- is_multiple_definition() to see whether or not code should be
- generated. The code below would have produced varying degrees
- of incorrect shadow class code for the various modules:
- class TestClass
- {
- public:
- TestClass() {}
- TestClass(int a) {}
- ~TestClass() {}
- unsigned long xyz(short k) {}
- unsigned long xyz(int n) {}
- static void static_func() {}
- static void static_func(int a) {}
- };
- void delete_TestClass(int a);
- 6/27/2001: mkoeppe
- * [Perl] Another const-related portability fix.
- 6/26/2001: cheetah (william fulton)
- * [Java] Added in cpp_pragma() support with a host of new pragmas - see
- jswig.html. These are designed for better mixing of Java and c++. It
- enables the user to specify pure Java classes as bases and/or interfaces
- for the wrapped c/c++.
- * [Java] Old pragmas renamed. Warning given for the moment if used.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 6/25/2001: mkoeppe
- * Incorporated more build changes contributed by Wyss Clemens
- <WYS@helbling.ch> for swig/ruby on cygwin.
- 6/20/2001: cheetah (william fulton)
- * Makefile mods so that 'make check' uses the swig options in the makefiles
- * [Java] Removed Generating wrappers message
- * [Java] NULL pointer bug fix
- * [Java] Bug fix for Kaffe JVM
- 6/20/2001: mkoeppe
- * SWIG_TypeQuery from common.swg now returns a
- swig_type_info* rather than a void*. This fixes a problem
- when using pointer.i and C++, as illustrated by the new
- test-suite example perl5/pointer-cxx.
- * Portability fixes (const char *).
- * Incorporated build changes contributed by Wyss Clemens
- <WYS@helbling.ch>, which make swig runnable on cygwin.
- 6/19/2001: cheetah (william fulton)
- * [Java] Bug fix for SF bug #211144. This fix is a workaround
- until fixed in the core.
- 6/19/2001: mkoeppe
- * [Guile]: Portability fixes for use with the Sun Forte
- compilers.
- * [Tcl]: Portability fix (const char *).
- * [Tcl]: Configure now first tries to find a tclConfig.sh
- file in order to find the Tcl include directory, library
- location and library name.
- * [Python]: Added a few possible library locations.
- 6/18/2001: mkoeppe
- * [Guile]: Don't call scm_c_export if nothing is to be
- exported. Don't warn on %module if module has been set
- already (this frequently occurs when %import is used).
- 6/16/2001: mkoeppe
- * [Guile]: New "passive" linkage, which is appropriate for
- multi-module extensions without Guile module magic.
- 6/15/2001: mkoeppe
- * [Guile]: Fixed printing of smobs (space and angle were
- missing).
- * Properly generate type information for base classes
- imported with the %import directive. Thanks to Marcelo
- Matus <mmatus@acms.arizona.edu> for the report and the
- patch; this closes SF bug #231619; see also
- Examples/guile/test-suite/import*.
- * [Guile]: Fix casting between class and base class; the
- runtime type system had it the wrong way around; see
- Examples/guile/test-suite/casts.i
- * Make typemaps for SWIGPOINTER * with arg name take
- precedence over those without arg name, to match normal
- typemap precedence rules.
- * Fixed the random-line-numbers problem reported as SF bug
- #217310; thanks to Michael Scharf <scharf@users.sf.net>.
- * [Guile]: Handle the %name and %rename directives.
- * New syntax: %name and %rename now optionally take double
- quotes around the scripting name. This is to allow scripting
- names that aren't valid C identifiers.
- 6/14/2001: beazley
- Made a minor change to the way files are loaded in
- order to get file/line number reporting correct in
- the preprocessor.
- 6/14/2001: mkoeppe
- * The parser now understands the (non-standard) "long long"
- types. It is up to the individual language modules to
- provide typemaps if needed. Reported by Sam Steingold, SF
- bug #429176.
- * The parser now understands arguments like "const int *
- const i". This fixes SF bug #215649.
- * Fixed the Guile test-suite.
- 6/13/2001: mkoeppe
- Partial merge from the CVS trunk at tag
- "mkoeppe-merge-1". This covers the following changes:
- | 01/16/01: ttn
- | Wrote table of contents for Doc/engineering.html. Added section
- | on CVS tagging conventions. Added copyright to other docs.
- | 9/25/00 : beazley
- | Modified the preprocessor so that macro names can start with a '%'.
- | This may allow new SWIG "directives" to be defined as macros instead
- | of having to be hard-coded into the parser.
- |
- | *** Also a yet-to-be-documented quoting mechanism with backquotes
- | *** has been implemented?
- 6/13/2001: mkoeppe
- * When configure does not find a language, don't use default
- paths like /usr/local/include; this only causes build
- problems.
- * New directory: Examples/Guile/test-suite, where a few
- bugs in 1.3a5 are demonstrated.
- * Handle C++ methods that have both a "const" and a "throw"
- directive (see Examples/Guile/test-suite/cplusplus-throw.i);
- thanks to Scott B. Drummonds for the report and the fix.
- * Handle C++ pointer-reference arguments (like "int *& arg")
- (see Examples/Guile/test-suite/pointer-reference.i,
- reported as SF bug #432224).
- * [Ruby] Fixed typo in rubydec.swg; thanks to Lyle Johnson!
- * Don't stop testing when one test fails.
- * [Guile, MzScheme] Don't print "Generating wrappers...".
- 6/12/2001: mkoeppe
- [Guile] VECTORLENINPUT and LISTLENINPUT now have separate
- list length variables. TYPEMAP_POINTER_INPUT_OUTPUT
- attaches argument documentation involving SCM_TYPE to the
- standard pointer typemaps. INOUT is now an alias for BOTH.
- 6/12/2001: cheetah (william fulton)
- Some Java documentation added.
- [Java] Fixed bugs in import pragma and shadow pragma.
- 6/12/2001: mkoeppe
- Fix declarations of SWIG_define_class
- (Lib/ruby/rubydec.swg) and SWIG_TypeQuery
- (Lib/common.swg). Thanks to Lyle Johnson
- <ljohnson@resgen.com> for the patches.
- 6/11/2001: mkoeppe
- [Guile] Use long instead of scm_bits_t; this makes the
- generated wrapper code compatible with Guile 1.3.4
- again. Thanks to Masaki Fukushima for pointing this out.
- 6/11/2001: cheetah (william fulton)
- The generic INSTALL file from autoconf added. Few changes to README file.
- 6/11/2001: mkoeppe
- Fixed typo in Makefile.in; thanks to Greg Troxel
- <gdt@ir.bbn.com>.
- 6/08/2001: cheetah (william fulton)
- make check works again. Examples/GIFPlot configure generated by
- top level autoconf now.
- 6/08/2001: mkoeppe
- Another build change: The new script autogen.sh runs
- autoconf in the appropriate directories. The top-level
- configure also configures in Examples/GIFPlot.
- 6/07/2001: mkoeppe
- Made the Makefile work with non-GNU make again.
- 6/07/2001: cheetah (william fulton)
- [Java] Class/struct members that are arrays of pointers to classes/structs -
- Shadow class's get/set accessors now use Java classes instead of longs (pointers).
- [Java] Shadow classes will now clean up memory if function return type
- is a class/struct.
- [Java] New example called reference based on the same example from other modules.
- 6/06/2001: mkoeppe
- New configure option --with-release-suffix allows for
- attaching a suffix to the swig binary and the swig runtime
- libraries. Minor changes to the build system. "swig
- -swiglib" works again. If invoked with the new option
- "-ldflags", SWIG prints a line of linker flags needed to
- link with the runtime library of the selected language
- module.
- 6/06/2001: mkoeppe
- [Guile] gswig_list_p is an int, not a SCM. This typo
- caused warnings when compiling with a Guile configured with
- strict C type checking. In INPUT and BOTH typemaps
- generated by the SIMPLE_MAP macro, use the SCM_TO_C
- function to convert from Guile to C (rather than C_TO_SCM).
- Use scm_intprint to print pointers (rather than
- sprintf). Allow using "-linkage" instead of "-Linkage".
- 6/05/2001: cheetah (william fulton)
- [Java] Mods for using inherited c++ classes from Java
- [Java] New example called class based on the same example from other modules
- 6/05/2001: cheetah (william fulton)
- [Java] destructor (_delete()) was not aware of %name renaming
- [Java] extends baseclass did not know about %name renaming
- [Java] extends baseclass did extend even when the baseclass was not known to swig
- [Java] sometimes enum-declarations occurred before the Java class declaration
- [Java] unrelated enum initialisations no longer appear in Java class
- [Java] if module ends in '_' correct JNI names are now produced
- 6/04/2001: cheetah (william fulton)
- [Java] Shadow class mods - Modified constructor replaces
- newInstance(). _delete() now thread safe. getCPtr() replaces
- _self. _selfClass() removed as now redundant.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- [Java] Not all output java files had SWIG banner. New banner.
- [Java] Shadow class finalizers are output by default: Command
- line option -finalize deprecated and replaced with -nofinalize.
- *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
- 6/ 1/2001: mkoeppe
- [Guile] Cast SCM_CAR() to scm_bits_t before shifting it.
- This is required for compiling with a Guile configured with
- strict C type checking.
- 6/ 1/2001: mkoeppe
- Added configure option "--with-swiglibdir".
- 5/31/2001: mkoeppe
- [Guile] Support multiple parallel lists or vectors in
- the typemaps provided by list-vector.i. New typemaps file,
- pointer-in-out.i.
- 5/25/2001: cheetah (william fulton)
- [Java] HTML update for examples.
- 5/28/2001: mkoeppe
- Minor changes to the build system. Added subdirectory for
- Debian package control files.
- 5/28/2001: mkoeppe
- [Guile] Build a runtime library, libswigguile.
- 5/28/2001: mkoeppe
- [Guile] New typemap substitution $*descriptor. Use the {}
- syntax, rather than the "" syntax for the standard
- typemaps, in order to work around strange macro-expansion
- behavior of the SWIG preprocessor. This introduces some
- extra braces.
- 5/27/2001: mkoeppe
- [Guile] Handle pointer types with typemaps, rather than
- hard-coded. New typemap substitutions $descriptor,
- $basedescriptor; see documentation. Some clean-up in the
- variable/constants wrapper generator code. New convenience
- macro SWIG_Guile_MustGetPtr, which allows getting pointers
- from smobs in a functional style. New typemap file
- "list-vector.i", providing macros that define typemaps for
- converting between C arrays and Scheme lists and vectors.
- 5/25/2001: cheetah (william fulton)
- [Java] STL string moved into its own typemap as it is c++ code and
- it break any c code using the typemaps.i file.
- - Fixes for wrappers around global variables - applies to primitive
- types and user types (class/struct) and pointers to these.
- - Structure member variables and class public member variables getters
- and setters pass a pointer to the member as was in 1.3a3 and 1.1
- (1.3a5 was passing by value)
- - Parameters that were arrays and return types were incorrectly
- being passed to create_function() as pointers.
- - Fix for arrays of enums.
- [Java] Updated java examples and added two more.
- [Java] Java module updated from SWIG1.3a3 including code cleanup etc.
- [Java] enum support added.
- [Java] Array support implemented
- [Java] Shadow classes improved - Java objects used rather than
- longs holding the c pointer to the wrapped structure/c++class
- 5/22/2001: mkoeppe
- [Guile] Fixed extern "C" declarations in C++ mode. Thanks
- to Greg Troxel <gdt@ir.bbn.com>.
- 5/21/2001: mkoeppe
- [Guile] New linkage "module" for creating Guile modules for
- Guile versions >= 1.5.0.
- 4/18/2001: mkoeppe
- [MzScheme] Added typemaps for passing through Scheme_Object
- pointers.
- 4/9/2001 : mkoeppe
- [MzScheme] Added typemaps for `bool'. Inclusion of headers
- and support routines is now data-driven via mzscheme.i.
- Headers come from the new file mzschemdec.swg. Don't abort
- immediately when a type-handling error is reported. When
- searching for typemaps for enums, fall back to using int,
- like the Guile backend does. Support char constants. Emit
- correct wrapper code for variables.
- 3/12/2001: mkoeppe
- [Guile] Fixed typemaps for char **OUTPUT, char **BOTH.
- 3/2/2001 : mkoeppe
- [Guile] Every wrapper function now gets a boolean variable
- gswig_list_p which indicates whether multiple values are
- present. The macros GUILE_APPEND_RESULT, GUILE_MAYBE_VALUES
- and GUILE_MAYBE_VECTOR use this variable, rather than
- checking whether the current return value is a list. This
- allows for typemaps returning a list as a single value (a
- list was erroneously converted into a vector or a
- multiple-value object in this case).
- 3/1/2001 : mkoeppe
- [Guile] Added support for returning multiple values as
- vectors, or passing them to a muliple-value
- continuation. By default, multiple values still get
- returned as a list.
- 3/1/2001 : mkoeppe
- [Guile] Added a "beforereturn" pragma. The value of this
- pragma is inserted just before every return statement.
- 3/1/2001 : mkoeppe
- [Guile] Added support for Guile 1.4.1 procedure
- documentation formats, see internals.html.
- 2/26/2001: mkoeppe
- [Guile] Made the wrapper code compile with C++ if the
- "-c++" command-line switch is given. Thanks to
- <monkeyiq@dingoblue.net.au>.
- 2/26/2001: mkoeppe
- [Guile] Now two type tables, swig_types and
- swig_types_initial, are used, as all other SWIG language
- modules do. This removes the need for the tricky
- construction used before that the broken Redhat 7.0 gcc
- doesn't parse. Reported by <monkeyiq@dingoblue.net.au>.
- 2/26/2001: mkoeppe
- [Guile] Fixed typemaps for char *OUTPUT, char *BOTH; a bad
- free() would be emitted. Added typemap for SCM.
- Version 1.3 Alpha 5
- ===================
- 9/19/00 : beazley
- [Python] Python module generates more efficient code for
- creating the return value of a wrapper function. Modification
- suggested by Jon Travis.
- 9/19/00 : beazley
- Library files specified with the -l option are now included at the
- end of the interface file (reverting to the old behavior).
- 9/19/00 : beazley
- Fixed some problems with enum handling. enums are now manipulated as
- 'int', but cast into the enum type when values are passed to the
- corresponding C function.
- 9/19/00 : mkoeppe
- [Guile] Removed "-with-smobs" command-line option, as this is the
- default now. Added "-emit-setters" command-line option,
- which turns on generating procedures-with-setters; see
- internals.html.
- 9/18/00 : mkoeppe
- Incorporated patch #101430, fixing bugs in the Guile module:
- 1. Some arguments were erroneously taken as *optional* arguments when
- ignored arguments were present.
- 2. Guile 1.3.4 was not supported since functions introduced in Guile
- 1.4 were used.
- 3. Added handling of `const char *'.
- 9/17/00 : beazley
- Fixed problem with failed assertion and large files.
- 9/17/00 : beazley
- Fixed problem with the '%' character appearing in added methods
- and function bodies. Preprocessor bug.
- Version 1.3 Alpha 4 (September 4, 2000)
- =======================================
- 9/3/00 : ttn
- Added instructions for maintainers in Examples/README on how
- to make examples also be useful in the testing framework.
- Also, "make check" now uses ./Lib by via env var `SWIG_LIB'.
- This is overridable like so:
- make chk-swiglib=/my/experimental/swig/Lib check
- 9/3/00 : beazley
- Added $typemap variable to typemaps. This gets replaced with
- a string indicating the typemap that is applied. Feature
- request from rsalz.
- 9/3/00 : beazley
- Experimental optimization to code generation for virtual
- member functions. If you have two classes like this:
- class A() {
- virtual void foo();
- }
- class B() : public A {
- virtual void foo();
- }
- Swig now will generate a single wrapper function for this
- A_foo(A *a) {
- a->foo();
- }
- and use it as the implementation of both A_foo() and B_foo().
- This optimization only takes place if both methods are declared
- as virtual and both take identical parameters.
- *** EXPERIMENTAL FEATURE ***
- 9/3/00 : beazley
- Restored the "memberin" typemap for setting structure members.
- Unlike the old version, the new version is expanded inline in the
- wrapper function allowing access to scripting language
- internals (a sometimes requested feature). The "memberout" typemap
- is gone. Use the "out" typemaps instead.
- *** POTENTIAL INCOMPATIBILITY ***
- 9/3/00 : beazley
- Attribute set methods no longer return the value of a member.
- For example:
- struct Foo {
- int x;
- ...
- }
- now gets set as follows:
- void Foo_x_set(Foo *f, int x) {
- f->x = x;
- }
- In SWIG1.1 it used to be this:
- int Foo_x_set(Foo *f, int x) {
- return (f->x = x);
- }
- This has been changed due to the complexity created by trying
- to do this with more exotic datatypes such as arrays. It also
- complicates inlining and handling of the "memberin" typemap.
- *** POTENTIAL INCOMPATIBILITY ***
- 9/2/00 : beazley
- Removed the ptrcast() and ptrmap() functions from the
- pointer.i library file. Old implementation is incompatible
- with new type system.
- *** POTENTIAL INCOMPATIBILITY ***
- 9/2/00 : beazley
- New runtime function SWIG_TypeQuery(const char *name) added.
- This function can be used to extract the type info structure
- that is used for type-checking. It works with either the
- nice C name or mangled version of a datatype. For example:
- swig_type_info *ty = Swig_TypeQuery("int *");
- swig_type_info *ty = Swig_TypeQuery("_p_int");
- This is an advanced feature that has been added to support some
- exotic extension modules that need to directly manipulate
- scripting language objects.
- *** NEW FEATURE ***
- 9/2/00 : beazley
- New directive %types() added. This is used to
- explicitly list datatypes that should be included in
- the runtime type-checking code. Normally it is never
- necessary to use this but sometimes advanced extensions
- (such as the pointer.i library) may need to manually
- add types to the type-checker.
- *** NEW FEATURE ***
- 8/31/00 : beazley
- Improved handling of string array variables. For example,
- a global variable of the form "char name[64]" is automatically
- managed as a 64 character string. Previously this didn't
- work at all or required the use of a special typemap.
- *** NEW FEATURE (Tcl, Perl, Python) ***
- 8/31/00 : ttn
- Added Makefile target `check-c++-examples', which uses new
- files under Examples/C++ contributed by Tal Shalif. Now "make
- check" also does "make check-c++-examples". Also, expanded
- actions in `check-gifplot-example' and `check-aliveness'.
- 8/30/00 : mkoeppe
- Major clean-up in the Guile module. Added typemap-driven
- documentation system. Changed to handle more than 10
- args. Updated and extended examples.
- *** NEW FEATURE ***
- 8/29/00 : beazley
- Added new %insert directive that inserts the contents of a file
- into a portion of the output wrapper file. This is only intended
- for use by writers of language modules. Works as follows:
- %insert(headers) "file.swg";
- %insert(runtime) "file.swg";
- %insert(wrappers) "file.swg";
- %insert(init) "file.swg";
- *** NEW FEATURE ***
- 8/29/00 : beazley
- Added new %runtime directive which includes code into the runtime
- portion of the wrapper code. For example:
- %runtime %{
- ... some internal runtime code ...
- %}
- There is no practical reason for ordinary users to use this
- feature (almost everything can be done using %{ ... %}
- instead). However, writers of language modules may want to
- use this in language configuration files.
- *** NEW FEATURE ***
- 8/28/00 : beazley
- Typemaps can now be specified using string literals like
- this:
- %typemap(in) int "$target = SvIV($source);"
- When code is specified like this, it is *NOT* enclosed
- inside a local scope (as with older typemap declarations).
- Note: character escape sequences are interpreted in the
- code string so if you want to include a quote or some
- other special character, make sure you use a (\).
- *** NEW FEATURE ***
- 8/27/00 : beazley
- Typemaps have been modified to follow typedef declarations.
- For example, if you have this:
- typedef int Number;
- %typemap(in) int {
- ... get an integer ...
- }
- void foo(Number a);
- The typemap for 'int' will be applied to the argument 'Number a'.
- Of course, if you specify a typemap for 'Number' it will take
- precedence (nor will it ever be applied to an 'int').
- *** POTENTIAL INCOMPATIBILITY ***
- 8/27/00 : beazley
- Default typemap specification has changed. In older
- versions of swig, you could do this:
- %typemap(in) int SWIG_DEFAULT_TYPE {
- ...
- }
- To specify the default handling of a datatype. Now that
- SWIG follows typedef declarations, this is unnecessary.
- Simply specifying a typemap for 'int' will work for all
- variations of integers that are typedef'd to 'int'.
- Caveat, specifying the default behavior for pointers,
- references, arrays, and user defined types is a little
- different. This must be done as follows:
- %typemap() SWIGPOINTER * {
- ... a pointer ...
- }
- %typemap() SWIGREFERENCE & {
- ... a reference ...
- }
- %typemap() SWIGARRAY [] {
- ... an array ...
- }
- %typemap() SWIGTYPE {
- ... a user-defined type (by value) ...
- }
- *** POTENTIAL INCOMPATIBILITY ***
- 8/15/00 : dustin
- The file swig-1.3a1-1.spec has been added to the Tools directory.
- It can be used to build a redhat package for SWIG, although it
- will need to be updated for the next public release.
- 8/15/00 : beazley
- Typemaps have been completely rewritten. Eventually they may be
- replaced with something better, but for now they stay. However,
- there are a number of a significant changes that may trip some
- people up:
- 1. Typemap scoping is currently broken. Because of this, the
- following code won't work.
- %typemap(in) blah * {
- ...
- }
- class Foo {
- ...
- int bar(blah *x);
- }
- %typemap(in) blah *; /* Clear typemap */
- (this breaks because the code for the class Foo is actually
- generated after the entire interface file has been processed).
- This is only a temporary bug.
- 2. In SWIG1.1, the %apply directive worked by performing a
- very complex type-aliasing procedure. From this point on,
- %apply is simply a generalized typemap copy operation.
- For example,
- %apply double *OUTPUT { double *x, double *y };
- Copies *ALL* currently defined typemaps for 'double *OUTPUT' and
- copies them to 'double *x' and 'double *y'.
- Most people probably won't even notice this change in
- %apply. However, where it will break things is in code like
- this:
- %apply double *OUTPUT { double *x };
- %typemap(in) double *OUTPUT {
- ... whatever ...
- }
- void foo(double *x);
- In SWIG1.1, you will find that 'foo' uses the 'double *OUTPUT' rule
- even though it was defined after the %apply directive (this is
- the weird aliasing scheme at work). In SWIG1.3 and later,
- the 'double *OUTPUT' rule is ignored because it is defined
- after the %apply directive.
- 3. The %clear directive has been modified to erase all currently
- defined typemaps for a particular type. This differs from
- SWIG1.1 where %clear only removed rules that were added using
- the %apply directive.
- 4. Typemap matching is now performed using *exact* types.
- This means that things like this
- %typemap(in) char * { }
- %typemap(in) const char * { }
- are different typemaps. A similar rule applies for pointers,
- arrays, and references. For example:
- %typemap(in) double * { }
- used to apply to 'double &', 'double []', Now, it only applies
- to 'double *'. If you want a 'double &', you'll need to handle
- that separately.
- 5. Array matching has been simplfied. In SWIG1.1, array matching
- was performed by trying various combinations of dimensions.
- For example, 'double a[10][20]' was matched as follows:
- double [10][20]
- double [ANY][20]
- double [10][ANY]
- double [ANY][ANY]
- In SWIG1.3, only the following matches are attempted:
- double [10][20]
- double [ANY][ANY]
- On the positive side, typemap matching is now *significantly* faster
- than before.
- *** POTENTIAL INCOMPATIBILITY ***
- 8/15/00 : beazley
- Secret developer feature. Since datatypes are now represented as
- strings internally, you can bypass limitations of the parser and
- create a wild datatype by simply enclosing the raw string encoding
- in backticks (``) and sticking it in the interface file anywhere a
- type is expected. For example, `a(20).a(10).p.f(int,int)`. This
- feature is only intended for testing (i.e., you want to see what
- happens to your language module if it gets a reference to a pointer
- to an array of pointers to functions or something).
- *** SICK HACK ***
- 8/14/00 : beazley
- Completely new type-system added to the implementation.
- More details later.
- 8/11/00 : beazley
- Cleaned up some of the I/O handling. SWIG no longer generates
- any temporary files such as _wrap.wrap, _wrap.ii, _wrap.init.
- Instead, these "files" are kept around in memory as strings
- (although this is transparent to language modules).
- 8/4/00 : ttn
- Added Makefile target "check" and variants.
- This can be used like "make check" or, to explicitly skip a
- language LANG: "make skip-LANG=true check". LANG is skipped
- automatically if ./configure determines that LANG support is
- insufficient.
- Currently, the check is limited to doing the equivalent of
- "make all" in some of the Examples directories. This should
- be expanded both horizontally (different types of tests) and
- vertically (after "make all" in an Examples subdir succeeds,
- do some additional tests with the resulting interpreter, etc).
- 8/4/00 : ttn
- Added Makefile target "distclean", which deletes all the
- files ./configure creates, including config.status and friends.
- 8/3/00 : harcoh
- java changes??? [todo: document changes]
- 7/23/00 : beazley
- Typemaps have been modified to key off of the real datatypes
- used in the interface file. This means that typemaps for
- "const char *" and "char *" will be difference as will typemaps
- for "Vector" and "Vector *."
- *** POTENTIAL INCOMPATIBILITY ***
- This is likely to break interfaces that rely on the odd type
- handling behavior of typemaps in SWIG1.1--especially with
- respect to interfaces involving pass-by-value.
- 7/23/00 : beazley
- New %constant directive. This directive can be used to
- create true constants in the target scripting language.
- It's most simple form is something like this:
- %constant FOO 42;
- In this case, the type is inferred from the syntax of the
- value (in reality, all #define macros are translated into
- directives of this form).
- An expanded version is as follows:
- %constant(Foo *) FOO = &FooObj;
- In this case, an explicit type can be specified. This
- latter form may be useful for creating constants that
- used to be specified as
- const Foo *FOO = &FooObj;
- (which are now treated as variables).
- *** EXPERIMENTAL FEATURE *** The syntax may change in
- the final release.
- 7/23/00 : beazley
- Modified the parser so that variable declarations of the form
- "const type *a" are handled as variables, not constants.
- Note: SWIG1.1 handled this case erroneously because
- const char *a is a pointer variable that can be reassigned.
- *** POTENTIAL INCOMPATIBILITY ***
- Note: just because this is the "right" way to do things,
- doesn't mean it's the most appropriate interpretation.
- I suspect that many C programmers might use 'const char *'
- with the intent of creating a constant, without realizing
- that they've created a reassignable global variable.
- 7/23/00 : beazley
- The C/C++ wrapping layer has been completely redesigned and
- reimplemented. This change should iron out a few rough
- spots with the handling of datatypes. In addition, the
- wrapper code is somewhat cleaner.
- *** POTENTIAL INCOMPATIBILITY ***
- This change may break interfaces that involve
- subtle corner-cases with typemaps and the %addmethods
- directive since some of these features had somewhat
- type handling behavior in SWIG1.1.
- 7/23/00 : beazley
- The "memberin" and "memberout" typemaps are gone for the
- moment, but they might return as soon as I figure out
- how to integrate them with some of the streamlined C wrapper
- functions.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/22/00 : beazley
- A variety of old type handling functions such as print_type(),
- print_full(), print_mangle(), etc... are gone and have been
- replaced with a smaller set of functions. See the file
- Doc/internals.html for details. This will break all third
- party language modules.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/20/00 : beazley
- Deprecated the %val and %out directives. These directives
- shouldn't really be necessary since typemaps can be used
- to achieve similar results. This also cleans up the
- handling of types and parameters quite a bit.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/20/00 : ttn
- Fixed unspecified-module bug in Guile support and removed
- more non-"with-smobs" functionality using patches submitted
- by Matthias Koeppe.
- Re-enable recognition of "-with-smobs" (with no effect since
- we use smobs by default now) for the time being. After the
- 1.3a4 release, this option will signal an error.
- 7/17/00 : ttn
- Fixed NULL-input bug in parameter list handling.
- Reported by Matthias Koeppe.
- 7/12/00 : beazley
- Fixed memory leak in Python type-checking code. Reported by
- Keith Davidson. Bug #109379.
- 7/10/00 : beazley
- Changed internal data structures related to function parameters.
- 7/10/00 : beazley
- Fixed some bugs related to the handling of the %name() directive
- and classes in the Tcl module. Problem reported by James Bailey.
- 7/10/00 : beazley
- Fixed parsing and enum handling problems with character constants.
- Reported by Greg Kochanski.
- 7/10/00 : beazley
- Removed WrapperFunction class from the core and updated the language
- module. This will break third party modules.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/9/00 : beazley
- Implementation of SWIG no longer makes use of C++ operator overloading.
- This will almost certainly break *all* third party language modules
- that are not part of the main SWIG CVS tree. Sorry.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/8/00 : beazley
- Removed the experimental and undocumented "build" typemap that
- was intended to work with multiple arguments. Simply too weird
- to keep around. Besides, a better replacement is in the works.
- 7/6/00 : ttn
- Removed non-"with-smobs" functionality (Guile support), i.e.,
- "-with-smobs" is now the default and no longer needs to be
- specified on the command-line.
- 7/5/00 : ttn
- Incorporated Ruby support contributed by Masaki Fukushima.
- 6/28/00 : ttn
- Applied more-than-10-args bugfix patch contributed
- by Matthias Koeppe.
- 6/27/00 : beazley
- Rewrote some of the string handling and eliminated the C++
- implementation (which is now just a wrapper).
- 6/27/00 : ttn
- Added Doc/index.html and Doc/internals.html. The target
- audience for the latter is new SWIG developers.
- Version 1.3 Alpha 3 (June 18, 2000)
- ===================================
- 6/18/00 : beazley
- Removed the naming.cxx, hash.cxx, and symbol.cxx files from
- the SWIG1.1 directory. Continued to migrate things away
- from the C++ base (although there's still a lot of work to do).
- 6/17/00 : beazley
- Added a few more examples to the Examples directory. Still
- need to do a lot of work on this.
- 6/16/00 : beazley
- Added -includeall to follow all #include statements in the
- preprocessor.
- 6/15/00 : beazley
- Tried to fix as many C++ warnings as possible when compiling
- with the Sun Workshop C++ compiler. Unfortunately, this means
- that there are a lot of statements that contain string literals
- of the form (char*)"Blah".
- 6/15/00: beazley
- A variety of cleanup and performance optimization in the
- low-level DOH library. This seems to result in a speedup
- of 50-100% for preprocessing and other related tasks.
- 5/10/00 : ttn
- Applied variable-wrapping bugfix patch contributed
- by Matthias Koeppe.
- 4/17/00 : ttn
- Updated MzScheme support contributed by Oleg Tolmatcev.
- We now use a `Scheme_Type'-based structure to wrap pointers.
- 4/11/00 : ttn
- Incorporated further Guile-support patch by Matthias Koeppe.
- Typemaps previously deleted have been re-added. There is now
- exception handling (see Doc/engineering.html). `SWIG_init' is now
- declared extern only for simple linkage. Some bugs were fixed.
- 4/06/00 : ttn
- Incorporated MzScheme support contributed by Oleg Tolmatcev.
- This includes new directories Lib/mzscheme and Examples/mzscheme.
- 4/03/00 : ttn
- Added Examples/guile and children. This is an adaptation of
- the same-named directory from the SWIG-1.1p5 distribution.
- Added Guile-specific section to Doc/engineering.html.
- 4/02/00 : ttn
- Incorporated new guilemain.i by Martin Froehlich.
- Incorporated Guile-support rewrite patch by Matthias Koeppe.
- The command line option "-with-smobs" enables implementation of
- pointer type handling using smobs, the canonical mechanism for
- defining new types in Guile. Previous implementation (using
- strings) is at the moment still supported but deprecated. At
- some point, "-with-smobs" will be the default and no longer
- required.
- 3/13/00 : beazley
- Added purify patches submitted by Ram Bhamidipaty.
- 3/02/00 : ttn
- Added support for different Guile "linkage" schemes.
- Currently, "-Linkage hobbit" works.
- Version 1.3 Alpha 2 (March 1, 2000)
- ===================================
- 2/29/00 : beazley
- Made SWIG ignore the 'mutable' keyword.
- 2/29/00 : beazley
- Incorporated some patches to the Perl5 module related to
- the -hide option and the destruction of objects.
- Patch submitted by Karl Forner.
- 2/27/00 : ttn
- Incorporated Guile support contributed by Matthias Koeppe.
- This includes a cpp macro in Lib/guile/guile.swg and the
- entire file Lib/guile/typemaps.i.
- 2/25/00 : ttn
- Modified configure.in and Makefile.in files to support
- non-local build (useful in multi-arch environments).
- 2/24/00 : ttn
- Incorporated Guile support contributed by Clark McGrew.
- This works with Guile 1.3, but since it depends heavily
- on the gh_ interface, it should work for all later versions.
- It has not been tested with versions before 1.3.
- WARNING: Code is unstable due to experimentation by ttn.
- 2/16/00 : beazley
- A variety of performance improvements to the Python shadow
- class code generation. Many of these result in substantial
- runtime performance gains. However, these have come at
- a cost of requiring the use of Python 1.5.2. For older
- versions, use 'swig -noopt -python' to turn off these
- optimization features.
- Version 1.3 Alpha 1 (February 11, 2000)
- =======================================
- 2/11/00 : Added 'void' to prototype of Python module initializer.
- Reported by Mark Howson (1/20/00).
- 2/11/00 : beazley
- Modified the Python shadow class code to discard ownership of an
- object whenever it is assigned to a member of another object.
- This problem has been around for awhile, but was most recently
- reported by Burkhard Kloss (12/30/99).
- 2/11/00 : beazley
- Added braces around macros in the exception.i library. Reported
- by Buck Hodges (12/19/99)
- 2/11/00 : beazley
- Fixed bug in the constraints.i library. Reported by Buck
- Hodges (12/14/99)
- 2/11/00 : beazley
- The %native directive now generates Tcl8 object-style command calls.
- A full solution for Tcl7 and Tcl8 is still needed. Patch suggested
- by Mike Weiblen (11/29/99)
- 2/11/00 : beazley
- Modified the typemap code to include the $ndim variable for arrays.
- Patch provided by Michel Sanner (11/12/99).
- 2/11/00 : beazley
- Modified the Python module to raise a Runtime error if an attempt
- is made to set a read-only member of a shadow class. Reported by
- Michel Sanner (11/5/99).
- 2/10/00 : The documentation system has been removed. However, it is likely
- to return at some point in the future.
- 2/1/00 : Added a number of performance enhancements to the Python shadow
- classing and type-checking code. Contributed by Vadim Chugunov.
- 1. Remove _kwargs argument from the shadow wrappers when -keyword
- option is not specified. This saves us a construction of keyword
- dictionary on each method call.
- def method1(self, *_args, **_kwargs):
- val = apply(test2c.PyClass1_method1, (self,) + _args, _kwargs)
- return val
- becomes
- def method1(self, *_args):
- val = apply(test2c.PyClass1_method1, (self,) + _args)
- return val
- 2. Incorporate self into the _args tuple. This saves at least one tuple
- allocation per method call.
- def method1(self, *_args):
- val = apply(test2c.PyClass1_method1, (self,) + _args)
- return val
- becomes
- def method1(*_args):
- val = apply(test2c.PyClass1_method1, _args)
- return val
- 3. Remove *Ptr classes.
- Assume that we are SWIGging a c++ class CppClass.
- Currently SWIG will generate both CppClassPtr class
- that hosts all methods and also CppClass that is derived
- from the former and contains just the constructor.
- When CppClass method is called, the interpreter will try
- to find it in the CppClass's dictionary first, and only then
- check the base class.
- CppClassPtr functionality may be emulated with:
- import new
- _new_instance = new.instance
- def CppClassPtr(this):
- return _new_instance(CppClass, {"this":this,"thisown":0})
- This saves us one dictionary lookup per call.
- <DB>The new module was first added in Python-1.5.2 so it
- won't work with older versions. I've implemented an
- alternative that achieves the same thing</DB>
- 4. Use CObjects instead of strings for pointers.
- Dave: This enhancements result in speedups of up to 50% in some
- of the preliminary tests I ran.
- 2/1/00 : Upgraded the Python module to use a new type-checking scheme that
- is more memory efficient, provides better performance, and
- is less error prone. Unfortunately, it will break all code that
- depends on the SWIG_GetPtr() function call in typemaps.
- These functions should be changed as follows:
- if (SWIG_GetPtr(string,&ptr,"_Foo_p")) {
- return NULL;
- }
- becomes
- if (SWIG_ConvertPtr(pyobj, &ptr, SWIG_TYPE_Foo_p) == -1) {
- return NULL;
- }
- Note: In the new implementation SWIG_TYPE_Foo_p is no longer
- a type-signature string, but rather an index into a type
- encoding table that contains type information.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/30/00 : loic
- Conditionally compile experimental code with --enable-experiment
- configure flag.
- Fix .cvsignore to ignore configure & yacc generated files
- 1/28/00 : loic
- Apply automake everywhere
- Keep configure scripts so that people are not *forced* to autoconf
- Keep sources generated by yacc so that compilation without yacc
- is possible.
- Source/LParse/cscanner.c: change lyacc.h into parser.h to please
- default yacc generation rules.
- Use AC_CONFIG_SUBDIRS in configure.in instead of hand made script.
- Update all relevant .cvsignore to include .deps
- Fixed missing ; line 136 Source/Swig/swig.h
- 1/13/00 : beazley
- Fixed a number of minor end-of-file parsing problems in the
- preprocessor.
- 1/13/00 : beazley
- Added -freeze option that forces SWIG to freeze upon exit.
- This is only used as a debugging tool so that I can more
- easily examine SWIG's memory footprint.
- 1/13/00 : beazley
- Added patch to guile module for supporting optional arguments
- Patch contributed by Dieter Baron.
- 1/13/00 : loic
- Added .cvsignore, Examples/.cvsignore, Source/DOH/Doh/.cvsignore
- Source/SWIG1.1/main.cxx: Fixed -I handling bug
- Source/Modules1.1/java.cxx: fixed char* -> const char* warnings that are
- errors when compiling with gcc-2.95.2
- Source/SWIG1.1/main.cxx: cast const char* to char* for String_replace
- token and rep should really be const.
- 1/12/00 : beazley
- Added Harco's Java modules.
- 1/12/00 : beazley
- Revoked the %ifdef, %ifndef, %endif, %if, %elif, and %else
- directives. These are no longer needed as SWIG now has a real
- preprocessor.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/12/00 : beazley
- Moved the documentation modules from the SWIG directory
- to the Modules directory (where they really should have been
- to begin with).
- 1/12/00 : beazley
- Removed the -stat option for printing statistics. The
- statistics reporting was inadequate and mostly broken
- anyway.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/12/00 : beazley
- Removed the -t option for reading a typemap file. More
- trouble than it's worth. Just include typemaps at the top
- of the interface file.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/12/00 : beazley
- Removed the %checkout directive.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/12/00 : beazley
- Removed the -ci option for file checkin. Too problematic
- to implement. Probably better to just put your SWIG library
- under CVS instead.
- *** POTENTIAL INCOMPATIBILITY ***.
- 1/11/00 : beazley
- Deleted the LATEX module. Sorry... Didn't know anyone
- who was using it. Besides, I'm looking to simplify
- the documentation system.
- *** POTENTIAL INCOMPATIBILITY ***
- 1/11/00 : beazley
- Modified the ASCII documentation module to use a .txt
- suffix for its output file instead of .doc.
- 1/11/00 : beazley
- Added the long-lost SWIG preprocessor back to the system.
- It should be enabled by default. Raw preprocessed output
- can be viewed using swig -E file.i.
- *** NEW FEATURE ***
- 1/11/00 : beazley and djmitche
- Completely reorganized the SWIG directory structure. The
- basic organization is now:
- Source/ SWIG source code
- Lib/ SWIG library files (swig_lib)
- Doc/ Documentation
- Examples/ Examples
- More directories will be added as needed.
- 12/08/99: Loic Dachary (loic@senga.org)
- Enhanced package handling for perl5 and c++.
- With new option -hide Foo::Bar, every perl5 object (Frob) is
- qualified by Foo::Bar::Frob. The package name is solely used
- to encapsulate C/C++ wrappers output in <module>_wrap.c and the
- corresponding perl package in <module>.pm. Note that a package
- name may contain :: (Frob::Nitz) and will be relative to the
- package name provided by -hide (Foo::Bar::Frob::Nitz).
- In *_wrap.c, SWIG_init macro is used. Was previously defined
- but not used and simplifies code.
- Added typemap(perl5,perl5in) and typemap(perl5,perl5out) that
- do the equivalent of typemap(perl5,in) and typemap(perl5,out)
- but contain perl code and applies to wrappers generated by
- -shadow.
- Lacking proper regression tests I used
- Examples/perl5/{c++,constraint,defarg,except,
- graph/graph[1234],multinherit,nested,shadow,simple,tree,
- typemaps/{argv,argv2,arraymember,database,file,ignore,integer,
- output,passref,reference,return}}/. I ran swig with and without
- the patches, diff the generatedsources, run the .pl files
- and checked that the results are identical. In all those examples
- I had no error.
- 11/21/99: Modified the Tcl module to provide full variable linking capabilities
- to all datatypes. In previous versions, a pair of accessor functions
- were created for datatypes incompatible with the Tcl_LinkVar() function.
- Now, we simply use variable traces to support everything. This may
- break scripts that rely upon the older behavior.
- *** POTENTIAL INCOMPATIBILITY ***
- 11/21/99: Added slight tweak to wrapper generator to collect local variables
- of similar type. Produces somewhat more compact wrapper code.
- 11/20/99: Modified the Tcl module to use SWIG_GetArgs() to parse
- arguments. This is a technique borrowed from Python in which
- arguments are converted using a format string convention similiar
- to fprintf(). This results in a *substantial* reduction in the
- size of the resulting wrapper code with only a modest runtime overhead
- in going through the extra conversion function.
- 11/13/99: Completely rewrote the class/structure generation code for the
- Tcl module. Now, a small set of runtime functions are used
- to implement the functionality for all classes (instead of a
- massive amount of runtime code being generated for each class).
- Class specific information is simply encoded in a series of
- static tables. This results in a *HUGE* reduction in wrapper
- code size--especially for C++.
- 11/13/99: Removed the -tcl (Tcl 7.x) module. Tcl 8.0 is now several
- years old and the defacto standard--no real reason to keep
- supporting the old version at this point.
- 11/13/99: Cleaned up -c option for Python module. The pyexp.swg file
- is now gone.
- 11/13/99: Fixed external declarations to work better with static linking
- on Windows. Static linking should now be possible by defining
- the -DSTATIC_LINK option on the command line. Patch contributed
- by Alberto Fonseca.
- 11/5/99 : Fixed an obscure code generation bug related to the generation
- of default constructors. Bug reported by Brad Clements.
- 11/5/99 : Fixed a few memory problems found by purify.
- 11/5/99 : Officially deprecated the -htcl, -htk, and -plugin options
- from the Tcl and Tcl8 modules.
- 10/26/99: Removed unused variable from python/typemaps.i. Patch
- contributed by Keith Davidson.
- 8/16/99 : Added _WIN32 symbol to libraries to better support Windows.
- 8/16/99 : Deprecated the Perl4 module. It is no longer included in the
- distribution and no longer supported. In the entire 3 years SWIG
- has been around I never received a single comment about it so I'm
- assuming no one will miss it...
- 8/16/99 : Modified the type-checking code to register type mappings using a
- table instead of repeated calls to SWIG_RegisterMapping(). This
- reduces the size of the module initialization function somewhat.
- 8/15/99 : Cleaned up the pointer type-checking code in the Tcl module.
- 8/15/99 : Many changes to the libraries to support runtime libraries.
- 8/13/99 : Eliminated C++ compiler warning messages about extern "C" linkage.
- 8/13/99 : Some cleanup of Python .swg files to better support runtime libraries
- on Windows.
- 8/13/99 : Modified the %pragma directive to attach pragmas declared inside
- a class definition to the class itself. For example:
- class foo {
- ...
- %pragma(python) addtomethod = "insert:print `hello world'"
- ...
- }
- Most people don't need to worry about how this works. For people
- writing backend modules, class-based pragmas work like this:
- lang->cpp_open_class() // Open a class
- lang->cpp_pragma() // Supply pragmas
- ... // Emit members
- lang->cpp_close_class() // Close the class
- All of the pragmas are passed first since they might be used to
- affect the code generation of other members. Please see
- the Python module for an example. Patches contributed
- by Robin Dunn.
- 8/13/99 : Patch to Python shadow classes to eliminate ignored
- exception errors in destructors. Patch contributed
- by Robin Dunn.
- 8/11/99 : Minor patch to swig_lib/python/swigptr.swg (added SWIGSTATIC
- declaration). Patch contributed by Lyle Johnson.
- 8/11/99 : Added FIRSTKEY/NEXTKEY methods to Perl5 shadow classes
- Patch contributed by Dennis Marsa.
- 8/11/99 : Modified Python module so that NULL pointers are returned
- and passed as 'None.' Patch contributed by Tal Shalif.
- 8/10/99 : Fixed missing 'int' specifiers in various places.
- 8/10/99 : Added Windows makefile for Runtime libraries. Contributed
- by Bob Techentin.
- 8/10/99 : Fixed minor problem in Python runtime makefile introduced
- by keyword arguments.
- 8/8/99 : Changed $target of perl5(out) typemap from ST(0) to
- ST(argvi). Patch contributed by Geoffrey Hort.
- 8/8/99 : Fixed bug in typemap checking related to the ANY keyword
- in arrays and ignored arguments. Error reported by
- Geoffrey Hort.
- 8/8/99 : %enabledoc and %disabledoc directives can now be used
- inside class/structure definitions. However, no check
- is made to see if they are balanced (i.e., a %disabledoc
- directive inside a class does not have to have a matching
- %enabledoc in the same class).
- 8/8/99 : Keyword argument handling is now supported in the Python
- module. For example:
- int foo(char *bar, int spam, double x);
- Can be called from Python as
- foo(x = 3.4, bar="hello", spam=42)
- To enable this feature, run SWIG with the '-keyword' command
- line option. Mixing keyword and default arguments
- should work as well. Unnamed arguments are assigned names
- such as "arg1", "arg2", etc...
- *** POTENTIAL INCOMPATIBILITY ***
- Functions with duplicate argument names such as
- bar(int *OUTPUT, int *OUTPUT) will likely cause problematic
- wrapper code to be generated. To fix this, use different
- names or use %apply to map typemaps to alternate names.
- 8/8/99 : Handling of the 'this' pointer has been changed in Python shadow
- classes. Previously, dereferencing of '.this' occurred in the
- Python shadow class itself. Now, this step occurs in the C
- wrappers using the following function:
- SWIG_GetPtrObj(PyObject *, void **ptr, char *type)
- This function can accept either a string containing a pointer
- or a shadow class instance with a '.this' attribute of
- appropriate type. This change allows the following:
- 1. The real shadow class instance for an object is
- passed to the C wrappers where it can be examined/modified
- by typemaps.
- 2. Handling of default/keyword arguments is now greatly
- simplified.
- 3. The Python wrapper code is much more simple.
- Plus, it eliminated more than 300 lines of C++ code in the
- Python module.
- *** CAVEAT : This requires the abstract object interface.
- It should work with Python 1.4, but probably nothing older
- than that.
- 8/8/99 : Fixed handling of "const" and pointers in classes. In particular,
- declarations such as
- class foo {
- ...
- const char *msg;
- const int *iptr;
- }
- are handled as assignable variables as opposed to constant
- values (this is the correct behavior in C/C++). Note:
- declarations such as "char *const msg" are still unsupported.
- Constants declared at the global level using const are also
- broken (because I have a number of interfaces that rely upon
- this behavior).
- *** POTENTIAL INCOMPATIBILITY *** This may break interfaces that
- mistakenly treat 'const char *' types as constant values.
- 8/8/99 : Modified the parser to support bit-fields. For example:
- typedef struct {
- unsigned int is_keyword : 1;
- unsigned int is_extern : 1;
- unsigned int is_static : 1;
- } flags;
- Bit-fields can only be applied to integer types and their
- are other restrictions. SWIG performs no such type-checking
- (although the C compiler will catch problems when it tries to
- compile the wrapper code).
- 8/8/99 : Removed trailing space of $basetype substitution in typemaps.
- This is to allow things like this:
- %typemap(python, argout) spam** OUTPUT{
- ...
- char* a = "$basetype_p";
- ...
- }
- (Patch suggested by Nathan Dunfield).
- 6/22/99 : Made a very slight tweak to the Perl5 shadow class
- code that allows typemaps to alter the return type
- of objects (to support polymorphic types). Patch
- contributed by Drake Diedrich.
- 4/8/99 : Fixed null pointer handling bug in Perl module.
- Patch contributed by Junio Hamano.
- 3/17/99 : Fixed bug in perl5ptr.swg for ActiveState Perl.
- Patch contributed by Greg Anderson.
- 2/27/99 : Eliminated segmentation fault when Swig runs on
- empty files.
- 2/27/99 : Added patch to Guile module to eliminate unused
- variables. Contributed by Mike Simons.
- 2/27/99 : Fixed problem with %addmethods returning references.
- 2/27/99 : Fixed Runtime/Makefile. Patch contributed by
- Mike Romberg.
- 2/27/99 : Incorporated patches to the type-checker.
- 2/27/99 : Fixed problem with -exportall switch and shadow classes
- in Perl5 module. Patch contributed by Dennis Marsa.
- 2/27/99 : Modified Perl5 module to recognize 'undef' as a NULL char *.
- Patch contributed by Junio Hamano.
- 2/27/99 : Fixed the Perl5 module to support the newer versions of
- ActiveState Perl for Win32.
- 2/27/99 : Fixed the include order of files specified with the
- -I option.
- 2/5/98- : Dave finishes his dissertation, goes job hunting, moves to
- 2/5/99 Chicago and generally thrashes about.
- Version 1.1 Patch 5 (February 5, 1998)
- ======================================
- 2/4/98 : Fixed a bug in the configure script when different package
- locations are specified (--with-tclincl, etc...).
- 2/2/98 : Fixed name-clash bug related to the switch to C macros for accessor
- functions. The new scheme did not work correctly for objects
- with members such as 'obj', 'val', etc... Fixed the bug by
- appending the word 'swig' to macro argument names. Patch
- contributed by Rudy Albachten.
- 2/2/98 : Slight fix to the Perl5 module to eliminate warning messages
- about 'varname used only once : possible typo'. Fix
- contributed by Rudy Albachten.
- 1/9/98 : Fixed a bug in the Perl 5 module related to the creation of
- constants and shadow classes.
- 1/9/98 : Fixed linking bug with Python 1.5 embed.i library file.
- Version 1.1 Patch 4 (January 4, 1998)
- =====================================
- 1/4/98 : Changed structured of the Examples directory to be more friendly
- to Borland C++.
- 1/4/98 : Added the function Makefile.win.bc for compiling the examples
- under Borland 5.2.
- 1/4/98 : Slight change to the perl5 module and C++ compilation. The
- <math.h> library is now included before any Perl headers
- because Perl the extern "C" linkage of math.h screws alot
- of things up (especially on Windows).
- 1/2/98 : Change to the Python module that reduces the number of constants
- created by C++ classes, inheritance, and shadow classes. This
- modification may introduce a few slight incompatibilities if
- you attempt to use the non-shadow class interface with shadow
- classes enabled. Patch contributed by Mike Romberg.
- 1/2/98 : Support for Tcl 8.0 namespaces has been added. This *replaces*
- the original SWIG mechanism that assumed [incr Tcl] namespaces.
- To use namespaces, simply run SWIG with the following options
- swig -tcl -namespace foo.i
- This places everything in a namespace that matches
- the module name
- swig -tcl -namespace -prefix bar foo.i
- This places everything in the namespace 'bar'
- The use of namespaces is new in Tcl 8.0. However, the wrapper code
- generated by SWIG will still work with all versions of Tcl newer
- than and including Tcl 7.3/Tk3.6 even if the -namespace option is
- used.
- *** POTENTIAL INCOMPATIBILITY ***
- This change may break existing applications that relied on the
- -prefix and -namespace options.
- 1/2/98 : Added the following constants to the Tcl wrapper code
- SWIG_name - Name of the SWIG module
- SWIG_prefix - Prefix/namespace appended to command names
- SWIG_namespace - Name of the namespace
- SWIG library writers can use these to their advantages.
- 1/2/98 : Fixed a bug in the Tcl8 module related to the creation of
- pointer constants (the function SWIG_MakePtr was missing from
- the wrapper code).
- 1/2/98 : Added the consthash.i library file to the Tcl and Tcl8 modules.
- 1/1/98 : Changed and cleaned up the Python typemaps.i file. The following
- significant changes were made :
- 1. The OUTPUT typemap now returns Python tuples instead of
- lists. Lists can be returned as before by using the
- L_OUTPUT type. If compatibility with older versions
- is needed, run SWIG with the -DOUTPUT_LIST option.
- 2. The BOTH typemap has been renamed to INOUT. For backwards
- compatibility, the "BOTH" method still exists however.
- 3. Output typemaps now generate less code than before.
- Changes to typemaps.i may break existing Python scripts that assume
- output in the form of a list.
- *** POTENTIAL INCOMPATIBILITY ***
- 12/31/97: Fixed long overdue problems with the testing scripts and certain
- makefiles that required the use of the bash shell. Everything should
- work properly with the standard Bourne shell (sh) now.
- 12/31/97: Modified typemaps to allow $basetype as a valid local variable.
- This allows for all sorts of bizarre hackish typemaps that
- do cool things. Patch contributed by Dominique Dumont.
- 12/31/97: Switched accessor functions generated for member data to
- C preprocessor macros (except in cases involving typemaps
- or char *).
- 12/31/97: Fixed a bug related to C++ member data involving references.
- 12/31/97: Changed accessor functions for C++ member functions to
- preprocessor macros. This cleans up the wrapper code
- and results in fewer function definitions.
- 12/31/97: Changed the default C constructor to use calloc() instead
- of malloc()
- 12/30/97: Changed the creation of constants in the Perl5 module.
- For all practical purposes, they should work in exactly the
- same way as before except that they now require much less
- wrapper code. Modules containing large numbers of
- constants may see greater than a 50% reduction in wrapper
- code size.
- 12/30/97: Modified the Python module to be more intelligent about the
- creation of constants. SWIG no longer generates redundant
- global variables and the size of the module initialization
- function should be reduced. (Many thanks to Jim Fulton).
- 12/29/97: Fixed a bug in C++ code generation related to member functions,
- default arguments, and references.
- 12/29/97: Fixed configure script and a few makefiles to support Python 1.5
- 12/29/97: Added 'embed15.i' library file. This file should be used to
- statically link versions of Python 1.5. To make it the default,
- simply copy 'swig_lib/python/embed15.i' to 'swig_lib/python/embed.i'
- Version 1.1 Patch 3 (November 24, 1997)
- ========================================
- 11/23/97: Fixed a bug in the Perl5 module with shadow classes and
- static class functions that return class instances.
- Note : The fix for this bug requires a slight restructuring of
- of the .pm files created by SWIG.
- 11/23/97: Fixed a bug in the Tcl/Tcl8 modules related to variable linking
- of character arrays. If you declared a global variable 'char foo[10]',
- the generated wrapper code would either cause a segmentation fault
- immediately upon loading or weird memory corruption elsewhere.
- This should now be fixed although character arrays can only be
- read-only.
- 11/23/97: Fixed a bug with the %import directive that caused it to
- fail if files were imported from directories other than
- the current working directory.
- 11/23/97: Fixed incorrect diagnostic message in the ASCII documentation
- module.
- 11/23/97: Changed the behavior of the -o option when used with shadow
- classes. If -o was used to specify both the pathname and filename
- of SWIG's output such as
- swig -o /home/swig/wrapper.c -shadow -perl5 foo.i
- The wrapper code would be placed the file specified with -o,
- but the .pm file and documentation would be placed in the
- directory where SWIG was run. Now, these files are placed
- in the same directory as the file specified with the -o option.
- This change is also needed for proper operation on the
- Macintosh.
- 11/23/97: Added a 'this()' method to Perl5 shadow classes. This can
- be used to return the normal pointer value from a shadow
- class that is represented as a tied hash. To use just
- invoke as a method like this :
- $l = new List; # Create an object
- $ptr = $l->this(); # Get the normal pointer value
- *** NEW FEATURE ***
- 11/23/97: Fixed the Tcl 8 pointer.i library file (which was completely
- broken in 1.1p2).
- 11/23/97: Modified the Perl5 type-checker to fix a few problems
- with global variables of pointer types and to allow
- tied hashes to be used interchangably with normal
- pointer values.
- 11/23/97: Modified the typemap mechanism to allow output
- typemaps of type 'void'. These were ignored previously,
- but now if you specify,
- %typemap(lang,out) void {
- ... return a void ...
- }
- You can change or assign a return value to the function.
- 11/23/97: Fixed processing of 'bool' datatypes in the Python module.
- 11/23/97: Fixed minor parsing error with C++ initializers. For example,
- class B : public A {
- public:
- B() : A() { ... };
- ...
- }
- 11/23/97: Fixed the Tcl8 module so that C functions that call back into
- Tcl don't corrupt the return result object (SWIG was gathering
- the result object too early which leads to problems if subsequent
- Tcl calls are made).
- 11/23/97: Fixed a code generation bug in the Python module when two or
- more output parameters were used as the first arguments of a
- function. For example :
- %include typemaps.i
- void foo(double *OUTPUT, double *OUTPUT, double a);
- Previously, doing this resulted in the creation of an
- extraneous comma in the output, resulting in a C syntax error.
- 11/22/97: Fixed a bug when template handling that was stripping whitespace
- around nested templates. For example :
- Foo<Bar<double> >
- was getting munged into Foo<Bar>> which is a syntax error in
- in the C++ compiler.
- 11/22/97: Fixed bugs in the Borland C++ makefiles.
- 11/22/97: Fixed memory corruption bug when processing integer
- arguments in Tcl8 module.
- 11/21/97: Fixed a bug in the Runtime/Makefile related to Tcl 8.
- 11/21/97: Fixed a bug with the %new directive and Perl5 shadow classes.
- No longer generates a perl syntax error.
- 11/9/97 : Changed a strncpy() to strcpy() in the pointer type-checker.
- This results in a substantial performance improvement in
- type-checking.
- 10/29/97: Fixed a bug in the code generation of default arguments and
- user-defined types. For example :
- void foo(Vector a, Vector b = d);
- should now work properly.
- Version 1.1 Patch 2 (September 4, 1997)
- =======================================
- 9/4/97 : Fixed problem with handling of virtual functions that
- was introduced by some changes in the C++ module.
- Version 1.1 Patch 1 (August 27, 1997)
- =====================================
- 8/26/97 : Fixed compilation and run-time bugs with Tcl 8.0 final.
- 8/21/97 : Fixed code generation bug with arrays appearing as arguments
- to C++ member functions. For example :
- class Foo {
- public:
- void Bar(int a[20][20]);
- };
- There is still a bug using arrays with added methods
- however.
- 8/20/97 : Fixed a bug with generating the code for added methods
- involving pass-by-value.
- 8/19/97 : Modified the typemapper to substitute the '$arg' value
- when declaring local variables. For example :
- %typemap(in) double * (double temp_$arg) {
- ... do something ...
- }
- When applied to a real function such as the following :
- void foo(double *a, double *b, double *result);
- three local variables will be created as follows :
- double temp_a;
- double temp_b;
- double temp_result;
- This can be used when writing multiple typemaps that need
- to access the same local variables.
- 7/27/97 : Fixed a variety of problems with the %apply directive and arrays.
- The following types of declarations should now work :
- %apply double [ANY] { Real [ANY] };
- %apply double [4] { double [10] };
- A generic version of apply like this :
- %apply double { Real };
- should now work--even if arrays involving doubles and Reals are
- used later.
- 7/27/97 : Changed warning message about "Array X has been converted to Y" to
- only appear if running SWIG in verbose mode.
- 7/27/97 : Added the variables $parmname and $basemangle to the typemap
- generator. $parmname is the name of the parameter used
- when the typemap was matched. It may be "" if no parameter
- was used. $basemangle is a mangled version of the base
- datatype. Sometimes used for array handling.
- 7/27/97 : Changed the behavior of output arguments with Python shadow classes.
- Originally, if a function returned an object 'Foo', the shadow class
- mechanism would create code like this :
- def return_foo():
- val = FooPtr(shadowc.return_foo())
- val.this = 1
- return val
- The problem with this is that typemaps allow a user to redefine
- the output behavior of a function--as a result, we can no longer
- make any assumptions about the return type being a pointer or
- even being a single value for that matter (it could be a list,
- tuple, etc...). If SWIG detects the use of output typemaps
- (either "out" or "argout") it returns the result unmodified like
- this :
- def return_foo():
- val = shadowc.return_foo()
- return val
- In this case, it is up to the user to figure out what to do
- with the return value (including the possibility of converting it
- into a Python class).
- 7/26/97 : Fixed a parsing problem with types like 'unsigned long int',
- 'unsigned short int', etc...
- 7/24/97 : Minor bug fix to Tcl 8 module to parse enums properly. Also
- fixed a memory corruption problem in the type-checker.
- (patch contributed by Henry Rowley.
- 7/24/97 : Added Python-tuple typemaps contributed by Robin Dunn.
- 7/24/97 : Incorporated some changes to the Python module in support of
- Mark Hammond's COM support. I'm not entirely sure they
- work yet however. Needs documentation and testing.
- 7/24/97 : Fixed code generation bugs when structures had array members
- and typemaps were used. For example :
- %typemap(memberin) double [20][20] {
- ... get a double [20][20] ...
- }
- struct Foo {
- double a[20][20];
- }
- Originally, this would generate a compiler-type error when
- the wrapper code was compiled. Now, a helper function like
- this is generated :
- double *Foo_a_set(Foo *a, double val[20][20]) {
- ... memberin typemap here ...
- return (double *) val;
- }
- When writing typemaps, one can assume that the source variable
- is an array of the *same* type as the structure member. This
- may break some codes that managed to work around the array bug.
- *** POTENTIAL INCOMPATIBILITY ***
- 7/13/97 : Fixed bug in Perl5 module when using C global variables that
- are pointers. When used in function calls and other operations,
- the value of the pointer would be invalid---causing core
- dumps and other problems. SWIG implements global variables
- using Perl magic variables. As it turns out, the error
- was caused by the fact that the pointer-extraction code
- was somehow bypassing the procedure used to resolve magical
- variables (hence, leaving the value undefined). To fix
- the problem, SWIG now explicitly resolves magic before
- extracting pointer values.
- 7/12/97 : Eliminated the last remnants of free() and malloc() from
- the SWIG compiler.
- 7/12/97 : Fixed parsing problems with typemaps involving arrays and
- temporary variables of arrays. Also made it possible for
- SWIG to handle typemaps like this :
- %typemap(in) double [ANY] (double temp[$dim0]) {
- ... store data in temp[$dim0] ...
- }
- Not only does this typemap match any double [] array, it
- creates a local variable with precisely the right dimensions.
- (ie. $dim0 gets filled in with the real number of dimensions).
- Of course, off the record, this will be a way to add more
- functionality to the typemaps.i libraries.
- 7/9/97 : Fixed some problems with Perl5, static linking, and shadow
- classes. When statically linking multiple modules together, write
- a top-level interface file like this when shadow classes are not
- used :
- %module swig, foo, bar, glob;
- %include perlmain.i
- When shadow classes are used, the module names have an extra 'c'
- appended so it should read as :
- %module swig, fooc, barc, globc;
- %include perlmain.i
- When linking multiple modules, consider using the SWIG runtime
- library.
- 7/8/97 : Incorporated fixed versions of the Borland C++ Makefiles.
- 7/8/97 : First cut at trying to eliminate excessive compiler warnings.
- As it turns out, alot of warnings go away if you just make
- declarations like this
- clientData = clientData;
- in the resulting wrapper code. Most compilers should just
- ignore this code (at least would can hope).
- 7/8/97 : Fixed bizarre code generation bug with typemaps and C++ classes.
- In some cases, typemaps containing printf formatting strings such as
- %typemap(memberout) int * {
- printf("%d",42);
- }
- Would generate completely bogus code with garbage replacing
- the '%d'. Caused by one faulty use of printf (wasn't able to find
- any other occurrences).
- 7/7/97 : Fixed bug in Python shadow class generation with non-member
- functions that are returning more than one value.
- 7/7/97 : Incorporated modifications to make SWIG work with Guile 1.2.
- Still need to test it out, but it is rumored to work.
- 7/2/97 : Fixed some bugs related to output arguments and Python shadow
- classes. If an output argument is detected, SWIG assumes
- that the result is a list and handles it appropriately.
- If the normal return type of an function is an object,
- it will be converted into a shadow class as before, but
- with the assumption that it is the first element of a
- list. *** NOTE : This behavior has been subsequently changed ***
- 6/29/97 : Changed EXPORT to SWIGEXPORT in all of the language modules.
- Should provide better compatibility with Windows.
- 6/29/97 : Modified Python shadow classes so that output arguments
- work correctly (when typemaps are used).
- Version 1.1 (June 24, 1997)
- ===========================
- 6/24/97 : Fixed Objective-C constructor bug when working with Perl5
- shadow classes.
- 6/23/97 : Fixed some parsing problems with Objective-C. Declarations
- such as the following should work now :
- - foo : (int) a with: (int) b;
- 6/22/97 : Added SWIG Runtime library. This library contains
- the SWIG pointer type-checker and support functions
- that are normally included in every module. By using
- the library, it is easier to work with multiple SWIG
- generated modules.
- 6/22/97 : Fixed minor bug in Perl5 module related to static linking
- of multiple modules.
- 6/22/97 : Fixed some bugs with the %import directive. When used with
- Perl5 shadow classes, this generates a 'require' statement
- to load in external modules.
- 6/22/97 : Added -swiglib option. This prints out the location of the
- SWIG library and exits. This option is only really useful to
- configuration tools that are looking for SWIG and its library
- location (e.g. autoconf, configure, etc...).
- 6/21/97 : Fixed export bug with Perl5.004 on Windows-NT.
- 6/20/97 : Minor change to code generation of class/structure members in
- order to work better with typemaps. Should have no noticable
- impact on existing SWIG modules.
- 6/19/97 : Added -t option. This allows SWIG to load a typemap file before
- processing any declarations. For example :
- swig -t typemaps.i -python example.i
- At most, only one typemap file can be specified in this manner.
- *** NEW FEATURE ***
- 6/18/97 : Need a Makefile fast? Type
- swig [-tcl, -perl5, -python] -co Makefile
- and you will get a Makefile specific to that target language.
- You just need to modify it for your application and you're
- ready to run.
- 6/18/97 : Completed the -ci option. This option checks a file into the
- SWIG library. It should be used in conjunction with a
- language option. For example :
- swig -tcl -ci foobar.i
- Checks the file foobar.i into the Tcl part of the library.
- In order to check a file into the general library (accessible
- to all languages modules), do the following
- swig -ci -o ../foobar.i foobar.i
- (Admittedly this looks a little strange but is unavoidable).
- The check-in option is primarily designed for SWIG maintenance
- and library development. The command will fail if the user does
- not have write permission to the SWIG library. Third party library
- extensions can easily install themselves by simply providing
- a shell script that uses 'swig -ci' to install the appropriate
- library files. It is not necessary to know where the SWIG library
- is located if you use this mechanism.
- *** NEW FEATURE ***
- 6/16/97 : Fixed a bug in shadow class generation when %name() was applied
- to a class definition. Unfortunately, fixing the bug required
- a change in the Language C API by adding an extra argument to
- the Language::cpp_class_decl() function. This may break
- SWIG C++ extensions.
- *** POTENTIAL INCOMPATIBILITY ***
- 6/15/97 : Added a warning message if no module name is specified with the
- %module directive or -module option.
- 6/15/97 : Fixed line number bug when reporting errors for undefined
- base classes.
- 6/15/97 : Added new %rename directive. This allows the forward declaration
- of a renaming. For example :
- %rename OldName NewName;
- .... later ...
- int OldName(int);
- Unlike %name, %rename will rename any occurrence of the old name.
- This applies to functions, variables, class members and so forth.
- There is no way to disable %rename once set, but you can change the
- name by redeclaring it to something else.
- *** NEW FEATURE ***
- 6/15/97 : Improved the implementation of the %name directive so that it
- could be used with conditional compilation :
- #ifdef SWIG
- %name(NewName)
- #endif
- int OldName(int);
- 6/15/97 : Added support for functions with no return datatype. In this case,
- SWIG assumes a return type of 'int'.
- 6/11/97 : Improved error reporting in the parser. It should be a little
- less sensitive to errors that occur inside class definitions
- now. Also reports errors for function pointers.
- 6/11/97 : Made '$' a legal symbol in identifiers. This is to support
- some Objective-C libraries. Some compilers (such as gcc) may also
- allow identifiers to contain a $ in C/C++ code as well (this is
- an obscure feature of C). When '$' appears in identifier, SWIG
- remaps it to the string '_S_' when creating the scripting language
- function. Thus a function 'foo$bar' would be called 'foo_S_bar'.
- 6/11/97 : Fixed bug in Python shadow classes with __repr__ method. If
- supplied by the user, it was ignored, but now it should work.
- 6/9/97 : Fixed the Tcl 8.0 module to work with Tcl 8.0b1. SWIG is no
- longer compatible with *any* alpha release of Tcl 8.0.
- *** POTENTIAL INCOMPATIBILITY ***
- 6/7/97 : Put a maximal error count in (currently set to 20). SWIG will bail out
- if it generates more errors than this (useful for preventing SWIG
- from printing 4000 syntax errors when it gets confused).
- 6/7/97 : Fixed segmentation fault when parsing variable length arguments.
- 6/7/97 : Minor change to Perl5 module. C++ static functions are now
- put in the same package as their class when using shadow classes.
- 6/7/97 : Centralized the naming of functions, members, wrappers etc... By
- centralizing the naming scheme, it should be possible to make
- some multi-file optimizations. Also, it should be possible to
- change SWIG's naming scheme (perhaps a new feature to be added
- later).
- 6/2/97 : Added 'arginit' typemap. This can be used to assign initial values
- to function arguments. Doing so makes it somewhat easier to detect
- improper argument passing when working with other typemaps.
- 6/2/97 : Fixed code generation bug when read-only variables were inherited
- into other classes. Under inheritance, the variables would
- become writable, but this has now been corrected.
- 5/30/97 : An empty %name() directive is no longer allowed or supported.
- This directive was originally used to strip the prefix
- off of a class or structure. Unfortunately, this never really
- seemed to work right and it complicated the C++ code generator
- significantly. As far as I can tell no one uses it, so it
- is now history. *** POTENTIAL INCOMPATIBILITY ***
- 5/28/97 : Fixed a parsing bug with #define and C++ comments. Declarations
- such as the following now work properly :
- #define CONST 4 // A Comment
- 5/28/97 : Made some performance improvements to the SWIG String class.
- (only affects the SWIG compiler itself).
- 5/28/97 : Modified the parser to skip template definitions and issue a
- warning message.
- 5/28/97 : Preliminary support for parameterized types added (ie. templates).
- Types such as the following should pass through the SWIG compiler
- void foo(vector<complex> *a, vector<double> *b);
- When used, the entire name 'vector<complex>' becomes the name
- of the datatype. Due to space limitations in datatype
- representations, the name should not exceed 96 characters.
- Note : This is only part of what is needed for template support.
- Template class definitions are not yet supported by SWIG.
- The template notation above may also be used when specifying
- Objective-C protocol lists.
- *** NEW FEATURE ***
- 5/24/97 : First cut at Objective-C support added. As it turns out, almost
- everything can be handled with only a few minor modifications to
- the C++ module.
- *** NEW FEATURE ***
- 5/23/97 : Fixed repeated definition bug in multiple inheritance handling
- when multiple base classes share a common base class (ie.
- the evil diamond).
- 5/21/97 : Fixed rather embarrassing typo that worked its way into the
- Tests/Build directory.
- 5/19/97 : Fixed code generation bug when using native methods and
- shadow classes with Python and Perl5 modules.
- 5/19/97 : Modified the %apply directive slightly so that it would work
- with pointers a little better. For example :
- %apply unsigned long { DWORD };
- Applies *all* typemaps associated with "unsigned long" to
- "DWORD". This now includes pointers to the two datatypes.
- For example, a typemap applied to "unsigned long **" would
- also be applied to any occurrence of "DWORD **" as well.
- 5/19/97 : Fixed an ownership assignment bug in the Perl5 module when
- class members were returning new objects belonging to
- different classes.
- 5/17/97 : Added a few more typemap variables.
- $name - Name of function/variable/member
- $basetype - Base datatype (type without pointers)
- $argnum - Argument number
- 5/16/97 : Fixed embarrassing underscore error in local variable
- allocator.
- 5/16/97 : Fixed namespace clash bug in parameterized typemaps
- when creating arrays as new local variables.
- 5/15/97 : Fixed some bugs with inheritance of added methods across
- multiple files. SWIG now uses names of base classes
- when generating such functions.
- 5/14/97 : Finished support for default typemaps. Primarily used
- internally, they can be used to match the basic
- built-in datatypes used inside of SWIG. You can
- specify them in interface files as well like this :
- %typemap(tcl,in) int SWIG_DEFAULT_TYPE {
- $target = atoi($target);
- }
- Unlike normal typemaps, this default map will get applied
- to *all* integer datatypes encountered, including those
- renamed with typedef, etc...
- 5/13/97 : Fixed substring bug in type checker.
- 5/12/97 : Fixed bug in parameterized typemaps when declaring local
- variables of structures.
- Version 1.1 Beta6 (May 9, 1997)
- ===============================
- 5/9/97 : Fixed bizarre NULL pointer handling bug in Perl5 module.
- 5/8/97 : Fixed mysterious segmentation fault when running SWIG on an
- empty file.
- 5/7/97 : The code generator will now replace the special symbol "$cleanup"
- with the cleanup code specified with the "freearg" typemap.
- This change needed to properly manage memory and exceptions.
- 5/5/97 : Added the 'typemaps.i' library file. This contains a
- variety of common typemaps for input values, pointers,
- and so on.
- 5/5/97 : Changed behavior of "argout" typemap in Python module.
- Old versions automatically turned the result into a
- Python list. The new version does nothing, leaving the
- implementation up to the user. This provides more flexibility
- but may break older codes that rely on typemaps.
- *** POTENTIAL INCOMPATIBILITY ***
- 5/5/97 : Fixed bug in Python module related to the interaction of
- "argout" and "ignore" typemaps.
- 5/5/97 : Fixed bug in Python module that would generate incorrect code
- if all function arguments are "ignored".
- 5/4/97 : Added %apply and %clear directives. These form a higher level
- interface to the typemap mechanism. In a nutshell, they
- can be used to change the processing of various datatypes without
- ever having to write a typemap. See the SWIG documentation
- for more details. ** NEW FEATURE **
- 5/4/97 : Added a local variable extension to the typemap handler.
- For example :
- %typemap(tcl,in) double *(double temp) {
- temp = atof($source);
- $target = &temp;
- }
- In this case, 'temp' is a local variable that exists
- in the entire wrapper function (not just the typemap
- code). This mechanism provides better support for
- certain types of argument handling and also makes it
- possible to write thread-safe typemaps. Any number
- local variables can be declared by supplying a comma
- separated list. Local variables are guaranteed to be
- unique, even if the same typemap is applied many times
- in a given function.
- ** Not currently supported in Perl4 or Guile modules.
- 5/2/97 : Fixed processing of %ifdef, %endif, %if, etc... (These are
- SWIG equivalents of the C preprocessor directives that
- can pass through the C preprocessor without modification).
- 5/2/97 : Fixed major (but subtle) bug in the run-time type checker
- related to searching and type-checking for C++ inheritance.
- To make a long story short, if you had two classes named
- "Foo" and "FooObject" the type checker would sometimes
- get confused and be unable to locate "Foo" in an internal
- table.
- 5/2/97 : Fixed some bugs in the -co option.
- 4/24/97 : Pointer library added to the SWIG library.
- 4/19/97 : Added the %new directive. This is a "hint" that can be used
- to tell SWIG that a function is returning a new object. For
- example :
- %new Foo *create_foo();
- This tells SWIG that create_foo() is creating a new object
- and returning a pointer to it. Many language modules may
- choose to ignore the hint, but when working with shadow classes,
- the %new is used to handle proper ownership of objects.
- %new can also be used with dynamically allocated strings.
- For example :
- %new char *create_string();
- When used, all of the language modules will automatically cleanup
- the returned string--eliminating memory leaks.
- ** NEW FEATURE **
- 4/19/97 : Added a new typemap "newfree". This is used in conjunction with
- the %new directive and can be used to change the method by which
- a new object returned by a function is deleted.
- 4/19/97 : The symbol "__cplusplus" is now defined in the SWIG interpreter
- when running with the -c++ option.
- 4/17/97 : Added support for static member functions when used inside the
- %addmethods directive.
- 4/15/97 : Added a special typemap symbol PREVIOUS that can be used to
- restore a previous typemap. For example :
- %typemap(tcl,in) int * = PREVIOUS;
- This is primarily used in library files.
- 4/13/97 : Added %pragma directive for Perl5 module. Two new pragmas are
- available :
- %pragma(perl5) code = "string"
- %pragma(perl5) include = "file.pl"
- Both insert code into the .pm file created by SWIG. This can
- be used to automatically customize the .pm file created by SWIG.
- 4/13/97 : Scanner modified to only recognize C++ keywords when the -c++
- option has been specified. This provides support for C programs
- that make use of these keywords for identifiers.
- SWIG may need to be explicitly run with the -c++ option when
- compiling C++ code (this was allowed, but not recommended in
- previous versions). **POTENTIAL INCOMPATIBILITY**
- 4/11/97 : Fixed a rather nasty bug in the Perl5 module related to using
- variable linking with complex datatypes and pointers. On Unix,
- code would work (somehow), but would cause an access violation
- under Windows-NT. The fix should correct the problem,
- but there may still be a problem using global variables of
- complex datatypes in conjunction with shadow classes. Fortunately,
- this sort of thing seems to be relatively rare (considering
- that the bug has been around for more than a year - yikes!).
- 4/11/97 : Fixed bizarre constant evaluation bug in Perl5 code generation
- when running under Windows-NT.
- 4/8/97 : Bug when using default arguments and C++ references fixed.
- 4/8/97 : Fixed code generation bugs in Python and Perl5 modules related to
- using class renaming (applying the %name directive to a class
- definition) and shadow classes.
- 4/7/97 : Fixed minor bugs in swigptr.swg, tcl8ptr.swg, and perl5ptr.swg to
- prevent infinite loops when weird datatypes are passed.
- 3/29/97 : 'Makefile.win' added. This is used to build most of the examples
- in the Examples directory under Windows NT/95.
- 3/27/97 : Fixes to SWIG's error return codes. SWIG now returns non-zero
- exit codes for certain kinds of errors (which makes it more
- friendly to makefiles). An overhaul of the error handling
- is on the to-do list and will probably show up in a later release.
- 3/25/97 : Bug fix. "freearg" and "argout" typemaps have been fixed in
- the Perl5 module. In previous versions, function input parameters
- and function output parameters shared the same memory space--causing
- all sorts of nasty problems when trying to pass perl values by
- reference. SWIG now internally makes a "copy" (which is really
- just a pointer) of affected parameters and uses that. This
- is done transparently so there is no noticable impact on any
- SWIG generated modules. This change is probably only noticable
- to expert users.
- 3/25/97 : Added type-check to verbose and stat mode. SWIG will now generate a list
- of all datatypes that were used but undefined (useful for tracking
- down weird bugs). This is enabled with the -v option (which
- is now officially known as "overly verbose" mode) or the -stat option.
- 3/25/97 : Slight change to the parser to make include guards work correctly.
- For example :
- #ifndef INTERFACE_I
- #define INTERFACE_I
- %module foobar.i
- ... declarations ...
- #endif
- 3/24/97 : %checkout directive added. This allows an interface file to
- extract files from the SWIG library and place them in the
- current directory. This can be used to extract scripts and
- other helper code that might be associated with library files.
- For example :
- %checkout array.tcl
- Will look for a file "array.tcl" in the library and copy it
- to the current directory. If the file already exists in the
- directory, this directive does nothing (it will not overwrite an
- existing file). This only an experimental feature for now.
- 3/24/97 : SWIG will now look in the SWIG Library for a file if it can't
- find it in the current directory. As a result, it is easy to
- make modules from SWIG library files. For example, if you
- want to make a Python module from the SWIG timers library, just
- type this in any directory :
- swig -python timers.i
- You will get the files timers_wrap.c and timers_wrap.doc in
- the current directory that you can now compile. The file
- remains in the SWIG library (although you can check it out
- using the -co option). *** New Feature ***
- 3/24/97 : -co option added to SWIG to allow easy access to the SWIG library.
- When used, this instructs SWIG to check out a library file and
- place it in the current directory. For example :
- unix > swig -co array.i
- array.i checked out from the SWIG library
- unix >
- Once in your directory you can customize the file to suit your
- particular purposes. The checkout option makes it easy to
- grab library files without knowing anything about the SWIG
- installation, but it also makes it possible to start
- including scripts, C code, and other miscellaneous files
- in the library. For example, you could put a cool script
- in the library and check it out whenever you wanted to use it.
- *** New Feature ***
- 3/24/97 : #pragma export directives added to Tcl output for compiling
- shared libraries on the Mac.
- 3/24/97 : Minor changes to wish.i and tclsh.i library files to provide
- support for the Macintosh.
- 3/19/97 : SWIG's policy towards NULL pointers has been relaxed. The
- policy of requiring a special compiler directive -DALLOW_NULL
- to use NULL pointers is no longer supported. While this may
- seem "unsafe", it turns out that you can use a "check"
- typemap to achieve some safety. For example :
- %typemap(perl5,check) Node * {
- if (!$target)
- croak("NULL Pointers not allowed.");
- }
- This prevents any NULL value of a "Node *" pointer to be
- passed to a function. (I think this is much cleaner
- than the old -DALLOW_NULL hack anyways).
- 3/19/97 : Fixed pointer handling errors in Perl5 module. Modules no
- longer core dump when a Perl reference is inadvertently
- passed in as a C pointer.
- 3/18/97 : Added a "check" typemap. This can be used to check the
- validity of function input values. For example :
- %typemap(perl5,check) int posint {
- if ($target < 0)
- croak("Argument is not a positive integer");
- }
- 3/18/97 : Added an $arg variable to Tcl typemaps. This makes it easier
- to return argument values by "reference".
- 3/18/97 : Fixed a code generation bug when using C++ references and
- the %addmethods directive.
- 3/18/97 : Fixed a few glitches in the typemap module with respect to
- chaining. For example :
- %typemap(tcl,in) int {
- $in // Inserts prexisting typemap
- printf("Received a %d\n", $target);
- }
- This has been allowed for quite some time, but didn't work
- if no existing typemap was defined. Now, it still doesn't
- work if no existing typemap is defined, but it issues a
- warning message. There is some support using default typemaps,
- but none of the language modules take advantage of it. This
- should be considered experimental at this time.
- Version 1.1b5 Patch 1 (March 16, 1997)
- ======================================
- 3/16/97 : Fixed references bug with C++ code generation.
- 3/16/97 : Fixed initialization bug in the documentation system that
- was causing weird problems.
- 3/16/97 : Fixed fatal bug with -c option in the Python module.
- 3/13/97 : Fixed bug in the documentation system involving the %text directive
- and sorting. In the old system, %text entries would float to the
- top of a section because they were "nameless". Now they are
- attached to the previous declaration and will stay in the proper
- location relative to the previous entry.
- Version 1.1b5 (March 12, 1997)
- ==============================
- 3/11/97 : Fixed compilation problems introduced by Tcl/Tk 8.0a2.
- *** INCOMPATIBILITY *** SWIG no longer works with Tcl/Tk 8.0a1.
- 3/10/97 : Fixed bug with ignored arguments and C++ member functions in
- the Python module.
- 3/9/97 : Parsing bugs with nested class definitions and privately
- declared nested class definitions fixed.
- 3/9/97 : Fixed a few minor code generation bugs with C++ classes and
- constructors. In some cases, the resulting wrapper code
- would not compile properly. SWIG now attempts to use
- the default copy constructor instead.
- 3/8/97 : Added a -l option to SWIG that allows additional SWIG library files
- to be grabbed without having them specified in the interface file.
- This makes it easier to keep the interface file clean and move certain
- options into a Makefile. For example :
- swig -tcl example.i # Build a normal Tcl extension
- swig -tcl -lwish.i example.i # Build it as a wish extension
- # by including the 'wish.i' file.
- swig -python example.i # Build a dynamically loaded extension
- swig -python -lembed.i example.i # Build a static extension
- These kinds of options could previously be accomplished with
- conditional compilation such as :
- %module example
- ...
- #ifdef STATIC
- %include embed.i
- #endif
- 3/8/97 : Incorporated changes to Guile module to use the new gh interface
- in FSF Guile 1.0. The older gscm interface used in Cygnus
- Guile releases is no longer supported by SWIG.
- 3/8/97 : Cleaned up the Tcl Netscape plugin example. It should work with
- version 1.1 of the plugin now.
- 3/8/97 : Added better array support to the typemap module. The keyword
- ANY can now be used to match any array dimension. For example :
- %typemap(tcl,in) double [ANY] {
- ... get an array ...
- }
- This will match any single-dimensional double array. The array
- dimension is passed in the variables $dim0, $dim1, ... $dim9. For
- example :
- %typemap(tcl,in) double [ANY][ANY][ANY] {
- printf("Received a double[%d][%d][%d]\n",$dim0,$dim1,$dim2);
- }
- Any typemap involving a specific array dimension will override any
- specified with the ANY tag. Thus, a %typemap(tcl,in) double [5][4][ANY] {}
- would override a double [ANY][ANY][ANY]. However, overuse of the ANY
- tag in arrays of high-dimensions may not work as you expect due to
- the pattern matching rule used. For example, which of the following
- typemaps has precedence?
- %typemap(in) double [ANY][5] {} // Avoid this!
- %typemap(in) double [5][ANY] {}
- 3/7/97 : Fixed a number of bugs related to multi-dimensional array handling.
- Typedefs involving multi-dimensional arrays now works correctly.
- For example :
- typedef double MATRIX[4][4];
- ...
- extern double foo(MATRIX a);
- Typecasting of pointers into multi-dimensional arrays is now
- implemented properly when making C/C++ function calls.
- 3/6/97 : Fixed potentially dangerous bug in the Tcl Object-oriented
- interface. Well, actually, didn't fix it but issued a
- Tcl error instead. The bug would manifest itself as follows:
- % set l [List] # Create an object
- ...
- % set m [List -this $l] # Make $m into an object assuming $l
- # contains a pointer.
- # Since $m == $l, $l gets destroyed
- # (since its the same command name)
- % $m insert Foo
- Segmentation fault # Note : the list no longer exists!
- Now, an error will be generated instead of redefining the command.
- As in :
- % set l [List]
- ...
- % set m [List -this $l]
- Object name already exists!
- Use catch{} to ignore the error.
- 3/3/97 : Better support for enums added. Datatypes of 'enum MyEnum'
- and typedefs such as 'typedef enum MyEnum Foo;' now work.
- 3/3/97 : Parser modified to ignore constructor initializers such as :
- class Foo : public Bar {
- int a,b;
- public:
- Foo(int i) : a(0), b(i), Bar(i,0) { };
- };
- 3/3/97 : Modified parser to ignore C++ exception specifications such as :
- int foo(double) throw(X,Y);
- 3/3/97 : Added %import directive. This works exactly like %extern
- except it tells the language module that the declarations are
- coming from a separate module. This is usually only
- needed when working with shadow classes.
- 3/2/97 : Changed pointer type-checker to be significantly more
- efficient when working with derived datatypes. This
- has been accomplished by storing type-mappings in sorted
- order, using binary search schemes, and caching recently
- used datatypes. For SWIG generated C++ modules that
- make a large number of C function calls with derived types,
- this could result in speedups of between 100 and 50000 percent.
- However, due to the required sorting operation, module
- loading time may increased slightly when there are lots of
- datatypes.
- 3/2/97 : Fixed some C++ compilation problems with Python
- embed.i library files.
- 2/27/97 : Slight change to C++ code generation to use copy constructors
- when returning complex data type by value.
- 2/26/97 : Fixed bug in Python module with -c option.
- 2/26/97 : Slight tweak of parser to allow trailing comma in enumerations
- such as
- enum Value (ALE, STOUT, LAGER, };
- 2/25/97 : Fixed code generation bug in Tcl module when using the
- %name() directive on a classname.
- 2/25/97 : Finished code-size optimization of C++ code generation with
- inheritance of attributes. Inherited attributes now
- only generate one set of wrapper functions that are re-used
- in any derived classes. This could provide big code
- size improvements in some scripting language interfaces.
- 2/25/97 : Perl5 module modified to support both the Unix and Windows
- versions. The windows version has been tested with the
- Activeware port of Perl 5.003 running under Windows 95.
- The C source generated by SWIG should compile without
- modification under both versions of Perl, but is now
- even more hideous than before.
- 2/25/97 : Modified parser to allow scope resolution operation to
- appear in expressions and default arguments as in :
- void foo(int a = Bar::defvalue);
- 2/25/97 : Fixed bug when resolving symbols inside C++ classes.
- For example :
- class Foo {
- public:
- enum Value {ALE, STOUT, LAGER};
- ...
- void defarg(Value v = STOUT);
- };
- 2/24/97 : Fixed bug with member functions returning void *.
- 2/23/97 : Modified Python module to be better behaved under Windows
- - Module initialization function is now properly exported.
- It should not be necessary to explicitly export this function
- yourself.
- - Bizarre compilation problems when compiling the SWIG wrapper
- code as ANSI C under Visual C++ 4.x fixed.
- - Tested with both the stock Python-1.4 distribution and Pythonwin
- running under Win95.
- 2/19/97 : Fixed typedef handling bug in Perl5 shadow classes.
- 2/19/97 : Added exception support. To use it, do the following :
- %except(lang) {
- ... try part of the exception ...
- $function
- ... catch part of exception ...
- }
- $function is a SWIG variable that will be replaced by the
- actual C/C++ function call in a wrapper function. Thus,
- a real exception specification might look like this :
- %except(perl5) {
- try {
- $function
- } catch (char *& sz) {
- ... process an exception ...
- } catch(...) {
- croak("Unknown exception. Bailing out...");
- }
- }
- 2/19/97 : Added support for managing generic code fragments (needed
- for exceptions).
- 2/19/97 : Fixed some really obscure typemap scoping bugs in the C++
- handler.
- 2/18/97 : Cleaned up perlmain.i file by removing some problematic,
- but seemingly unnecessary declarations.
- 2/18/97 : Optimized handling of member functions under inheritance.
- SWIG can now use wrapper functions generated for a
- base class instead of regenerating wrappers for
- the same functions in a derived class. This could
- make a drastic reduction in wrapper code size for C++
- applications with deep inheritance hierarchies and
- lots of functions.
- 2/18/97 : Additional methods specified with %addmethods can now
- be inherited along with normal C++ member functions.
- 2/18/97 : Minor internal fixes to make SWIG's string handling a little
- safer.
- 2/16/97 : Moved some code generation of Tcl shadow classes to
- library files.
- 2/16/97 : Fixed documentation error of '-configure' method in
- Tcl modules.
- 2/16/97 : Modified Perl5 module slightly to allow typemaps
- to use Perl references.
- 2/12/97 : Fixed argument checking bug that was introduced by
- default arguments (function calls with too many
- arguments would still be executed). Functions now
- must have the same number of arguments as C version
- (with possibility of default/optional arguments
- still supported).
- 2/12/97 : Fixed default argument bug in Perl5 module when
- generating wrapper functions involving default
- arguments of complex datatypes.
- 2/12/97 : Fixed typemap scoping problems. For example :
- %typemap(tcl,in) double {
- .. get a double ..
- }
- class Foo {
- public:
- double bar(double);
- }
- %typemap(tcl,in) double {
- .. new get double ..
- }
- Would apply the second typemap to all functions in Foo
- due to delayed generation of C++ wrapper code (clearly this
- is not the desired effect). Problem has been fixed by
- assigning unique numerical identifiers to every datatype in
- an interface file and recording the "range of effect" of each
- typemap.
- 2/11/97 : Added support for "ignore" and "default" typemaps. Only use
- if you absolutely know what you're doing.
- 2/9/97 : Added automatic creation of constructors and destructors for
- C structs and C++ classes that do not specify any sort of
- constructor or destructor. This feature can be enabled by
- running SWIG with the '-make_default' option or by inserting
- the following pragma into an interface file :
- %pragma make_default
- The following pragma disables automatic constructor generation
- %pragma no_default
- 2/9/97 : Added -make_default option for producing default constructors
- and destructors for classes without them.
- 2/9/97 : Changed the syntax of the SWIG %pragma directive to
- %pragma option=value or %pragma(lang) option=value.
- This change makes the syntax a little more consistent
- between general pragmas and language-specific pragmas.
- The old syntax still works, but will probably be phased
- out (a warning message is currently printed).
- 2/9/97 : Improved Tcl support of global variables that are of
- structures, classes, and unions.
- 2/9/97 : Fixed C++ compilation problem in Python 'embed.i' library file.
- 2/9/97 : Fixed missing return value in perlmain.i library file.
- 2/9/97 : Fixed Python shadow classes to return an AttributeError when
- undefined attributes are accessed (older versions returned
- a NameError).
- 2/9/97 : Fixed bug when %addmethods is used after a class definition whose
- last section is protected or private.
- 2/8/97 : Made slight changes in include file processing to support
- the Macintosh.
- 2/8/97 : Extended swigmain.cxx to provide a rudimentary Macintosh interface.
- It's a really bad interface, but works until something better
- is written.
- 1/29/97 : Fixed type-casting bug introduced by 1.1b4 when setting/getting the
- value of global variables involving complex data types.
- 1/29/97 : Removed erroneous white space before an #endif in the code generated
- by the Python module (was causing errors on DEC Alpha compilers).
- 1/26/97 : Fixed errors when using default/optional arguments in Python shadow
- shadow classes.
- 1/23/97 : Fixed bug with nested %extern declarations.
- 1/21/97 : Fixed problem with typedef involving const datatypes.
- 1/21/97 : Somewhat obscure, but serious bug with having multiple levels
- of typedefs fixed. For example :
- typedef char *String;
- typedef String Name;
- Version 1.1 Beta4 (January 16, 1997)
- ====================================
- Note : SWIG 1.1b3 crashed and burned shortly after take off due
- to a few major run-time problems that surfaced after release.
- This release should fix most, if not all, of those problems.
- 1/16/97 : Fixed major memory management bug on Linux
- 1/14/97 : Fixed bug in functions returning constant C++ references.
- 1/14/97 : Modified C++ module to handle datatypes better.
- 1/14/97 : Modified parser to allow a *single* scope resolution
- operator in datatypes. Ie : Foo::bar. SWIG doesn't
- yet handle nested classes, so this should be
- sufficient for now.
- 1/14/97 : Modified parser to allow typedef inside a C++ class.
- 1/14/97 : Fixed some problems related to datatypes defined inside
- a C++ class. SWIG was not generating correct code,
- but a new scoping mechanism and method for handling
- datatypes inside a C++ class have been added.
- 1/14/97 : Changed enumerations to use the value name instead
- of any values that might have appeared in the interface
- file. This makes the code a little more friendly to
- C++ compilers.
- 1/14/97 : Removed typedef bug that made all enumerations
- equivalent to each other in the type checker (since
- it generated alot of unnecessary code).
- Version 1.1 Beta3 (January 9, 1997)
- ===================================
- Note : A *huge* number of changes related to ongoing modifications.
- 1. Support for C++ multiple inheritance added.
- 2. Typemaps added.
- 3. Some support for nested structure definitions added.
- 4. Default argument handling added.
- 5. -c option added for building bare wrapper code modules.
- 6. Rewrote Pointer type-checking to support multiple inheritance
- correctly.
- 7. Tcl 8.0 module added.
- 8. Perl4 and Guile modules resurrected from the dead (well, they
- at least work again).
- 9. New Object Oriented Tcl interface added.
- 10. Bug fixes to Perl5 shadow classes.
- 11. Cleaned up many of the internal modules of the parser.
- 12. Tons of examples and testing modules added.
- 13. Fixed bugs related to use of "const" return values.
- 14. Fixed bug with C++ member functions returning void *.
- 15. Changed SWIG configuration script.
- Version 1.1 Beta2 (December 3, 1996)
- ====================================
- 1. Completely rewrote the SWIG documentation system. The changes
- involved are too numerous to mention. Basically, take everything
- you knew about the old system, throw them out, and read the
- file Doc/doc.ps.
- 2. Limited support for #if defined() added.
- 3. Type casts are now allowed in constant expressions. ie
- #define A (int) 3
- 4. Added support for typedef lists. For example :
- typedef struct {
- double x,y,z;
- } Vector, *VectorPtr;
- 5. New SWIG directives (related to documentation system)
- %style
- %localstyle
- %subsection
- %subsubsection
- 6. Reorganized the C++ handling and made it a little easier to
- work with internally.
- 7. Fixed problem with inheriting data members in Python
- shadow classes.
- 8. Fixed symbol table problems with shadow classes in both
- Python and Perl.
- 9. Fixed annoying segmentation fault bug in wrapper code
- generated for Perl5.
- 10. Fixed bug with %addmethods directive. Now it can be placed
- anywhere in a class.
- 11. More test cases added to the SWIG self-test. Documentation
- tests are now performed along with other things.
- 12. Reorganized the SWIG library a little bit and set it up to
- self-document itself using SWIG.
- 13. Lots and lots of minor bug fixes (mostly obscure, but bugs
- nonetheless).
- Version 1.1 Beta1 (October 30, 1996)
- ====================================
- 1. Added new %extern directive for handling multiple files
- 2. Perl5 shadow classes added
- 3. Rewrote conditional compilation to work better
- 4. Added 'bool' datatype
- 5. %{,%} block is now optional.
- 6. Fixed some bugs in the Python shadow class module
- 7. Rewrote all of the SWIG tests to be more informative
- (and less scary).
- 8. Rewrote parameter list handling to be more memory
- efficient and flexible.
- 9. Changed parser to ignore 'static' declarations.
- 10. Initializers are now ignored. For example :
- struct FooBar a = {3,4,5};
- 11. Somewhat better parsing of arrays (although it's
- usually just a better error message now).
- 12. Lot's of minor bug fixes.
- Version 1.0 Final (August 31, 1996)
- ===================================
- 1. Fixed minor bug in C++ module
- 2. Fixed minor bug in pointer type-checker when using
- -DALLOW_NULL.
- 3. Fixed configure script to work with Python 1.4beta3
- 4. Changed configure script to allow compilation without
- yacc or bison.
- Version 1.0 Final (August 28, 1996)
- ===================================
- 1. Changed parser to support more C/C++ datatypes (well,
- more variants). Types like "unsigned", "short int",
- "long int", etc... now work.
- 2. "unions" added to parser.
- 3. Use of "typedef" as in :
- typedef struct {
- double x,y,z;
- } Vector;
- Now works correctly. The name of the typedef is used as
- the structure name.
- 4. Conditional compilation with #ifdef, #else, #endif, etc...
- added.
- 5. New %disabledoc, %enabledoc directives allow documentation
- to selectively be disabled for certain parts of a wrapper
- file.
- 6. New Python module supports better variable linking, constants,
- and shadow classes.
- 7. Perl5 module improved with better compatibility with XS
- and xsubpp. SWIG pointers and now created so that they
- are compatible with xsubpp pointers.
- 8. Support for [incr Tcl] namespaces added to Tcl module.
- 9. %pragma directive added.
- 10. %addmethods directive added.
- 11. %native directive added to allow pre-existing wrapper functions
- to be used.
- 12. Wrote configure script for SWIG installation.
- 13. Function pointers now allowed with typedef statements.
- 14. %typedef modified to insert a corresponding C typedef into
- the output file.
- 15. Fixed some problems related to C++ references.
- 16. New String and WrapperFunction classes add to make generating
- wrapper code easier.
- 17. Fixed command line option processing to eliminate core dumps
- and to allow help messages.
- 18. Lot's of minor bug fixes to almost all code modules
- Version 1.0 Beta 3 (Patch 1) July 17, 1996
- ==========================================
- 1.0 Final is not quite ready yet, but this release fixes a
- number of immediate problems :
- 1. Compiler errors when using -strict 1 type checking have been fixed.
- 2. Pointer type checker now recognizes pointers of the form
- _0_Type correctly.
- 3. A few minor fixes were made in the Makefile
- Version 1.0 Beta 3 (June 14, 1996)
- ==================================
- There are lots of changes in this release :
- 1. SWIG is now invoked using the "swig" command instead of "wrap".
- Hey, swig sounds cooler.
- 2. The SWIG_LIB environment variable can be set to change the
- location where SWIG looks for library files.
- 3. C++ support has been added. You should use the -c++ option
- to enable it.
- 4. The %init directive has been replaced by the %module directive.
- %module constructs a valid name for the initialization function
- for whatever target language you're using (actually this makes
- SWIG files a little cleaner). The old %init directive still works.
- 5. The syntax of the %name directive has been changed. Use of the
- old one should generate a warning message, but may still work.
- 6. To support Tcl/Tk on non-unix platforms, SWIG imports a file called
- swigtcl.cfg from the $(SWIG_LIB)/tcl directory. I don't have access
- to an NT machine, but this file is supposedly allows SWIG to
- produce wrapper code that compiles on both UNIX and non UNIX machines.
- If this doesn't work, you'll have to edit the file swigtcl.cfg. Please
- let me know if this doesn't work so I can update the file as
- necessary.
- 7. The SWIG run-time typechecker has been improved. You can also
- now redefine how it works by supplying a file called "swigptr.cfg"
- in the same directory as your SWIG interface files. By default,
- SWIG reads this file from $(SWIG_LIB)/config.
- 8. The documentation system has been changed to support the following :
- - Documentation order is printed in interface file order by
- default. This can be overridden by putting an %alpha
- directive in the beginning of the interface file.
- - You can supply additional documentation text using
- %text %{ put your text here %}
- - A few minor bugs were fixed.
- 9. A few improvements have been made to the handling of command line
- options (but it's still not finished).
- 10. Lots of minor bug fixes in most of the language modules have been
- made.
- 11. Filenames have been changed to 8.3 for compatibility with a SWIG
- port to non-unix platforms (work in progress).
- 12. C++ file suffix is now .cxx (for same reason).
- 13. The documentation has been upgraded significantly and is now
- around 100 pages. I added new examples and a section on
- C++. The documentation now includes a Table of Contents.
- 14. The SWIG Examples directory is still woefully sparse, but is
- getting better.
- Special notice about C++
- ------------------------
- This is the first version of SWIG to support C++ parsing. Currently
- the C++ is far from complete, but seems to work for simple cases.
- No work has been done to add special C++ processing to any of
- the target languages. See the user manual for details about how
- C++ is handled. If you find problems with the C++ implementation,
- please let me know. Expect major improvements in this area.
- Note : I have only successfully used SWIG and C++ with Tcl and
- Python.
- Notice about Version 1.0Final
- -----------------------------
- Version 1.0B3 is the last Beta release before version 1.0 Final is
- released. I have frozen the list of features supported in version 1.0
- and will only fix bugs as they show up. Work on SWIG version 2.0 is
- already in progress, but is going to result in rather significant
- changes to SWIG's internal structure (hopefully for the better). No
- anticipated date for version 2.0 is set, but if you've got an idea,
- let me know.
- Version 1.0 Beta 2 (April 26, 1996)
- ===================================
- This release is identical to Beta1 except a few minor bugs are
- fixed and the SWIG library has been updated to work with Tcl 7.5/Tk 4.1.
- A tcl7.5 examples directory is now included.
- - Fixed a bug in the Makefile that didn't install the libraries
- correctly.
- - SWIG Library files are now updated to work with Tcl 7.5 and Tk 4.1.
- - Minor bug fixes in other modules.
- Version 1.0 Beta 1 (April 10, 1996).
- =====================================
- This is the first "semi-official" release of SWIG. It has a
- number of substantial improvements over the Alpha release. These
- notes are in no particular order--hope I remembered everything....
- 1. Tcl/Tk
- SWIG is known to work with Tcl7.3, Tk3.6 and later versions.
- I've also tested SWIG with expect-5.19.
- Normally SWIG expects to use the header files "tcl.h" and "tk.h".
- Newer versions of Tcl/Tk use version numbers. You can specify these
- in SWIG as follows :
- % wrap -htcl tcl7.4.h -htk tk4.0.h example.i
- Of course, I prefer to simply set up symbolic links between "tcl.h" and
- the most recent stable version on the machine.
- 2. Perl4
- This implementation has been based on Perl-4.035. SWIG's interface to
- Perl4 is based on the documentation provided in the "Programming Perl"
- book by Larry Wall, and files located in the "usub" directory of the
- Perl4 distribution.
- In order to compile with Perl4, you'll need to link with the uperl.o
- file found in the Perl4 source directory. You may want to move this
- file to a more convenient location.
- 3. Perl5
- This is a somewhat experimental implementation, but is alot less
- buggy than the alpha release. SWIG operates independently of
- the XS language and xsubpp supplied with Perl5. Currently SWIG
- produces the necessary C code and .pm file needed to dynamically
- load a module into Perl5.
- To support Perl5's notion of modules and packages (as with xsubpp),
- you can use the following command line options :
- % wrap -perl5 -module MyModule -package MyPackage example.i
- Note : In order for dynamic loading to be effective, you need to be
- careful about naming. For a module named "MyModule", you'll need to
- create a shared object file called "MyModule.so" using something like
- % ld -shared my_obj.o -o MyModule.so
- The use of the %init directive must match the module name since Perl5
- calls a function "boot_ModuleName" in order to initialize things.
- See the Examples directory for some examples of how to get things
- to work.
- 4. Python1.3
- This is the first release supporting Python. The Python port is
- experimental and may be rewritten. Variable linkage is done through
- functions which is sort of a kludge. I also think it would be nice
- to import SWIG pointers into Python as a new object (instead of strings).
- Of course, this needs a little more work.
- 5. Guile3
- If you really want to live on the edge, pick up a copy of Guile-iii and
- play around with this. This is highly experimental---especially since
- I'm not sure what the official state of Guile is these days. This
- implementation may change at any time should I suddenly figure out better
- ways to do things.
- 6. Extending SWIG
- SWIG is written in C++ although I tend to think of the code as mostly
- being ANSI C with a little inheritance thrown in. Each target language
- is implemented as a C++ class that can be plugged into the system.
- If you want to add your own modifications, see Appendix C of the user
- manual. Then take a look at the "user" directory which contains some
- code for building your own extenions.
- 7. The SWIG library
- The SWIG library is still incomplete. Some of the files mentioned in
- the user manual are unavailable. These files will be made available
- when they are ready. Subscribe to the SWIG mailing list for announcements
- and updates.
- 8. SWIG Documentation
- I have sometimes experienced problems viewing the SWIG documentation in
- some postscript viewers. However, the documentation seems to print
- normally. I'm working on making much of the documentation online,
- but this takes time.
- Version 0.1 Alpha (February 9, 1996)
- ====================================
- 1. Run-time type-checking of SWIG pointers. Pointers are now represented
- as strings with both numeric and encoded type information. This makes
- it a little harder to shoot yourself in the foot (and it eliminates
- some segmentation faults and other oddities).
- 2. Python 1.3 now supported.
- 3. #define and enum can be used to install constants.
- 4. Completely rewrote the %include directive and made it alot more powerful.
- 5. Restructured the SWIG library to make it work better.
- 6. Various bug fixes to Tcl, Perl4, Perl5, and Guile implementations.
- 7. Better implementation of %typedef directive.
- 8. Made some changes to SWIG's class structure to make it easier to expand.
- SWIG is now built into a library file that you can use to make your
- own extenions.
- 9. Made extensive changes to the documentation.
- 10. Minor changes to the SWIG parser to make it use less memory.
- Also took out some extraneous rules that were undocumented and
- didn't work in the first place.
- 11. The SWIG library files "tclsh", "wish", "expect", etc... in the first
- release have been restructured and renamed to "tclsh.i", "wish.i",
- and so on.
|