2014-11-10 20:27:22 +03:00
|
|
|
The following authors have all licensed their contributions to Emscripten
|
2011-06-24 03:07:17 +04:00
|
|
|
under the licensing terms detailed in LICENSE.
|
|
|
|
|
2012-08-25 01:29:51 +04:00
|
|
|
(Authors keep copyright of their contributions, of course; they just grant
|
|
|
|
a license to everyone to use it as detailed in LICENSE.)
|
|
|
|
|
2011-06-24 03:07:17 +04:00
|
|
|
* Alon Zakai <alonzakai@gmail.com> (copyright owned by Mozilla Foundation)
|
2011-06-24 03:49:48 +04:00
|
|
|
* Tim Dawborn <tim.dawborn@gmail.com>
|
2011-06-24 05:15:28 +04:00
|
|
|
* Max Shawabkeh <max99x@gmail.com>
|
2011-10-05 11:15:25 +04:00
|
|
|
* Sigmund Vik <sigmund_vik@yahoo.com>
|
2011-10-14 02:04:31 +04:00
|
|
|
* Jeff Terrace <jterrace@gmail.com>
|
2014-07-04 04:35:36 +04:00
|
|
|
* Benoit Tremblay <trembl.ben@gmail.com>
|
2014-03-07 12:24:31 +04:00
|
|
|
* Andreas Bergmeier <abergmeier@gmx.net>
|
2011-11-28 04:32:35 +04:00
|
|
|
* Ben Schwartz <bens@alum.mit.edu>
|
2011-11-09 01:13:59 +04:00
|
|
|
* David Claughton <dave@eclecticdave.com>
|
2011-12-19 13:02:02 +04:00
|
|
|
* David Yip <yipdw@member.fsf.org>
|
2012-01-04 01:59:09 +04:00
|
|
|
* Julien Hamaide <julien.hamaide@gmail.com>
|
2012-01-17 22:37:45 +04:00
|
|
|
* Ehsan Akhgari <ehsan.akhgari@gmail.com> (copyright owned by Mozilla Foundation)
|
2012-02-14 02:15:13 +04:00
|
|
|
* Adrian Taylor <adrian@macrobug.com>
|
2012-03-06 02:57:46 +04:00
|
|
|
* Richard Assar <richard.assar@gmail.com>
|
2012-03-07 02:51:45 +04:00
|
|
|
* Nathan Hammond <emscripten@nathanhammond.com>
|
2012-03-30 09:02:01 +04:00
|
|
|
* Behdad Esfahbod <behdad@behdad.org>
|
2012-03-29 17:13:51 +04:00
|
|
|
* David Benjamin <davidben@mit.edu>
|
2012-04-04 05:33:17 +04:00
|
|
|
* Pierre Renaux <pierre@talansoft.com>
|
2012-04-10 01:37:12 +04:00
|
|
|
* Brian Anderson <banderson@mozilla.com>
|
2012-04-18 12:02:18 +04:00
|
|
|
* Jon Bardin <diclophis@gmail.com>
|
2013-04-12 14:26:45 +04:00
|
|
|
* Jukka Jylänki <jujjyl@gmail.com>
|
2012-05-28 18:35:04 +04:00
|
|
|
* Aleksander Guryanov <caiiiycuk@gmail.com>
|
2012-09-26 03:10:52 +04:00
|
|
|
* Chad Austin <chad@chadaustin.me> (copyright owned by IMVU)
|
2012-07-11 19:30:29 +04:00
|
|
|
* nandhp <nandhp@gmail.com>
|
2012-04-14 05:21:51 +04:00
|
|
|
* YeZhongWen <linghuye2.0@gmail.com>
|
2012-07-14 19:31:38 +04:00
|
|
|
* Xingxing Pan <forandom@gmail.com>
|
2012-07-27 05:37:27 +04:00
|
|
|
* Justin Kerk <dopefishjustin@gmail.com>
|
2012-08-28 06:10:20 +04:00
|
|
|
* Andrea Bedini <andrea.bedini@gmail.com>
|
2012-08-31 21:40:44 +04:00
|
|
|
* James Pike <totoro.friend@chilon.net>
|
2012-09-05 10:49:16 +04:00
|
|
|
* Mokhtar Naamani <mokhtar.naamani@gmail.com>
|
2012-07-31 05:43:30 +04:00
|
|
|
* Benjamin Stover <benjamin.stover@gmail.com>
|
2012-09-15 16:27:15 +04:00
|
|
|
* Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
|
2012-09-20 16:32:26 +04:00
|
|
|
* Janus Troelsen <janus.troelsen@stud.tu-darmstadt.de>
|
2012-11-01 18:13:06 +04:00
|
|
|
* Lars Schneider <lars.schneider@autodesk.com> (copyright owned by Autodesk, Inc.)
|
|
|
|
* Joel Martin <github@martintribe.org>
|
2012-11-08 05:58:37 +04:00
|
|
|
* Manuel Wellmann <manuel.wellmann@autodesk.com> (copyright owned by Autodesk, Inc.)
|
2012-11-20 01:00:15 +04:00
|
|
|
* Xuejie Xiao <xxuejie@gmail.com>
|
2012-11-30 11:16:00 +04:00
|
|
|
* Dominic Wong <dom@slowbunyip.org>
|
2012-12-20 02:42:01 +04:00
|
|
|
* Alan Kligman <alan.kligman@gmail.com> (copyright owned by Mozilla Foundation)
|
2012-12-28 12:36:13 +04:00
|
|
|
* Anthony Liot <wolfviking0@yahoo.com>
|
2013-01-17 01:52:32 +04:00
|
|
|
* Michael Riss <Michael.Riss@gmx.de>
|
2013-01-17 07:19:06 +04:00
|
|
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
2013-04-12 14:26:45 +04:00
|
|
|
* Manuel Schölling <manuel.schoelling@gmx.de>
|
2013-01-31 22:25:26 +04:00
|
|
|
* Bruce Mitchener, Jr. <bruce.mitchener@gmail.com>
|
2013-02-19 23:36:06 +04:00
|
|
|
* Michael Bishop <mbtyke@gmail.com>
|
2013-02-20 14:10:55 +04:00
|
|
|
* Roger Braun <roger@rogerbraun.net>
|
2013-02-27 03:43:08 +04:00
|
|
|
* Vladimir Vukicevic <vladimir@pobox.com> (copyright owned by Mozilla Foundation)
|
2013-02-21 05:49:50 +04:00
|
|
|
* Lorant Pinter <lorant.pinter@prezi.com>
|
2013-02-03 14:59:53 +04:00
|
|
|
* Tobias Doerffel <tobias.doerffel@gmail.com>
|
2013-03-06 04:43:46 +04:00
|
|
|
* Martin von Gagern <martin@von-gagern.net>
|
2013-03-19 08:13:29 +04:00
|
|
|
* Ting-Yuan Huang <thuang@mozilla.com>
|
2013-04-05 02:41:16 +04:00
|
|
|
* Joshua Granick <jgranick@blackberry.com>
|
2013-03-31 01:24:11 +04:00
|
|
|
* Felix H. Dahlke <fhd@ubercode.de>
|
2013-04-12 14:26:45 +04:00
|
|
|
* Éloi Rivard <azmeuk@gmail.com>
|
2013-04-03 23:32:55 +04:00
|
|
|
* Alexander Gladysh <ag@logiceditor.com>
|
2013-04-16 12:45:11 +04:00
|
|
|
* Arlo Breault <arlolra@gmail.com>
|
|
|
|
* Jacob Lee <artdent@gmail.com> (copyright owned by Google, Inc.)
|
2013-04-12 07:13:03 +04:00
|
|
|
* Joe Lee <jlee@imvu.com> (copyright owned by IMVU)
|
2013-04-12 14:26:45 +04:00
|
|
|
* Andy Friesen <andy@imvu.com> (copyright owned by IMVU)
|
|
|
|
* Bill Welden <bwelden@imvu.com> (copyright owned by IMVU)
|
|
|
|
* Michael Ey <mey@imvu.com> (copyright owned by IMVU)
|
|
|
|
* Llorens Marti Garcia <lgarcia@imvu.com> (copyright owned by IMVU)
|
|
|
|
* Jinsuck Kim <jkim@imvu.com> (copyright owned by IMVU)
|
|
|
|
* Todd Lee <tlee@imvu.com> (copyright owned by IMVU)
|
2013-04-10 00:32:09 +04:00
|
|
|
* Anthony Pesch <inolen@gmail.com>
|
|
|
|
* Robert Bragg <robert.bragg@intel.com> (copyright owned by Intel Corporation)
|
2013-05-02 15:03:14 +04:00
|
|
|
* Sylvestre Ledru <sylvestre@debian.org>
|
2013-05-03 04:34:20 +04:00
|
|
|
* Tom Fairfield <fairfield@cs.xu.edu>
|
2013-05-04 08:17:04 +04:00
|
|
|
* Anthony J. Thibault <ajt@hyperlogic.org>
|
2013-05-04 01:05:03 +04:00
|
|
|
* John Allwine <jallwine86@gmail.com>
|
2013-05-07 08:50:49 +04:00
|
|
|
* Martin Gerhardy <martin.gerhardy@gmail.com>
|
2013-05-17 00:35:23 +04:00
|
|
|
* James Gregory <jgregory@zynga.com> (copyright owned by Zynga, Inc)
|
2013-05-24 02:20:50 +04:00
|
|
|
* Dan Gohman <sunfish@google.com> (copyright owned by Google, Inc.)
|
2013-05-31 01:06:01 +04:00
|
|
|
* Jeff Gilbert <jgilbert@mozilla.com> (copyright owned by Mozilla Foundation)
|
2013-05-30 01:21:10 +04:00
|
|
|
* Frits Talbot <frits@metapathy.com>
|
2013-06-04 15:26:45 +04:00
|
|
|
* Onno Jongbloed <hey@onnoj.net>
|
2013-06-05 02:01:07 +04:00
|
|
|
* Jez Ng <me@jezng.com>
|
2013-06-05 02:39:55 +04:00
|
|
|
* Marc Feeley <mfeeley@mozilla.com> (copyright owned by Mozilla Foundation)
|
2013-06-05 12:53:45 +04:00
|
|
|
* Ludovic Perrine <jazzzz@gmail.com>
|
2013-06-12 05:37:13 +04:00
|
|
|
* David Barksdale <david.barksdale@adcedosolutions.com>
|
2013-06-17 18:40:03 +04:00
|
|
|
* Manfred Manik Nerurkar <nerurkar*at*made-apps.biz> (copyright owned by MADE, GmbH)
|
2013-07-01 21:35:41 +04:00
|
|
|
* Joseph Gentle <me@josephg.com>
|
2014-07-08 20:21:21 +04:00
|
|
|
* Douglas T. Crosher <dtc-moz@scieneer.com> (copyright owned by Mozilla Foundation)
|
2015-04-14 05:24:31 +03:00
|
|
|
* Douglas T. Crosher <info@jsstats.com> (copyright owned by Scieneer Pty Ltd)
|
2013-07-15 09:12:45 +04:00
|
|
|
* Soeren Balko <soeren.balko@gmail.com>
|
2013-07-16 10:21:33 +04:00
|
|
|
* Ryan Kelly (ryan@rfk.id.au)
|
2013-07-21 23:05:42 +04:00
|
|
|
* Michael Lelli <toadking@toadking.com>
|
2013-07-30 02:49:20 +04:00
|
|
|
* Yu Kobayashi <yukoba@accelart.jp>
|
2013-07-31 06:32:44 +04:00
|
|
|
* Pin Zhang <zhangpin04@gmail.com>
|
2013-08-07 02:23:37 +04:00
|
|
|
* Nick Bray <ncbray@chromium.org> (copyright owned by Google, Inc.)
|
2013-08-18 05:33:15 +04:00
|
|
|
* Aidan Hobson Sayers <aidanhs@cantab.net>
|
2013-08-24 13:20:15 +04:00
|
|
|
* Charlie Birks <admin@daftgames.net>
|
2013-08-28 20:22:37 +04:00
|
|
|
* Ranger Harke <ranger.harke@autodesk.com> (copyright owned by Autodesk, Inc.)
|
2013-09-19 00:59:41 +04:00
|
|
|
* Tobias Vrinssen <tobias@vrinssen.de>
|
2013-03-21 21:26:51 +04:00
|
|
|
* Patrick R. Martin <patrick.martin.r@gmail.com>
|
2013-09-24 23:27:55 +04:00
|
|
|
* Richard Quirk <richard.quirk@gmail.com>
|
2013-09-29 21:42:12 +04:00
|
|
|
* Marcos Scriven <marcos@scriven.org>
|
2013-09-30 14:52:12 +04:00
|
|
|
* Antoine Lambert <antoine.lambert33@gmail.com>
|
2013-10-14 21:56:04 +04:00
|
|
|
* Daniel Aquino <mr.danielaquino@gmail.com>
|
2013-10-07 02:30:07 +04:00
|
|
|
* Remi Papillie <remi.papillie@gmail.com>
|
2013-10-02 22:59:27 +04:00
|
|
|
* Fraser Adams <fraser.adams@blueyonder.co.uk>
|
2013-10-28 17:26:34 +04:00
|
|
|
* Michael Tirado <icetooth333@gmail.com>
|
2013-10-29 19:21:41 +04:00
|
|
|
* Ben Noordhuis <info@bnoordhuis.nl>
|
2013-11-07 21:19:03 +04:00
|
|
|
* Bob Roberts <bobroberts177@gmail.com>
|
2013-11-07 07:08:33 +04:00
|
|
|
* John Vilk <jvilk@cs.umass.edu>
|
2013-11-21 05:56:22 +04:00
|
|
|
* Daniel Baulig <dbaulig@fb.com> (copyright owned by Facebook, Inc.)
|
2013-11-26 00:04:45 +04:00
|
|
|
* Lu Wang <coolwanglu@gmail.com>
|
2013-11-26 03:18:24 +04:00
|
|
|
* Heidi Pan <heidi.pan@intel.com> (copyright owned by Intel)
|
2013-12-07 21:43:33 +04:00
|
|
|
* Vasilis Kalintiris <ehostunreach@gmail.com>
|
2013-12-16 21:23:28 +04:00
|
|
|
* Adam C. Clifton <adam@hulkamaniac.com>
|
2013-12-20 17:16:33 +04:00
|
|
|
* Volo Zyko <volo.zyko@gmail.com>
|
2014-01-06 22:44:18 +04:00
|
|
|
* Andre Weissflog <floooh@gmail.com>
|
2014-01-11 05:43:43 +04:00
|
|
|
* Alexandre Perrot <alexandre.perrot@gmail.com>
|
|
|
|
* Emerson José Silveira da Costa <emerson.costa@gmail.com>
|
2014-01-14 19:04:58 +04:00
|
|
|
* Jari Vetoniemi <mailroxas@gmail.com>
|
2014-01-16 23:21:24 +04:00
|
|
|
* Sindre Sorhus <sindresorhus@gmail.com>
|
2014-01-25 03:03:02 +04:00
|
|
|
* James S Urquhart <jamesu@gmail.com>
|
2014-02-05 08:45:44 +04:00
|
|
|
* Boris Gjenero <boris.gjenero@gmail.com>
|
2014-02-12 13:01:05 +04:00
|
|
|
* jonas echterhoff <jonas@unity3d.com>
|
2014-02-12 01:06:05 +04:00
|
|
|
* Sami Vaarala <sami.vaarala@iki.fi>
|
2014-02-13 06:10:19 +04:00
|
|
|
* Jack A. Arrington <jack@epicpineapple.com>
|
2014-02-15 05:48:42 +04:00
|
|
|
* Richard Janicek <r@janicek.co>
|
2014-02-20 11:18:31 +04:00
|
|
|
* Joel Croteau <jcroteau@gmail.com>
|
2014-02-23 00:24:32 +04:00
|
|
|
* Haneef Mubarak <haneef503@gmail.com>
|
2014-02-26 03:22:51 +04:00
|
|
|
* Nicolas Peri <nicox@shivaengine.com> (copyright owned by ShiVa Technologies, SAS)
|
2014-03-01 00:48:31 +04:00
|
|
|
* Bernhard Fey <e-male@web.de>
|
2014-02-23 07:24:33 +04:00
|
|
|
* Dave Nicponski <dave.nicponski@gmail.com>
|
2014-03-07 13:10:40 +04:00
|
|
|
* Jonathan Jarri <noxalus@gmail.com>
|
2014-03-08 18:02:37 +04:00
|
|
|
* Daniele Di Proietto <daniele.di.proietto@gmail.com>
|
2014-03-25 00:58:19 +04:00
|
|
|
* Dan Dascalescu <dNOSPAMdascalescu@gmail.com>
|
2014-04-02 14:16:34 +04:00
|
|
|
* Thomas Borsos <thomasborsos@gmail.com>
|
2014-04-17 00:18:03 +04:00
|
|
|
* Ori Avtalion <ori@avtalion.name>
|
2014-04-22 15:40:22 +04:00
|
|
|
* Guillaume Blanc <guillaumeblanc.sc@gmail.com>
|
2014-04-16 16:26:30 +04:00
|
|
|
* Usagi Ito <usagi@WonderRabbitProject.net>
|
2014-04-30 01:20:09 +04:00
|
|
|
* Camilo Polymeris <cpolymeris@gmail.com>
|
2014-05-13 17:28:19 +04:00
|
|
|
* Markus Henschel <markus.henschel@yager.de>
|
2014-05-20 23:13:25 +04:00
|
|
|
* Ophir Lojkine <ophir.lojkine@eleves.ec-nantes.fr>
|
2014-04-09 02:17:36 +04:00
|
|
|
* Ryan Sturgell <ryan.sturgell@gmail.com> (copyright owned by Google, Inc.)
|
2014-05-28 00:51:54 +04:00
|
|
|
* Jason Green <jason@transgaming.com> (copyright owned by TransGaming, Inc.)
|
2014-05-29 12:33:08 +04:00
|
|
|
* Ningxin Hu <ningxin.hu@intel.com> (copyright owned by Intel)
|
2014-06-03 12:03:34 +04:00
|
|
|
* Nicolas Guillemot <nlguillemot@gmail.com>
|
2014-06-12 03:58:34 +04:00
|
|
|
* Sathyanarayanan Gunasekaran <gsathya.ceg@gmail.com> (copyright owned by Mozilla Foundation)
|
2014-06-18 17:44:03 +04:00
|
|
|
* Nikolay Vorobyov <nik.vorobyov@gmail.com>
|
2014-06-27 15:59:43 +04:00
|
|
|
* Jonas Platte <mail@jonasplatte.de>
|
2014-06-28 21:35:57 +04:00
|
|
|
* Sebastien Ronsse <sronsse@gmail.com>
|
2014-07-18 01:31:31 +04:00
|
|
|
* Glenn R. Wichman <gwichman@zynga.com>
|
2014-07-25 03:45:25 +04:00
|
|
|
* Hamish Willee <hamishwillee@gmail.com> (copyright owned by Mozilla Foundation)
|
2014-07-25 14:54:03 +04:00
|
|
|
* Sylvain Chevalier <sylvain.chevalier@gmail.com>
|
2014-07-28 05:23:52 +04:00
|
|
|
* Nathan Ross <nross.se@gmail.com>
|
2014-08-05 23:33:07 +04:00
|
|
|
* Zachary Pomerantz <zmp@umich.edu>
|
2014-07-08 15:38:12 +04:00
|
|
|
* Boris Tsarev <boristsarev@gmail.com>
|
2014-08-02 20:25:56 +04:00
|
|
|
* Mark Logan <mark@artillery.com> (copyright owned by Artillery Games, Inc.)
|
2014-08-11 22:54:49 +04:00
|
|
|
* Коренберг Марк <socketpair@gmail.com>
|
2014-08-30 00:37:09 +04:00
|
|
|
* Gauthier Billot <gogoprog@gmail.com>
|
2014-09-02 23:08:17 +04:00
|
|
|
* Árpád Goretity <h2co3@h2co3.org>
|
2014-09-04 13:11:56 +04:00
|
|
|
* Nicholas Wilson <nicholas@nicholaswilson.me.uk>
|
2014-09-12 23:19:36 +04:00
|
|
|
* Aaron Mandle <aaronmandle@gmail.com>
|
2014-09-19 23:18:17 +04:00
|
|
|
* Bailey Hayes <Bailey.Hayes@sas.com> (copyright owned by SAS Institute Inc.)
|
2014-10-01 23:46:10 +04:00
|
|
|
* Paul Holland <pholland@adobe.com>
|
2014-10-02 19:19:52 +04:00
|
|
|
* James Long <longster@gmail.com>
|
2014-10-02 04:30:20 +04:00
|
|
|
* David Anderson <danderson@mozilla.com> (copyright owned by Mozilla Foundation)
|
2014-10-25 02:51:00 +04:00
|
|
|
* Eric Rannaud <e@nanocritical.com> (copyright owned by Nanocritical Corp.)
|
2015-03-04 01:25:05 +03:00
|
|
|
* William Furr <wfurr@google.com> (copyright owned by Google, Inc.)
|
2014-10-30 06:03:50 +03:00
|
|
|
* Dan Glastonbury <dglastonbury@mozilla.com> (copyright owned by Mozilla Foundation)
|
2014-10-09 11:51:01 +04:00
|
|
|
* Warren Seine <warren.seine@aerys.in> (copyright owned by Aerys SAS)
|
2014-11-10 20:27:22 +03:00
|
|
|
* Petr Babicka <babcca@gmail.com>
|
2014-11-18 18:52:15 +03:00
|
|
|
* Akira Takahashi <faithandbrave@gmail.com>
|
2014-12-09 16:41:02 +03:00
|
|
|
* Victor Costan <costan@gmail.com>
|
2015-01-16 15:53:22 +03:00
|
|
|
* Pepijn Van Eeckhoudt <pepijn.vaneeckhoudt@luciad.com> (copyright owned by Luciad NV)
|
2015-01-22 00:45:12 +03:00
|
|
|
* Stevie Trujillo <stevie.trujillo@gmail.com>
|
2015-01-29 18:29:10 +03:00
|
|
|
* Edward Rudd <urkle@outoforder.cc>
|
2015-02-02 23:29:19 +03:00
|
|
|
* Rene Eichhorn <rene.eichhorn1@gmail.com>
|
2015-02-07 03:02:55 +03:00
|
|
|
* Nick Desaulniers <nick@mozilla.com> (copyright owned by Mozilla Foundation)
|
2015-02-16 05:42:06 +03:00
|
|
|
* Luke Wagner <luke@mozilla.com> (copyright owned by Mozilla Foundation)
|
2015-02-15 21:14:53 +03:00
|
|
|
* Matt McCormick <matt.mccormick@kitware.com>
|
2015-02-09 23:21:52 +03:00
|
|
|
* Thaddée Tyl <thaddee.tyl@gmail.com>
|
2015-02-26 01:05:10 +03:00
|
|
|
* Philipp Wiesemann <philipp.wiesemann@arcor.de>
|
2015-03-18 17:45:28 +03:00
|
|
|
* Jan Jongboom <janjongboom@gmail.com> (copyright owned by Telenor Digital AS)
|
2015-04-03 22:21:42 +03:00
|
|
|
* Tiago Quelhas <tiagoq@gmail.com>
|
2015-04-07 14:32:03 +03:00
|
|
|
* Reinier de Blois <rddeblois@gmail.com>
|
2015-04-15 03:54:16 +03:00
|
|
|
* Yuichi Nishiwaki <yuichi.nishiwaki@gmail.com>
|
2015-04-07 18:18:42 +03:00
|
|
|
* Jérôme Bernard <jerome.bernard@ercom.fr> (copyright owned by Ercom)
|
2015-04-22 17:26:43 +03:00
|
|
|
* Chanhwi Choi <ccwpc@hanmail.net>
|
2015-04-22 01:12:22 +03:00
|
|
|
* Fábio Santos <fabiosantosart@gmail.com>
|
2015-04-25 01:57:48 +03:00
|
|
|
* Thibaut Despoulain <thibaut@artillery.com> (copyright owned by Artillery Games, Inc.)
|
2015-04-26 10:48:04 +03:00
|
|
|
* Wei Tjong Yao <weitjong@gmail.com>
|
2015-05-06 04:04:15 +03:00
|
|
|
* Tim Guan-tin Chien <timdream@gmail.com>
|
2015-05-13 00:54:55 +03:00
|
|
|
* Krzysztof Jakubowski <nadult@fastmail.fm>
|
2015-05-27 17:38:07 +03:00
|
|
|
* Vladimír Vondruš <mosra@centrum.cz>
|
2015-06-14 20:57:09 +03:00
|
|
|
* Brion Vibber <brion@pobox.com>
|
2015-06-16 21:30:43 +03:00
|
|
|
* Philip Lafleur <sendsbeak@gmail.com>
|
2015-06-18 00:57:52 +03:00
|
|
|
* Javier Meseguer de Paz <j.meseguer@gmail.com>
|
2015-06-25 19:18:41 +03:00
|
|
|
* Michael A. Balazs <michael.balazs@gmail.com>
|
2015-06-24 19:14:42 +03:00
|
|
|
* Andreas Blixt <me@blixt.nyc>
|
2015-07-08 23:11:24 +03:00
|
|
|
* Haofeng Zhang <h.z@duke.edu>
|
2015-07-13 00:08:22 +03:00
|
|
|
* Cody Welsh <codyw@protonmail.com>
|
2015-07-13 22:58:38 +03:00
|
|
|
* Hoong Ern Ng <hoongern@gmail.com>
|
2015-07-21 21:44:07 +03:00
|
|
|
* Kagami Hiiragi <kagami@genshiken.org>
|
2015-07-24 03:52:33 +03:00
|
|
|
* Jan Bölsche <jan@lagomorph.de>
|
2015-08-04 20:34:31 +03:00
|
|
|
* Sebastian Matthes <sebastianmatthes@outlook.com> (copyright owned by Volkswagen AG)
|
2015-09-11 20:59:58 +03:00
|
|
|
* Robert Goulet <robert.goulet@autodesk.com> (copyright owned by Autodesk, Inc.)
|
2015-09-23 08:31:38 +03:00
|
|
|
* Juha Järvi <befunge@gmail.com>
|
2015-09-22 23:57:25 +03:00
|
|
|
* Louis Lagrange <lagrange.louis@gmail.com>
|
2015-09-01 04:00:01 +03:00
|
|
|
* Ying-Ruei Liang <thumbd03803@gmail.com>
|
2015-09-27 08:53:24 +03:00
|
|
|
* Stuart Geipel <lapimlu@gmail.com>
|
2015-10-21 04:21:14 +03:00
|
|
|
* Yeonjun Lim <yjroot@gmail.com>
|
2015-10-24 21:12:17 +03:00
|
|
|
* Andrew Karpushin <reven86@gmail.com>
|
2015-10-27 19:29:10 +03:00
|
|
|
* Felix Zimmermann <fzimmermann89@gmail.com>
|
2015-11-06 21:25:32 +03:00
|
|
|
* Sven-Hendrik Haase <svenstaro@gmail.com>
|
2015-11-08 14:32:50 +03:00
|
|
|
* Simon Sandström <simon@nikanor.nu>
|
2015-11-12 14:50:16 +03:00
|
|
|
* Khaled Sami <k.sami.mohammed@gmail.com>
|
|
|
|
* Omar El-Mohandes <omar.elmohandes90@gmail.com>
|
2015-11-14 17:19:25 +03:00
|
|
|
* Florian Rival <florian.rival@gmail.com>
|
2015-11-15 22:02:03 +03:00
|
|
|
* Mark Achée <mark@achee.com>
|
2015-11-16 22:42:18 +03:00
|
|
|
* Piotr Paczkowski <kontakt@trzeci.eu>
|
2015-11-25 22:17:39 +03:00
|
|
|
* Braden MacDonald <braden@bradenmacdonald.com>
|
2015-12-03 13:26:50 +03:00
|
|
|
* Kevin Cheung <kevin.cheung@autodesk.com> (copyright owned by Autodesk, Inc.)
|
2015-12-21 22:31:45 +03:00
|
|
|
* Josh Peterson <petersonjm1@gmail.com>
|
2015-12-28 22:35:18 +03:00
|
|
|
* eska <eska@eska.me>
|
2015-12-19 03:43:16 +03:00
|
|
|
* Nate Burr <nate.oo@gmail.com>
|
2016-01-03 12:29:34 +03:00
|
|
|
* Paul "TBBle" Hampson <Paul.Hampson@Pobox.com>
|
2016-01-06 21:36:19 +03:00
|
|
|
* Andreas Plesch <andreasplesch@gmail.com>
|
2015-12-19 05:31:59 +03:00
|
|
|
* Brian Armstrong <brian.armstrong.ece+github@gmail.com>
|
2015-11-23 12:35:55 +03:00
|
|
|
* Vincenzo Chianese <vincenz.chianese@icloud.com>
|
2016-01-27 04:14:37 +03:00
|
|
|
* Noam T.Cohen <noam@ecb.co.il>
|
2016-01-28 01:56:31 +03:00
|
|
|
* Nick Shin <nick.shin@gmail.com>
|
2016-02-09 04:40:48 +03:00
|
|
|
* Gregg Tavares <github@greggman.com>
|
2016-02-11 04:28:21 +03:00
|
|
|
* Tanner Rogalsky <tanner@tannerrogalsky.com>
|
Duplicate function elimination
This change adds support for duplicate function elimination (DFE) to the
JavaScript optimizer. A new JS file has been added -
eliminate-duplicate-functions.js - which is used to postprocess the
output generated by Emscripten. We add a new file, rather than
augmenting the existing JS optimizer file, for a variety of reasons -
pass independence, reduced coupling between Python scripts and the JS
optimizer, etc.
We introduce a multipass algorithm in which each pass consists of the
following four phases:
Phase 1 - identify duplicate functions using a hash of the function body
Phase 2 - identify variable names that would conflict after renaming
function calls
Phase 3 - generate mapping from equivalent functions to their
replacement function - use the information from Phase 2 to ensure that
the replacement function is not a variable name
Phase 4 - use the mapping generated in Phase 3 to perform the reduction
NOTE: In some rare cases, we may actually not be able to move on from
Phase 3 if we find that we cannot generate a mapping because of
conflicts with variable names.
One pass can reveal new sets of identical functions which in turn can be
reduced by further passes. Empirically, four or five passes are
sufficient to eliminate all duplicate functions. Internally, therefore,
the elimination will perform 5 passes by default. This can be overridden
by setting ELIMINATE_DUPLICATE_FUNCTIONS_PASSES to 1 in settings.js or
on the Emscripten command line.
Generated asm.js is broken into several batches (at function boundaries)
to enable parallelization of the elimination. This saves on memory and
makes use of more CPU cores to save on build time. A number of tests
have been introduced to test this functionality as well.
The change also introduces various tweaks to the amount of diagnostic
information that is dumped out by the JavaScript optimizer. Verbose
logging is now only enabled in debug mode (via the EMCC_LOG_DEBUG
environment variable). We also dump backtraces on encountering unhandled
exceptions: this is useful when Emscripten runs as part of a large build
process. In order to view detailed information about which functions
were merged, set the
ELIMINATE_DUPLICATE_FUNCTIONS_DUMP_EQUIVALENT_FUNCTIONS value to 1 in
settings.js or via the Emscripten command line. This generates a log
file in the same directory as the generated JavaScript listing the sets
of merged functions. This can be decoded using the symbol map generated
by Emscripten. It is, therefore, recommended that developers enable
symbol map generation when attempting to modify or debug this feature.
Since DFE increases build time significantly, it is disabled by default.
It can be enabled by setting ELIMINATE_DUPLICATE_FUNCTIONS to 1 either
in settings.js or by adding "-s ELIMINATE_DUPLICATE_FUNCTIONS=1" on the
Emscripten command line. The poppler test has been updated to also run
with the ELIMINATE_DUPLICATE_FUNCTIONS setting set to 1.
Improvements/future work
It has been observed that on average we experience a code size reduction
of 25% when transpiling large C++ code bases. Typically, C++ code that
makes heavy use of templates will experience the greatest reduction in
code size. There are several directions that future work might take:
* Deduplication of code across templates: e.g. reduction of
std::vector<long> and std::vector<int> to single instantiations of
template code when appropriate
* Histogram-based selection of candidates for replacement: improved code
size should be attainable by assigning the shortest identifiers to the
most frequently referenced functions (in the style of Huffman coding)
* Convergence: the five-pass default chosen in this implementation is
based on empirical observations on a 150,000LOC C++ code base
* Candidate selection: this will, most likely, influence both the
convergence time (i.e. number of passes) and the code size reduction;
currently, when selecting candidates, we choose the shortest identifier
from the list that is not also a variable name
2016-01-05 20:58:20 +03:00
|
|
|
* Richard Cook <rcook@tableau.com> (copyright owned by Tableau Software, Inc.)
|
|
|
|
* Arnab Choudhury <achoudhury@tableau.com> (copyright owned by Tableau Software, Inc.)
|
|
|
|
* Charles Vaughn <cvaughn@tableau.com> (copyright owned by Tableau Software, Inc.)
|
2016-02-13 22:55:15 +03:00
|
|
|
* Pierre Krieger <pierre.krieger1708@gmail.com>
|
2016-02-18 23:47:07 +03:00
|
|
|
* Jakob Stoklund Olesen <stoklund@2pi.dk>
|
2014-12-23 16:23:35 +03:00
|
|
|
* Jérémy Anger <angerj.dev@gmail.com>
|
2016-03-02 03:50:18 +03:00
|
|
|
* Derek Schuff <dschuff@chromium.org> (copyright owned by Google, Inc.)
|
2016-03-10 00:47:51 +03:00
|
|
|
* Ashley Sommer <flubba86@gmail.com>
|
2016-03-21 22:22:46 +03:00
|
|
|
* Dave Fletcher <graveyhead@gmail.com>
|
2016-03-19 00:08:56 +03:00
|
|
|
* Lars-Magnus Skog <ralphtheninja@riseup.net>
|
2016-04-08 16:32:48 +03:00
|
|
|
* Pieter Vantorre <pietervantorre@gmail.com>
|
2016-04-14 15:40:55 +03:00
|
|
|
* Maher Sallam <maher@sallam.me>
|
2016-04-21 23:32:47 +03:00
|
|
|
* Andrey Burov <burik666@gmail.com>
|
2016-04-26 20:20:59 +03:00
|
|
|
* Holland Schutte <hgschutte1@gmail.com>
|
2016-04-25 20:15:33 +03:00
|
|
|
* Kerby Geffrard <kerby.geffrard@gmail.com>
|
2016-05-03 23:59:04 +03:00
|
|
|
* cynecx <me@cynecx.net>
|
2016-04-25 20:47:22 +03:00
|
|
|
* Chris Gibson <cgibson@mrvoxel.com>
|
2016-05-17 01:10:40 +03:00
|
|
|
* Harald Reingruber <code*at*h-reingruber.at>
|
2016-05-20 02:56:59 +03:00
|
|
|
* Aiden Koss <madd0131@umn.edu>
|
|
|
|
* Dustin VanLerberghe <good_ol_dv@hotmail.com>
|
2016-05-24 11:29:12 +03:00
|
|
|
* Philip Bielby <pmb45-github@srcf.ucam.org> (copyright owned by Jagex Ltd.)
|
2016-05-27 12:25:18 +03:00
|
|
|
* Régis Fénéon <regis.feneon@gmail.com>
|
2016-06-23 22:26:34 +03:00
|
|
|
* Dominic Chen <d.c.ddcc@gmail.com> (copyright owned by Google, Inc.)
|
2016-08-03 07:45:43 +03:00
|
|
|
* Junji Hashimoto <junji.hashimoto@gmail.com>
|
2016-08-16 01:52:02 +03:00
|
|
|
* Heejin Ahn <aheejin@gmail.com> (copyright owned by Google, Inc.)
|
2016-08-18 01:58:58 +03:00
|
|
|
* Andras Kucsma <andras.kucsma@gmail.com>
|
2016-08-26 19:45:41 +03:00
|
|
|
* Mateusz Borycki <mateuszborycki@gmail.com>
|
2016-08-25 19:17:40 +03:00
|
|
|
* Franklin Ta <fta2012@gmail.com>
|
2016-09-01 02:57:58 +03:00
|
|
|
* Jacob Gravelle <jgravelle@google.com> (copyright owned by Google, Inc.)
|
2016-10-10 21:55:21 +03:00
|
|
|
* Kagami Sascha Rosylight <saschanaz@outlook.com>
|
2016-10-04 23:53:56 +03:00
|
|
|
* Benny Jacobs <benny@gmx.it>
|
Fix Exception Handling Leak and Crash
This patch fixes two issues in the exception handling backend
(transforms actual results reported below to expected results
reported below).
Environment:
Branch: incoming
Emcc -v: emcc (Emscripten gcc/clang-like replacement + linker
emulating GNU ld) 1.36.11
clang version 3.9.0
(https://github.com/kripken/emscripten-fastcomp-clang/
271ce598c3d1fe74efadc254f5be1b57edea9f41)
(https://github.com/kripken/emscripten-fastcomp/
61acfb230665464544f2e8db292f8999fc3c628c)
(emscripten 1.36.0 : 1.36.0)
Target: x86_64-apple-darwin16.0.0
Thread model: posix
InstalledDir: /Users/ray/src/gm/emsdk_portable/clang/
fastcomp/build_master_64/bin
Issue 1: Re-thrown exceptions leak (and their destructors are
not invoked)
Repro:
#include <iostream>
struct NeedsCleanUp
{
NeedsCleanUp()
{
std::cout << "Creating cleanup item" << std::endl;
}
~NeedsCleanUp()
{
std::cout << "Destroying cleanup item" << std::endl;
}
};
int main(int argc, char* argv[])
{
try
{
try
{
throw NeedsCleanUp {};
}
catch (...)
{
throw; // rethrow causes leak
}
}
catch (...)
{
}
return 0;
}
Build and run:
em++ -g -std=c++11 --emrun -s EXCEPTION_DEBUG=0 -o exc1.html exc1.cpp
emrun --browser chrome exc1.html
ACTUAL RESULT:
pre-main prep time: 23 ms
Creating cleanup item
ACTUAL RESULT WITH EXCEPTION DEBUG:
pre-main prep time: 25 ms
Creating cleanup item
Compiled code throwing an exception, 5267520,8,357
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
Compiled code RE-throwing an exception, popped 5267520,5267520,stack,
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
cxa_end_catch popped 5267520,5267520,stack,
decref 5267520
EXPECTED RESULT:
pre-main prep time: 23 ms
Creating cleanup item
Destroying cleanup item
EXPECTED RESULT WITH EXCEPTION DEBUG:
pre-main prep time: 24 ms
Creating cleanup item
Compiled code throwing an exception, 5267520,8,357
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
Compiled code RE-throwing an exception, popped 5267520,5267520,stack,
5267520
can_catch on 5267520
cxa_end_catch popped 5267520,5267520,stack,
decref 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
cxa_end_catch popped 5267520,0,stack,
decref 5267520
Destroying cleanup item
decref freeing exception 5267520,0,stack,
=======================================================================
Issue 2: Resuming exception unwinding causes crash when resumed
exceptions have multiple references
Repro:
#include <iostream>
struct NeedsCleanUp
{
const int item;
NeedsCleanUp(int i)
: item { i }
{
std::cout << "Creating cleanup item " << item << std::endl;
}
NeedsCleanUp(const NeedsCleanUp& src)
: item { 100 + src.item }
{
std::cout << "Copying cleanup item " << src.item << " to "
<< item << std::endl;
}
~NeedsCleanUp()
{
std::cout << "Destroying cleanup item " << item << std::endl;
}
};
int main(int argc, char* argv[])
{
NeedsCleanUp ex { 1 };
std::exception_ptr exp1 { std::make_exception_ptr(ex) };
std::exception_ptr exp2 { exp1 };
try
{
[&exp1] {
NeedsCleanUp cl { 2 }; // causes "resuming exception"
// ref count reset
std::rethrow_exception(exp1);
} ();
}
catch (...)
{
}
return 0;
}
Build and run:
em++ -g -std=c++11 --emrun -s EXCEPTION_DEBUG=0 -o exc2.html exc2.cpp
emrun --browser chrome exc2.html
ACTUAL RESULT:
pre-main prep time: 23 ms
Creating cleanup item 1
Copying cleanup item 1 to 101
Copying cleanup item 101 to 201
Destroying cleanup item 101
Creating cleanup item 2
Destroying cleanup item 2
Destroying cleanup item 201
exception thrown: TypeError: Cannot read property 'refcount' of
undefined,TypeError: Cannot read property 'refcount' of undefined
at Object.decRef (http://localhost:6931/exc2.js:1564:20)
at ___cxa_decrement_exception_refcount
(http://localhost:6931/exc2.js:1578:18)
at __ZNSt13exception_ptrD2Ev (http://localhost:6931/exc2.js:23642:2)
at _main (http://localhost:6931/exc2.js:5993:3)
at Object.asm._main (http://localhost:6931/exc2.js:65981:19)
at Object.callMain (http://localhost:6931/exc2.js:66150:30)
at doRun (http://localhost:6931/exc2.js:66208:60)
at http://localhost:6931/exc2.js:66219:7
ACTUAL RESULT WITH EXCEPTION DEBUG:
pre-main prep time: 22 ms
Creating cleanup item 1
Copying cleanup item 1 to 101
Copying cleanup item 101 to 201
Compiled code throwing an exception, 5267520,8,360
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
addref 5267520
cxa_end_catch popped 5267520,5267520,stack,
decref 5267520
Destroying cleanup item 101
addref 5267520
Creating cleanup item 2
addref 5267520
Compiled code RE-throwing an exception, popped 5267520,0,stack,
can_catch on 5267520
decref 5267520
Destroying cleanup item 2
Resuming exception 5267520,5267520
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
decref 5267520
Destroying cleanup item 201
decref freeing exception 5267520,5267520,stack,5267520
no de-adjustment for unknown exception ptr 5267520
decref 5267520
exception thrown: TypeError: Cannot read property 'refcount' of
undefined,TypeError: Cannot read property 'refcount' of undefined
at Object.decRef (http://localhost:6931/exc2.js:1568:20)
at ___cxa_decrement_exception_refcount
(http://localhost:6931/exc2.js:1583:18)
at __ZNSt13exception_ptrD2Ev (http://localhost:6931/exc2.js:23654:2)
at _main (http://localhost:6931/exc2.js:6005:3)
at Object.asm._main (http://localhost:6931/exc2.js:65993:19)
at Object.callMain (http://localhost:6931/exc2.js:66162:30)
at doRun (http://localhost:6931/exc2.js:66220:60)
at http://localhost:6931/exc2.js:66231:7
EXPECTED RESULT:
pre-main prep time: 22 ms
Creating cleanup item 1
Copying cleanup item 1 to 101
Copying cleanup item 101 to 201
Destroying cleanup item 101
Creating cleanup item 2
Destroying cleanup item 2
Destroying cleanup item 201
Destroying cleanup item 1
EXPECTED RESULT WITH EXCEPTION DEBUG:
pre-main prep time: 27 ms
Creating cleanup item 1
Copying cleanup item 1 to 101
Copying cleanup item 101 to 201
Compiled code throwing an exception, 5267520,8,360
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520
addref 5267520
addref 5267520
cxa_end_catch popped 5267520,5267520,stack,
decref 5267520
Destroying cleanup item 101
addref 5267520
Creating cleanup item 2
addref 5267520
Compiled code RE-throwing an exception, popped 5267520,0,stack,5267520
can_catch on 5267520
decref 5267520
Destroying cleanup item 2
Resuming exception 5267520,5267520
can_catch on 5267520
cxa_begin_catch 5267520,stack,5267520,5267520
addref 5267520
cxa_end_catch popped 5267520,5267520,stack,5267520
decref 5267520
decref 5267520
decref 5267520
Destroying cleanup item 201
decref freeing exception 5267520,0,stack,5267520
Destroying cleanup item 1
2016-10-09 04:27:05 +03:00
|
|
|
* Ray Brown <code@liquibits.com>
|
2016-11-07 02:32:02 +03:00
|
|
|
* Christopher Serr <christopher.serr@gmail.com>
|
2016-11-09 19:09:27 +03:00
|
|
|
* Aaron Ruß <aaron.russ@dfki.de> (copyright owned by DFKI GmbH)
|
2016-11-02 14:25:43 +03:00
|
|
|
* Vilibald Wanča <vilibald@wvi.cz>
|
2016-12-04 04:51:51 +03:00
|
|
|
* Alex Hixon <alex@alexhixon.com>
|
2016-12-15 21:56:44 +03:00
|
|
|
* Vladimir Davidovich <thy.ringo@gmail.com>
|
2017-01-20 05:35:51 +03:00
|
|
|
* Dylan McKay <dylanmckay34@gmail.com>
|
2016-12-19 01:28:23 +03:00
|
|
|
* Christophe Gragnic <cgragnic@netc.fr>
|
2017-01-03 22:19:51 +03:00
|
|
|
* Murphy McCauley <murphy.mccauley@gmail.com>
|
2017-01-12 00:47:00 +03:00
|
|
|
* Anatoly Trosinenko <anatoly.trosinenko@gmail.com>
|
2017-01-08 08:36:56 +03:00
|
|
|
* Brad Grantham <grantham@plunk.org>
|
|
|
|
|