Bug 139229 - DFG Tries using an inner object's getter/setter when one hasn't been defined
Summary: DFG Tries using an inner object's getter/setter when one hasn't been defined
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 312.x
Hardware: All All
: P2 Normal
Assignee: Michael Saboff
URL:
Keywords: InRadar
Depends on:
Blocks: 137955 139418
  Show dependency treegraph
 
Reported: 2014-12-03 11:16 PST by Michael Saboff
Modified: 2014-12-10 04:52 PST (History)
5 users (show)

See Also:


Attachments
Patch (8.91 KB, patch)
2014-12-04 23:37 PST, Michael Saboff
msaboff: review-
Details | Formatted Diff | Diff
Patch using undefined function class for missing getters and setters (44.73 KB, patch)
2014-12-08 15:17 PST, Michael Saboff
ggaren: review-
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews100 for mac-mountainlion (1.24 MB, application/zip)
2014-12-08 16:25 PST, Build Bot
no flags Details
Patch with suggested changes and fix for test failures (45.42 KB, patch)
2014-12-09 03:34 PST, Michael Saboff
fpizlo: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Saboff 2014-12-03 11:16:42 PST
The test case below crashes in the DFG trying to call the inner getter (which doesn't exist).
<script>
function InnerObject()
{
    this._enabled = false;
}

InnerObject.prototype = {
    set enabled(x)
    {
        this._enabled = x;
    }
}

function OuterObject(inner)
{
    this._innerObject = inner;
}

OuterObject.prototype = {
    get enabled()
    {
        return this._innerObject.enabled;
    },

    set enabled(x)
    {
        this._innerObject = x;
    }
}

var inner = new InnerObject;
var outer = new OuterObject(inner);

for (var i = 0; i < 500; ++i) {
    console.log(outer.enabled);
}
</script>

<rdar://problem/18890847>
Comment 1 Michael Saboff 2014-12-03 11:41:42 PST
There isn't a crash when there isn't nesting of objects.
Comment 2 Michael Saboff 2014-12-04 23:37:43 PST
Created attachment 242620 [details]
Patch

Performance test results:
Generating benchmark report at /Volumes/Data/src/webkit/Baseline_FixedGetterSetter_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-mini-2_20141204_2324_report.txt
And raw data at /Volumes/Data/src/webkit/Baseline_FixedGetterSetter_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-mini-2_20141204_2324.json

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-mini-2 (Macmini6,2).

VMs tested:
"Baseline" at /Volumes/Data/src/webkit.work/WebKitBuild/Release/jsc (r176831)
"FixedGetterSetter" at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r176831)

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                         Baseline             FixedGetterSetter                                 
SunSpider:
   3d-cube                                            5.1812+-0.5312            5.1505+-0.3448        
   3d-morph                                           6.2981+-0.0890     ?      6.4315+-0.4586        ? might be 1.0212x slower
   3d-raytrace                                        6.5369+-0.1375     ?      6.5934+-0.3854        ?
   access-binary-trees                                2.1967+-0.2882            2.1403+-0.0498          might be 1.0264x faster
   access-fannkuch                                    6.0130+-0.1884            5.9993+-0.1461        
   access-nbody                                       3.1089+-0.3881            3.0245+-0.0746          might be 1.0279x faster
   access-nsieve                                      3.8430+-0.0818            3.8339+-0.1358        
   bitops-3bit-bits-in-byte                           1.6650+-0.0217            1.6422+-0.0588          might be 1.0139x faster
   bitops-bits-in-byte                                3.5934+-0.1201            3.5908+-0.0906        
   bitops-bitwise-and                                 2.1530+-0.0252     ?      2.2003+-0.1336        ? might be 1.0219x slower
   bitops-nsieve-bits                                 3.9822+-0.2125            3.7758+-0.0815          might be 1.0547x faster
   controlflow-recursive                              2.3048+-0.0505     ?      2.3712+-0.1328        ? might be 1.0288x slower
   crypto-aes                                         4.5496+-0.3884            4.4566+-0.6833          might be 1.0209x faster
   crypto-md5                                         2.5148+-0.0871     ?      2.5256+-0.0559        ?
   crypto-sha1                                        2.7612+-0.3240            2.7377+-0.3274        
   date-format-tofte                                  9.5891+-0.3786     ?      9.6378+-0.2001        ?
   date-format-xparb                                  5.5779+-0.1621            5.5062+-0.1332          might be 1.0130x faster
   math-cordic                                        3.1979+-0.0712     ?      3.2524+-0.0337        ? might be 1.0170x slower
   math-partial-sums                                  5.4152+-0.0934            5.2665+-0.2216          might be 1.0282x faster
   math-spectral-norm                                 2.0325+-0.1247     ?      2.0974+-0.3247        ? might be 1.0319x slower
   regexp-dna                                         8.9889+-1.8544            7.6594+-0.3301          might be 1.1736x faster
   string-base64                                      4.7609+-0.5413     ?      5.2419+-1.4871        ? might be 1.1010x slower
   string-fasta                                       6.5160+-0.1074     ?      6.6525+-0.1972        ? might be 1.0209x slower
   string-tagcloud                                   10.2206+-0.3182     ?     10.5682+-1.2833        ? might be 1.0340x slower
   string-unpack-code                                21.9182+-0.2636     ?     21.9720+-1.2732        ?
   string-validate-input                              4.9603+-0.3898            4.8683+-0.1756          might be 1.0189x faster

   <arithmetic> *                                     5.3800+-0.1023            5.3537+-0.0711          might be 1.0049x faster
   <geometric>                                        4.4499+-0.0852            4.4332+-0.0683          might be 1.0038x faster
   <harmonic>                                         3.8134+-0.0773            3.8066+-0.0558          might be 1.0018x faster

                                                         Baseline             FixedGetterSetter                                 
LongSpider:
   3d-cube                                          909.4142+-9.7722     ?    918.5630+-20.2487       ? might be 1.0101x slower
   3d-morph                                        1599.6682+-10.1483        1590.5363+-14.3551       
   3d-raytrace                                      773.2231+-12.1185    ?    775.1793+-3.7693        ?
   access-binary-trees                             1060.2239+-10.7191    ?   1106.2578+-111.1252      ? might be 1.0434x slower
   access-fannkuch                                  346.7938+-17.7958         341.0005+-17.8243         might be 1.0170x faster
   access-nbody                                     648.3939+-7.1446          647.1680+-10.6778       
   access-nsieve                                   1018.7304+-15.6258    ?   1020.8514+-12.0639       ?
   bitops-3bit-bits-in-byte                          48.4818+-1.8718     ?     48.9299+-0.8470        ?
   bitops-bits-in-byte                              103.8304+-4.1068     ?    105.5810+-8.8113        ? might be 1.0169x slower
   bitops-nsieve-bits                               787.2380+-33.4096         784.0254+-13.5527       
   controlflow-recursive                            526.6383+-1.1765          521.3782+-14.2571         might be 1.0101x faster
   crypto-aes                                       732.9152+-11.2249         728.5687+-16.9897       
   crypto-md5                                       643.6379+-12.5156    ?    649.3508+-6.9320        ?
   crypto-sha1                                      709.0975+-40.3500    ?    716.6497+-19.7855       ? might be 1.0107x slower
   date-format-tofte                                813.1732+-9.3837     ?    833.3309+-40.1960       ? might be 1.0248x slower
   date-format-xparb                                809.9940+-37.9396         776.5413+-10.7712         might be 1.0431x faster
   math-cordic                                      631.5779+-17.3402         614.9540+-4.3406          might be 1.0270x faster
   math-partial-sums                                569.6413+-4.5774     ?    574.5883+-6.1548        ?
   math-spectral-norm                               594.7190+-10.4799         593.9833+-10.4808       
   string-base64                                    374.8027+-14.0904    ?    379.9797+-12.6341       ? might be 1.0138x slower
   string-fasta                                     433.3176+-7.5692     ?    440.9139+-8.4912        ? might be 1.0175x slower
   string-tagcloud                                  228.8425+-10.4012         226.3263+-2.4228          might be 1.0111x faster

   <arithmetic>                                     652.9252+-4.2382     ?    654.3026+-6.8272        ? might be 1.0021x slower
   <geometric> *                                    533.5778+-3.3838     ?    534.5470+-4.8117        ? might be 1.0018x slower
   <harmonic>                                       343.8780+-2.7247     ?    345.5797+-4.5580        ? might be 1.0049x slower

                                                         Baseline             FixedGetterSetter                                 
V8Spider:
   crypto                                            59.6817+-4.5271     ?     60.3123+-2.9092        ? might be 1.0106x slower
   deltablue                                        119.2990+-5.0817     ?    120.0697+-4.5012        ?
   earley-boyer                                      47.9811+-2.3436     ?     49.9763+-4.4607        ? might be 1.0416x slower
   raytrace                                          42.8233+-5.5990           42.3491+-2.5882          might be 1.0112x faster
   regexp                                            74.1033+-3.4558     ?     74.1898+-2.2605        ?
   richards                                          97.8633+-9.4411           92.2609+-4.7707          might be 1.0607x faster
   splay                                             35.8972+-1.7727           35.0169+-1.9652          might be 1.0251x faster

   <arithmetic>                                      68.2356+-3.4625           67.7393+-0.3636          might be 1.0073x faster
   <geometric> *                                     62.6671+-3.2272           62.3489+-1.1289          might be 1.0051x faster
   <harmonic>                                        57.8389+-3.0979           57.6096+-1.5859          might be 1.0040x faster

                                                         Baseline             FixedGetterSetter                                 
Octane:
   encrypt                                           0.23858+-0.00256          0.23665+-0.00837       
   decrypt                                           4.17343+-0.07838          4.15758+-0.04403       
   deltablue                                x2       0.20992+-0.00285    ?     0.21143+-0.00477       ?
   earley                                            0.74121+-0.01167    ?     0.74861+-0.02824       ?
   boyer                                             5.59440+-0.03367    ?     5.60079+-0.03983       ?
   navier-stokes                            x2       5.44864+-0.06252    ?     5.47425+-0.12863       ?
   raytrace                                 x2       1.22466+-0.00406    ?     1.22540+-0.02556       ?
   richards                                 x2       0.12546+-0.00252    ?     0.12637+-0.00386       ?
   splay                                    x2       0.41033+-0.00335          0.40609+-0.00590         might be 1.0105x faster
   regexp                                   x2      35.64118+-0.57842    ?    36.08056+-0.97311       ? might be 1.0123x slower
   pdfjs                                    x2      60.20433+-18.56792        54.95740+-1.35844         might be 1.0955x faster
   mandreel                                 x2      57.78782+-1.27663         57.30243+-0.71381       
   gbemu                                    x2      47.73556+-1.00344    ?    47.90618+-1.31569       ?
   closure                                           0.58904+-0.00855          0.58336+-0.00216       
   jquery                                            7.67363+-0.12483          7.66635+-0.26221       
   box2d                                    x2      14.40198+-0.06597         14.36192+-0.17106       
   zlib                                     x2     502.76868+-4.07070        501.83205+-2.83479       
   typescript                               x2     897.31500+-8.35117    ?   897.97119+-7.03010       ?

   <arithmetic>                                    108.85191+-1.57826        108.49013+-0.67678         might be 1.0033x faster
   <geometric> *                                     7.43945+-0.13346          7.40345+-0.04621         might be 1.0049x faster
   <harmonic>                                        0.74177+-0.00695    ?     0.74340+-0.00615       ? might be 1.0022x slower

                                                         Baseline             FixedGetterSetter                                 
Kraken:
   ai-astar                                          279.751+-6.296            277.375+-7.188         
   audio-beat-detection                              119.034+-4.142      ?     119.935+-5.016         ?
   audio-dft                                         203.215+-6.845      ?     205.205+-3.259         ?
   audio-fft                                          79.496+-1.145      ?      80.073+-2.352         ?
   audio-oscillator                                  255.330+-7.186            254.629+-4.790         
   imaging-darkroom                                  191.633+-7.580            185.473+-1.727           might be 1.0332x faster
   imaging-desaturate                                 65.286+-0.789      ?      66.195+-3.149         ? might be 1.0139x slower
   imaging-gaussian-blur                             120.418+-10.352           117.126+-2.745           might be 1.0281x faster
   json-parse-financial                               49.005+-3.543             47.697+-2.410           might be 1.0274x faster
   json-stringify-tinderbox                           62.558+-2.580             62.066+-4.993         
   stanford-crypto-aes                                61.061+-1.260      ?      61.105+-1.359         ?
   stanford-crypto-ccm                                57.038+-12.949     ?      61.842+-11.657        ? might be 1.0842x slower
   stanford-crypto-pbkdf2                            181.352+-3.830      ?     182.003+-4.739         ?
   stanford-crypto-sha256-iterative                   57.096+-2.240             57.000+-3.171         

   <arithmetic> *                                    127.305+-0.472            126.980+-0.823           might be 1.0026x faster
   <geometric>                                       106.010+-1.624      ?     106.145+-2.046         ? might be 1.0013x slower
   <harmonic>                                         89.818+-2.591      ?      90.235+-2.922         ? might be 1.0046x slower

                                                         Baseline             FixedGetterSetter                                 
JSRegress:
   abs-boolean                                        2.8937+-0.0854            2.8565+-0.1081          might be 1.0130x faster
   adapt-to-double-divide                            17.2599+-0.4412     ?     18.1332+-1.0994        ? might be 1.0506x slower
   aliased-arguments-getbyval                         1.2381+-0.0204     ?      1.2606+-0.1760        ? might be 1.0182x slower
   allocate-big-object                                2.6882+-0.4862     ?      2.7046+-0.4916        ?
   arity-mismatch-inlining                            0.8815+-0.0717     ?      1.0210+-0.1576        ? might be 1.1583x slower
   array-access-polymorphic-structure                 6.7226+-0.2637     ?      6.9746+-0.8922        ? might be 1.0375x slower
   array-nonarray-polymorhpic-access                 37.4880+-2.9396           36.5718+-1.0808          might be 1.0251x faster
   array-prototype-every                             81.2198+-6.5871     ?     82.2753+-1.6910        ? might be 1.0130x slower
   array-prototype-forEach                           78.4529+-2.1014     ?     79.7128+-3.4672        ? might be 1.0161x slower
   array-prototype-map                               98.1790+-1.2101     ?     98.6912+-4.2506        ?
   array-prototype-some                              82.0997+-5.3794           80.5990+-5.8183          might be 1.0186x faster
   array-splice-contiguous                           44.2072+-2.8319           43.0702+-0.8641          might be 1.0264x faster
   array-with-double-add                              4.2394+-0.0725            4.2092+-0.0918        
   array-with-double-increment                        3.3388+-0.0239            3.3378+-0.0661        
   array-with-double-mul-add                          5.0803+-0.0544     ?      5.3243+-0.2232        ? might be 1.0480x slower
   array-with-double-sum                              3.3576+-0.0352     ?      3.3657+-0.0734        ?
   array-with-int32-add-sub                           7.0633+-0.3713            7.0025+-0.3020        
   array-with-int32-or-double-sum                     3.5143+-0.2703            3.4540+-0.0352          might be 1.0175x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     35.0818+-2.9228     ?     35.6885+-1.0417        ? might be 1.0173x slower
   ArrayBuffer-DataView-alloc-long-lived             13.7243+-0.1322     ?     15.2186+-2.0128        ? might be 1.1089x slower
   ArrayBuffer-Int32Array-byteOffset                  3.5710+-0.0863     ?      3.5826+-0.0911        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     37.0104+-6.2550           34.7171+-2.1175          might be 1.0661x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.4967+-3.3199     ?     25.0063+-2.8360        ? might be 1.0208x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.9375+-2.5618           14.2695+-2.9022          might be 1.0468x faster
   ArrayBuffer-Int8Array-alloc                       11.7164+-1.7519     ?     11.9228+-2.5573        ? might be 1.0176x slower
   asmjs_bool_bug                                     7.7056+-0.4557            7.6011+-0.0588          might be 1.0137x faster
   assign-custom-setter-polymorphic                   3.2011+-0.0677     ?      3.2227+-0.0228        ?
   assign-custom-setter                               4.5717+-0.0936            4.5693+-0.1540        
   basic-set                                         10.6462+-0.2700     ?     11.0772+-0.8523        ? might be 1.0405x slower
   big-int-mul                                        4.2216+-0.1411            4.1620+-0.0855          might be 1.0143x faster
   boolean-test                                       3.1196+-0.0531            3.1152+-0.0861        
   branch-fold                                        3.8228+-0.0872            3.7693+-0.0191          might be 1.0142x faster
   by-val-generic                                     8.8019+-0.5446     ?      9.3890+-0.7767        ? might be 1.0667x slower
   call-spread-apply                                 14.5645+-0.4351     ?     15.5768+-1.8533        ? might be 1.0695x slower
   call-spread-call                                   6.4963+-0.2943     ?      7.1999+-2.4346        ? might be 1.1083x slower
   captured-assignments                               0.4816+-0.0189     ?      0.5087+-0.1250        ? might be 1.0563x slower
   cast-int-to-double                                 5.4785+-0.1109            5.3972+-0.1005          might be 1.0151x faster
   cell-argument                                      9.0778+-1.4891            8.7399+-0.2351          might be 1.0387x faster
   cfg-simplify                                       3.1187+-0.1304            3.1144+-0.0918        
   chain-getter-access                                9.8137+-0.1471     ?     10.0356+-0.1782        ? might be 1.0226x slower
   cmpeq-obj-to-obj-other                            12.0103+-2.4035           11.3003+-1.5247          might be 1.0628x faster
   constant-test                                      5.0384+-0.0168            4.9863+-0.0404          might be 1.0104x faster
   DataView-custom-properties                        41.6565+-3.6529           40.7935+-0.8148          might be 1.0212x faster
   delay-tear-off-arguments-strictmode                2.6273+-0.0385     ?      2.6608+-0.1250        ? might be 1.0128x slower
   destructuring-arguments                            5.0533+-0.1447     ?      5.5973+-1.7787        ? might be 1.1077x slower
   destructuring-swap                                 5.3728+-0.7052            5.1821+-0.2679          might be 1.0368x faster
   direct-arguments-getbyval                          0.7230+-0.0341     ?      0.7386+-0.0611        ? might be 1.0216x slower
   div-boolean-double                                 5.3677+-0.0281            5.3665+-0.0135        
   div-boolean                                        8.0267+-0.0103            8.0247+-0.1076        
   double-get-by-val-out-of-bounds                    4.3995+-0.0320     ?      4.5430+-0.2352        ? might be 1.0326x slower
   double-pollution-getbyval                          9.3643+-0.3881            9.1251+-0.0734          might be 1.0262x faster
   double-pollution-putbyoffset                       4.2138+-0.0267            4.2095+-0.0691        
   double-to-int32-typed-array-no-inline              2.3752+-0.0292     ?      2.5470+-0.4742        ? might be 1.0723x slower
   double-to-int32-typed-array                        1.9874+-0.0325     ?      2.0262+-0.0656        ? might be 1.0196x slower
   double-to-uint32-typed-array-no-inline             2.5073+-0.4058     ?      2.5135+-0.3537        ?
   double-to-uint32-typed-array                       2.1584+-0.2185            2.1527+-0.2564        
   elidable-new-object-dag                           44.2368+-4.9868     ?     44.5621+-2.0710        ?
   elidable-new-object-roflcopter                   176.4907+-5.9042     ?    176.9672+-5.1727        ?
   elidable-new-object-then-call                     40.0120+-0.5283           39.0586+-2.1165          might be 1.0244x faster
   elidable-new-object-tree                          46.1728+-1.3388           45.5885+-2.5198          might be 1.0128x faster
   empty-string-plus-int                              5.5444+-0.4392            5.3560+-0.1714          might be 1.0352x faster
   emscripten-cube2hash                              38.8311+-2.3011     ?     39.8492+-1.3239        ? might be 1.0262x slower
   external-arguments-getbyval                        1.3785+-0.1141     ?      1.4073+-0.0776        ? might be 1.0209x slower
   external-arguments-putbyval                        2.2087+-0.1596            2.1424+-0.0585          might be 1.0309x faster
   fixed-typed-array-storage-var-index                1.3281+-0.0462            1.3064+-0.0520          might be 1.0166x faster
   fixed-typed-array-storage                          1.0040+-0.0419            0.9442+-0.0796          might be 1.0633x faster
   Float32Array-matrix-mult                           4.6130+-0.2188     ?      4.6140+-0.5408        ?
   Float32Array-to-Float64Array-set                  58.3112+-5.7631     ?     59.7585+-4.5416        ? might be 1.0248x slower
   Float64Array-alloc-long-lived                     69.6515+-2.2330     ?     71.7714+-2.1959        ? might be 1.0304x slower
   Float64Array-to-Int16Array-set                    73.7551+-0.6639     ?     74.7307+-2.7856        ? might be 1.0132x slower
   fold-double-to-int                                13.9335+-0.6368     ?     14.6158+-2.5311        ? might be 1.0490x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     19.3507+-0.9890           18.5907+-0.5061          might be 1.0409x faster
   fold-get-by-id-to-multi-get-by-offset             18.5320+-1.9839           18.2572+-0.4316          might be 1.0151x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     13.7043+-1.6996           13.3250+-0.5626          might be 1.0285x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     14.5027+-3.0556     ?     14.7773+-2.4117        ? might be 1.0189x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     14.3373+-3.2618           13.8008+-2.0961          might be 1.0389x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     14.2055+-2.9209           12.9915+-2.4800          might be 1.0934x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.8234+-1.8944     ?     16.4402+-0.8428        ? might be 1.0390x slower
   fold-put-by-id-to-multi-put-by-offset             18.8305+-0.6471     ?     19.3228+-0.8414        ? might be 1.0261x slower
   fold-put-structure                                13.8383+-3.2866           13.7808+-2.9557        
   for-of-iterate-array-entries                       6.1178+-0.6423            6.0703+-0.1235        
   for-of-iterate-array-keys                          3.0122+-0.1799     ?      3.0884+-0.3179        ? might be 1.0253x slower
   for-of-iterate-array-values                        2.6752+-0.1691     ?      2.7450+-0.2841        ? might be 1.0261x slower
   fround                                            20.2822+-0.8975           20.2472+-0.8168        
   ftl-library-inlining-dataview                     87.1995+-31.2877          77.0610+-9.9516          might be 1.1316x faster
   ftl-library-inlining                             116.5566+-1.6392          113.7020+-4.4392          might be 1.0251x faster
   function-dot-apply                                 1.5562+-0.0400     ?      1.6032+-0.1097        ? might be 1.0302x slower
   function-test                                      3.4328+-0.2105     ?      3.4740+-0.1040        ? might be 1.0120x slower
   function-with-eval                               119.5452+-4.6829          118.8300+-4.0601        
   gcse-poly-get-less-obvious                        19.1980+-1.7273           19.0203+-1.1068        
   gcse-poly-get                                     22.6228+-2.7445     ^     18.5276+-0.8839        ^ definitely 1.2210x faster
   gcse                                               4.4553+-0.0900     ?      4.4555+-0.0851        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8641+-0.0508            2.8595+-0.0463        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.2897+-0.0535            6.2573+-0.1859        
   get-by-id-chain-from-try-block                    10.4196+-2.4896           10.0552+-2.7017          might be 1.0362x faster
   get-by-id-check-structure-elimination              5.2535+-0.1386     ?      5.4023+-0.1779        ? might be 1.0283x slower
   get-by-id-proto-or-self                           19.3871+-2.7157           18.8663+-2.8256          might be 1.0276x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0306+-0.0459            3.0160+-0.0472        
   get-by-id-self-or-proto                           18.1000+-0.8372     ?     19.4643+-2.4406        ? might be 1.0754x slower
   get-by-val-out-of-bounds                           4.3050+-0.0862     ?      4.3127+-0.1478        ?
   get_callee_monomorphic                             4.4832+-1.2861            3.9259+-0.1102          might be 1.1419x faster
   get_callee_polymorphic                             3.9709+-0.4737            3.6625+-0.2337          might be 1.0842x faster
   getter-no-activation                               4.6843+-0.7485            4.5744+-0.3532          might be 1.0240x faster
   getter-richards                                  143.5389+-19.9027    ?    154.3790+-13.5284       ? might be 1.0755x slower
   getter                                             5.1902+-0.0290     ?      5.3719+-0.3513        ? might be 1.0350x slower
   global-var-const-infer-fire-from-opt               0.8430+-0.0354     ?      0.8945+-0.1030        ? might be 1.0612x slower
   global-var-const-infer                             0.8704+-0.1468     ?      0.8917+-0.1046        ? might be 1.0245x slower
   HashMap-put-get-iterate-keys                      27.8970+-0.7055           27.7290+-0.2257        
   HashMap-put-get-iterate                           27.7890+-0.5654     ?     28.2391+-3.1308        ? might be 1.0162x slower
   HashMap-string-put-get-iterate                    28.9729+-1.2800           28.9610+-2.7997        
   hoist-make-rope                                   11.6932+-0.6449           11.4583+-1.4012          might be 1.0205x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.3780+-0.3989     ?      5.3822+-0.5588        ?
   hoist-poly-check-structure                         3.9290+-0.0848     ?      4.0195+-0.1411        ? might be 1.0230x slower
   imul-double-only                                   8.3239+-0.7365            8.2144+-0.9376          might be 1.0133x faster
   imul-int-only                                      9.9763+-0.2556            9.9191+-0.2641        
   imul-mixed                                         8.3472+-0.1799            8.0938+-0.5473          might be 1.0313x faster
   in-four-cases                                     20.1345+-0.9921           19.2179+-0.1791          might be 1.0477x faster
   in-one-case-false                                 10.2809+-0.2536           10.2647+-0.1068        
   in-one-case-true                                  10.3488+-0.2827           10.2790+-0.1425        
   in-two-cases                                      10.6837+-0.4653     ?     10.9374+-1.1071        ? might be 1.0237x slower
   indexed-properties-in-objects                      3.0000+-0.0276     ?      3.0933+-0.1627        ? might be 1.0311x slower
   infer-closure-const-then-mov-no-inline             3.6000+-0.0808     ?      3.6084+-0.0594        ?
   infer-closure-const-then-mov                      18.5049+-0.2805     ?     19.2965+-2.3151        ? might be 1.0428x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.2083+-2.6862     ?     13.4016+-2.0768        ? might be 1.0146x slower
   infer-closure-const-then-put-to-scope             20.3851+-1.8549     ?     21.5073+-1.9687        ? might be 1.0550x slower
   infer-closure-const-then-reenter-no-inline   
                                                     50.8507+-1.0915           50.5962+-1.2106        
   infer-closure-const-then-reenter                  19.7194+-2.3260           18.8701+-0.7307          might be 1.0450x faster
   infer-constant-global-property                     3.6687+-0.0783            3.6630+-0.0655        
   infer-constant-property                            2.7931+-0.0682     ?      2.8080+-0.0430        ?
   infer-one-time-closure-ten-vars                   13.0016+-1.7552           12.6496+-0.1742          might be 1.0278x faster
   infer-one-time-closure-two-vars                   12.3395+-1.0136           12.2578+-0.3829        
   infer-one-time-closure                            12.2845+-1.2223     ?     12.6868+-2.1214        ? might be 1.0327x slower
   infer-one-time-deep-closure                       21.2827+-0.4163     ?     21.6205+-1.3582        ? might be 1.0159x slower
   inline-arguments-access                            1.5258+-0.1065            1.4473+-0.0305          might be 1.0542x faster
   inline-arguments-aliased-access                    1.7650+-0.0360            1.7323+-0.0311          might be 1.0189x faster
   inline-arguments-local-escape                     12.0000+-0.1043     ?     12.2468+-0.3149        ? might be 1.0206x slower
   inline-get-scoped-var                              4.2722+-0.0192     ?      4.2997+-0.0627        ?
   inlined-put-by-id-transition                      10.1764+-0.9279            9.6442+-0.3707          might be 1.0552x faster
   int-or-other-abs-then-get-by-val                   5.1475+-0.2811            5.1027+-0.0703        
   int-or-other-abs-zero-then-get-by-val             18.7806+-2.4819           18.1020+-0.9043          might be 1.0375x faster
   int-or-other-add-then-get-by-val                   4.4583+-0.0361     ?      4.4891+-0.0782        ?
   int-or-other-add                                   5.5760+-0.5211            5.3870+-0.1053          might be 1.0351x faster
   int-or-other-div-then-get-by-val                   4.4277+-0.0949            4.4180+-0.0160        
   int-or-other-max-then-get-by-val                   4.6453+-0.3533            4.5412+-0.0713          might be 1.0229x faster
   int-or-other-min-then-get-by-val                   4.6141+-0.0661            4.5502+-0.0737          might be 1.0140x faster
   int-or-other-mod-then-get-by-val                   4.0718+-0.2054            3.9988+-0.0501          might be 1.0183x faster
   int-or-other-mul-then-get-by-val                   3.9753+-0.0922            3.9223+-0.0509          might be 1.0135x faster
   int-or-other-neg-then-get-by-val                   4.8748+-0.0336     ?      4.9593+-0.0993        ? might be 1.0173x slower
   int-or-other-neg-zero-then-get-by-val             18.5466+-0.7053           18.3952+-0.9849        
   int-or-other-sub-then-get-by-val                   4.5229+-0.1958            4.4917+-0.1962        
   int-or-other-sub                                   3.6119+-0.1363     ?      3.6624+-0.2504        ? might be 1.0140x slower
   int-overflow-local                                 4.4879+-0.1093     ?      4.6140+-0.4635        ? might be 1.0281x slower
   Int16Array-alloc-long-lived                       52.9727+-2.1738           51.3428+-2.6289          might be 1.0317x faster
   Int16Array-bubble-sort-with-byteLength            23.7325+-2.9324     ?     24.5247+-3.9088        ? might be 1.0334x slower
   Int16Array-bubble-sort                            24.0062+-3.0321           22.8666+-0.5125          might be 1.0498x faster
   Int16Array-load-int-mul                            1.5896+-0.0860            1.5658+-0.0345          might be 1.0152x faster
   Int16Array-to-Int32Array-set                      58.9879+-3.1299     ?     59.2454+-4.3784        ?
   Int32Array-alloc-large                            27.4422+-1.4561     ?     27.7770+-1.6233        ? might be 1.0122x slower
   Int32Array-alloc-long-lived                       57.6760+-2.2711           57.1089+-0.5020        
   Int32Array-alloc                                   3.1258+-0.1913            3.0685+-0.0360          might be 1.0187x faster
   Int32Array-Int8Array-view-alloc                    6.7201+-0.2223            6.7071+-0.2975        
   int52-spill                                        6.7455+-0.9460            6.4767+-0.2664          might be 1.0415x faster
   Int8Array-alloc-long-lived                        47.8647+-2.1461     ?     48.2247+-2.3947        ?
   Int8Array-load-with-byteLength                     3.4902+-0.0780            3.4710+-0.1047        
   Int8Array-load                                     3.4874+-0.0189            3.4756+-0.0617        
   integer-divide                                    12.3262+-0.5377     ?     12.6629+-2.1456        ? might be 1.0273x slower
   integer-modulo                                     2.2131+-0.1229     ?      2.2258+-0.1079        ?
   large-int-captured                                 7.0120+-0.4509            6.8550+-0.2290          might be 1.0229x faster
   large-int-neg                                     19.8965+-5.1520           17.1558+-0.6398          might be 1.1598x faster
   large-int                                         15.7031+-1.5635     ?     15.9187+-1.2951        ? might be 1.0137x slower
   logical-not                                        4.6405+-0.0754     ?      4.7082+-0.2083        ? might be 1.0146x slower
   lots-of-fields                                    10.3118+-0.6420     ?     10.6902+-1.9609        ? might be 1.0367x slower
   make-indexed-storage                               3.0957+-0.1030     ?      3.0961+-0.0707        ?
   make-rope-cse                                      4.3340+-0.1095     ?      4.3699+-0.2521        ?
   marsaglia-larger-ints                             40.9833+-1.6254     ?     41.0690+-1.5491        ?
   marsaglia-osr-entry                               24.4312+-2.3686           23.3243+-0.5600          might be 1.0475x faster
   max-boolean                                        2.7438+-0.0197            2.7033+-0.0425          might be 1.0150x faster
   method-on-number                                  18.8301+-2.7501           17.7614+-0.4068          might be 1.0602x faster
   min-boolean                                        2.7534+-0.0742     ?      2.7632+-0.0629        ?
   minus-boolean-double                               3.3185+-0.0320            3.2888+-0.0674        
   minus-boolean                                      2.5717+-0.0169     !      2.6382+-0.0453        ! definitely 1.0259x slower
   misc-strict-eq                                    39.0355+-0.8934     ?     42.1133+-2.9429        ? might be 1.0788x slower
   mod-boolean-double                                11.5920+-0.8231           11.4979+-0.8932        
   mod-boolean                                        8.3177+-0.7083            8.0955+-0.1790          might be 1.0275x faster
   mul-boolean-double                                 3.9065+-0.1908            3.8832+-0.0444        
   mul-boolean                                        2.9680+-0.0514     ?      2.9973+-0.0144        ?
   neg-boolean                                        3.3288+-0.1132            3.2825+-0.0446          might be 1.0141x faster
   negative-zero-divide                               0.3653+-0.0301            0.3521+-0.0147          might be 1.0376x faster
   negative-zero-modulo                               0.3491+-0.0437     ?      0.3610+-0.0687        ? might be 1.0341x slower
   negative-zero-negate                               0.3359+-0.0180            0.3355+-0.0262        
   nested-function-parsing                           23.9456+-0.6197     ?     23.9872+-0.2061        ?
   new-array-buffer-dead                              2.8333+-0.0601     ?      2.9172+-0.2502        ? might be 1.0296x slower
   new-array-buffer-push                              7.9083+-1.7529            7.7606+-1.4067          might be 1.0190x faster
   new-array-dead                                    12.4197+-0.4792     ?     12.5087+-0.7846        ?
   new-array-push                                     5.4815+-0.2134     ?      5.9891+-1.2325        ? might be 1.0926x slower
   number-test                                        3.0518+-0.0496     ?      3.1127+-0.1496        ? might be 1.0200x slower
   object-closure-call                                5.7860+-0.0681     ?      6.1028+-0.6941        ? might be 1.0547x slower
   object-test                                        3.2233+-0.1971            3.1581+-0.0747          might be 1.0207x faster
   obvious-sink-pathology-taken                     145.3377+-1.4378     ?    147.7992+-8.0165        ? might be 1.0169x slower
   obvious-sink-pathology                           143.0409+-1.3243     ?    145.5835+-4.4966        ? might be 1.0178x slower
   obviously-elidable-new-object                     36.1315+-2.2530     ?     36.1357+-0.7740        ?
   plus-boolean-arith                                 2.6334+-0.0817     ?      2.6445+-0.1403        ?
   plus-boolean-double                                3.4688+-0.3782            3.3262+-0.0474          might be 1.0429x faster
   plus-boolean                                       2.6356+-0.0192     ?      2.7340+-0.3475        ? might be 1.0373x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.4374+-0.0331            3.4305+-0.1184        
   poly-chain-access-different-prototypes             2.9180+-0.1433            2.8822+-0.1804          might be 1.0124x faster
   poly-chain-access-simpler                          3.3939+-0.0681            3.3937+-0.0895        
   poly-chain-access                                  2.8030+-0.1305     ?      2.8804+-0.1301        ? might be 1.0276x slower
   poly-stricteq                                     60.9469+-5.2369           59.2569+-2.5622          might be 1.0285x faster
   polymorphic-array-call                             1.8807+-0.3109            1.8418+-0.0838          might be 1.0211x faster
   polymorphic-get-by-id                              3.3430+-0.1179            3.3347+-0.1681        
   polymorphic-put-by-id                             32.1770+-2.1342           31.3300+-2.0673          might be 1.0270x faster
   polymorphic-structure                             15.5054+-0.8149     ?     16.0948+-1.9141        ? might be 1.0380x slower
   polyvariant-monomorphic-get-by-id                  8.8381+-0.1900            8.8245+-0.4463        
   proto-getter-access                               10.0375+-0.3297            9.7969+-0.3636          might be 1.0246x faster
   put-by-id-replace-and-transition                   9.1693+-0.5664            8.9867+-0.2512          might be 1.0203x faster
   put-by-id-slightly-polymorphic                     2.9630+-0.0658     ?      3.0031+-0.2260        ? might be 1.0135x slower
   put-by-id                                         13.4418+-0.7419           13.3488+-0.4723        
   put-by-val-direct                                  0.5386+-0.0123     ?      0.5512+-0.0216        ? might be 1.0233x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.0755+-0.4576     ?      6.9391+-1.8096        ? might be 1.1422x slower
   put-by-val-machine-int                             2.6384+-0.0938     ?      2.6775+-0.2396        ? might be 1.0148x slower
   rare-osr-exit-on-local                            15.6924+-0.2425     ?     15.9772+-0.8376        ? might be 1.0181x slower
   register-pressure-from-osr                        22.1503+-0.4718     ?     22.6674+-1.9330        ? might be 1.0233x slower
   setter                                             5.3058+-0.0818     !      5.5634+-0.1237        ! definitely 1.0485x slower
   simple-activation-demo                            26.8131+-0.4409           26.4100+-0.6781          might be 1.0153x faster
   simple-getter-access                              12.7466+-0.3688           12.7267+-0.4397        
   simple-poly-call-nested                           16.9388+-0.5946     ?     17.1368+-0.8593        ? might be 1.0117x slower
   simple-poly-call                                   1.3689+-0.1589            1.2852+-0.0695          might be 1.0651x faster
   sin-boolean                                       21.9435+-4.5578     ?     23.7475+-0.9647        ? might be 1.0822x slower
   sinkable-new-object-dag                           73.9594+-2.2122     ?     74.3334+-2.3868        ?
   sinkable-new-object-taken                         55.0687+-4.9059           54.6926+-6.3278        
   sinkable-new-object                               40.3417+-1.5998           40.1563+-1.5843        
   slow-array-profile-convergence                     2.8257+-0.0375     ?      2.8647+-0.0957        ? might be 1.0138x slower
   slow-convergence                                   3.2377+-0.0494     ?      3.4055+-0.1968        ? might be 1.0518x slower
   sparse-conditional                                 1.2253+-0.1078            1.2063+-0.1394          might be 1.0157x faster
   splice-to-remove                                  17.4370+-1.4766     ?     18.6082+-3.1062        ? might be 1.0672x slower
   string-char-code-at                               16.6125+-0.8107           16.5755+-0.8493        
   string-concat-object                               2.3048+-0.1991     ?      2.3417+-0.1512        ? might be 1.0160x slower
   string-concat-pair-object                          2.2582+-0.0725     ?      2.4241+-0.6151        ? might be 1.0734x slower
   string-concat-pair-simple                         11.3400+-1.4310     ?     12.0382+-1.6141        ? might be 1.0616x slower
   string-concat-simple                              11.6130+-0.6833     ?     11.8845+-1.1097        ? might be 1.0234x slower
   string-cons-repeat                                 7.7600+-0.8355     ?      8.8192+-1.8570        ? might be 1.1365x slower
   string-cons-tower                                  7.5788+-0.3463     ?      7.9585+-0.3297        ? might be 1.0501x slower
   string-equality                                   18.6591+-1.2140           18.3985+-0.6290          might be 1.0142x faster
   string-get-by-val-big-char                         7.0708+-0.1669     ?      7.2109+-0.5692        ? might be 1.0198x slower
   string-get-by-val-out-of-bounds-insane             3.8964+-0.2109     ?      3.9271+-0.2465        ?
   string-get-by-val-out-of-bounds                    5.4493+-0.2381            5.4148+-0.2171        
   string-get-by-val                                  3.3828+-0.2142     ?      3.4078+-0.1681        ?
   string-hash                                        2.1396+-0.0226     ?      2.1516+-0.0556        ?
   string-long-ident-equality                        15.9028+-0.8880           15.5890+-0.8600          might be 1.0201x faster
   string-repeat-arith                               33.0974+-3.0105     ?     35.1883+-1.7871        ? might be 1.0632x slower
   string-sub                                        66.6017+-3.3137     !     73.0602+-3.1375        ! definitely 1.0970x slower
   string-test                                        2.9791+-0.0511     ?      3.0018+-0.0793        ?
   string-var-equality                               32.7193+-1.6927           31.8469+-0.5755          might be 1.0274x faster
   structure-hoist-over-transitions                   2.4780+-0.0303     ?      2.6432+-0.2372        ? might be 1.0667x slower
   substring-concat-weird                            40.5710+-2.5567     ?     41.7296+-2.9527        ? might be 1.0286x slower
   substring-concat                                  41.3062+-0.4729     ?     41.4225+-0.9574        ?
   substring                                         47.4980+-1.2579     ?     49.7775+-1.9400        ? might be 1.0480x slower
   switch-char-constant                               2.7664+-0.0734     ?      2.7907+-0.0595        ?
   switch-char                                        7.2636+-1.3894            6.9661+-1.2607          might be 1.0427x faster
   switch-constant                                   10.4354+-0.6998           10.0878+-0.6671          might be 1.0345x faster
   switch-string-basic-big-var                       15.6328+-1.9551           15.1189+-0.6547          might be 1.0340x faster
   switch-string-basic-big                           15.1714+-1.2864           15.1672+-2.3967        
   switch-string-basic-var                           14.9333+-0.3045     ?     15.4142+-2.3586        ? might be 1.0322x slower
   switch-string-basic                               13.7217+-0.5259           13.6362+-0.2939        
   switch-string-big-length-tower-var                21.0521+-1.6542     ?     21.3682+-1.9062        ? might be 1.0150x slower
   switch-string-length-tower-var                    16.2350+-2.0398     ?     16.2440+-2.1641        ?
   switch-string-length-tower                        15.2575+-2.0552     ^     12.8312+-0.3460        ^ definitely 1.1891x faster
   switch-string-short                               13.6147+-2.0131           13.0396+-0.5093          might be 1.0441x faster
   switch                                            13.6429+-2.8427           11.8064+-0.3713          might be 1.1556x faster
   tear-off-arguments-simple                          2.4921+-0.1985            2.4719+-0.1861        
   tear-off-arguments                                 3.7617+-0.0321            3.7432+-0.0538        
   temporal-structure                                12.8622+-1.2585           12.4824+-0.4482          might be 1.0304x faster
   to-int32-boolean                                  14.2429+-0.6369     ?     14.5908+-1.6261        ? might be 1.0244x slower
   undefined-property-access                        418.9758+-8.2222          418.9640+-10.5094       
   undefined-test                                     3.1163+-0.0665     ?      3.1843+-0.2249        ? might be 1.0218x slower
   unprofiled-licm                                   23.3995+-0.4968           23.3087+-0.4156        
   weird-inlining-const-prop                          2.2840+-0.3966            2.1098+-0.2027          might be 1.0826x faster

   <arithmetic>                                      18.6013+-0.1266     ?     18.6366+-0.0854        ? might be 1.0019x slower
   <geometric> *                                      8.4562+-0.0129     ?      8.4685+-0.0563        ? might be 1.0015x slower
   <harmonic>                                         4.2255+-0.0332     ?      4.2472+-0.0187        ? might be 1.0051x slower

                                                         Baseline             FixedGetterSetter                                 
AsmBench:
   bigfib.cpp                                       529.2435+-15.3735    ?    534.5116+-27.0490       ?
   cray.c                                           494.3340+-6.1558          492.1143+-3.1522        
   dry.c                                            510.2488+-27.7971    ?    517.4300+-19.0930       ? might be 1.0141x slower
   FloatMM.c                                        818.1018+-13.2325         813.6372+-3.9387        
   gcc-loops.cpp                                   4395.1752+-92.4845        4368.1667+-11.2219       
   n-body.c                                        1037.2377+-9.9462         1036.5140+-11.7994       
   Quicksort.c                                      461.1207+-4.1784     ?    466.5823+-3.7399        ? might be 1.0118x slower
   stepanov_container.cpp                          3958.6710+-57.1595        3917.7023+-74.4776         might be 1.0105x faster
   Towers.c                                         283.8196+-7.1698     ?    284.3759+-5.8903        ?

   <arithmetic>                                    1387.5502+-7.6449         1381.2260+-11.2164         might be 1.0046x faster
   <geometric> *                                    860.1543+-5.7705     ?    861.1596+-7.0641        ? might be 1.0012x slower
   <harmonic>                                       632.3162+-7.4324     ?    634.8839+-4.4267        ? might be 1.0041x slower

                                                         Baseline             FixedGetterSetter                                 
CompressionBench:
   huffman                                          526.3486+-8.8750     ^    499.3091+-18.0560       ^ definitely 1.0542x faster
   arithmetic-simple                                453.1933+-2.7737     ?    455.3071+-5.3831        ?
   arithmetic-precise                               335.8572+-3.9895          334.1344+-4.9260        
   arithmetic-complex-precise                       336.1111+-7.4494     ?    339.0927+-14.2661       ?
   arithmetic-precise-order-0                       495.9648+-20.9798         492.3342+-22.6160       
   arithmetic-precise-order-1                       381.3355+-6.7105          381.0755+-9.3926        
   arithmetic-precise-order-2                       424.8180+-10.4692    ?    425.7477+-4.3948        ?
   arithmetic-simple-order-1                        497.2772+-3.7043          496.8344+-2.8407        
   arithmetic-simple-order-2                        554.9897+-6.6450     ?    555.7110+-5.9735        ?
   lz-string                                        380.5592+-11.8572    ?    386.6624+-7.3029        ? might be 1.0160x slower

   <arithmetic>                                     438.6455+-6.0109          436.6209+-2.2986          might be 1.0046x faster
   <geometric> *                                    432.1422+-5.8123          430.6565+-2.0626          might be 1.0034x faster
   <harmonic>                                       425.6345+-5.5839          424.6622+-1.9460          might be 1.0023x faster

                                                         Baseline             FixedGetterSetter                                 
All benchmarks:
   <arithmetic>                                     106.2507+-0.2223          106.1077+-0.4196          might be 1.0013x faster
   <geometric>                                       14.0480+-0.0489     ?     14.0537+-0.0582        ? might be 1.0004x slower
   <harmonic>                                         3.4910+-0.0140     ?      3.5038+-0.0153        ? might be 1.0037x slower

                                                         Baseline             FixedGetterSetter                                 
Geomean of preferred means:
   <scaled-result>                                   69.3545+-0.6471           69.2152+-0.1789          might be 1.0020x faster
Comment 3 Filip Pizlo 2014-12-05 10:47:42 PST
Comment on attachment 242620 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=242620&action=review

> Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:85
> +
> +        if (isValidOffset(result.m_offset)) {
> +            switch (checkAccessor) {
> +            case CheckGetter: {
> +                JSValue gs = currentObject->getDirect(result.m_offset);
> +                if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->getter())
> +                    return takesSlowPath();
> +                break;
> +            }
> +            case CheckSetter: {
> +                JSValue gs = currentObject->getDirect(result.m_offset);
> +                if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->setter())
> +                    return takesSlowPath();
> +                break;
> +            }
> +            default:
> +                break;
> +            }
> +        }

This feels like it has to be wrong.

1) Why is this check only needed for the prototype case?

2) Why is this check needed at all?

3) Why is this in ComplexGetStatus?  You could do away with the enum and the switch statement if you put it at callsites to ComplexGetStatus.
Comment 4 Michael Saboff 2014-12-05 11:21:24 PST
(In reply to comment #3)
> Comment on attachment 242620 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=242620&action=review
> 
> > Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:85
> > +
> > +        if (isValidOffset(result.m_offset)) {
> > +            switch (checkAccessor) {
> > +            case CheckGetter: {
> > +                JSValue gs = currentObject->getDirect(result.m_offset);
> > +                if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->getter())
> > +                    return takesSlowPath();
> > +                break;
> > +            }
> > +            case CheckSetter: {
> > +                JSValue gs = currentObject->getDirect(result.m_offset);
> > +                if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->setter())
> > +                    return takesSlowPath();
> > +                break;
> > +            }
> > +            default:
> > +                break;
> > +            }
> > +        }
> 
> This feels like it has to be wrong.
> 
> 1) Why is this check only needed for the prototype case?
> 
> 2) Why is this check needed at all?
> 
> 3) Why is this in ComplexGetStatus?  You could do away with the enum and the
> switch statement if you put it at callsites to ComplexGetStatus.

Discussed this with Phil.  Going to change the implementation of GetterSetter to always set both the getter and setter functions to valid values.  As part of this, introduce a new "UndefinedFunction" that returns undefined and use that as the function pointer for an unset getter / setter.
Comment 5 Geoffrey Garen 2014-12-05 11:42:33 PST
> Discussed this with Phil.  Going to change the implementation of
> GetterSetter to always set both the getter and setter functions to valid
> values.  As part of this, introduce a new "UndefinedFunction" that returns
> undefined and use that as the function pointer for an unset getter / setter.

I don't think it's correct to return undefined for a missing setter in strict mode; instead, you need to throw a read-only exception.
Comment 6 Michael Saboff 2014-12-08 15:17:28 PST
Created attachment 242853 [details]
Patch using undefined function class for missing getters and setters

Running performance tests the which of which I'll post when done.
Comment 7 Michael Saboff 2014-12-08 15:56:07 PST
Performance results for latest "UndefinedFunction" patch.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-pro (MacPro5,1).

VMs tested:
"Baseline" at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/jsc (r176969)
"UndefinedFunc" at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r176969)

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                         Baseline               UndefinedFunc                                   
SunSpider:
   3d-cube                                            6.5482+-0.0485     ?      6.6499+-0.1155        ? might be 1.0155x slower
   3d-morph                                           8.2217+-0.3297     ?      8.2994+-0.2325        ?
   3d-raytrace                                        8.3762+-0.6308     ?      8.4463+-0.3626        ?
   access-binary-trees                                2.6332+-0.0600            2.5377+-0.1789          might be 1.0376x faster
   access-fannkuch                                    8.0935+-0.1728            8.0453+-0.1338        
   access-nbody                                       3.9335+-0.1570     ?      4.0175+-0.1086        ? might be 1.0213x slower
   access-nsieve                                      5.1087+-0.1670            5.0298+-0.1483          might be 1.0157x faster
   bitops-3bit-bits-in-byte                           1.8535+-0.0723            1.8168+-0.1046          might be 1.0202x faster
   bitops-bits-in-byte                                5.5181+-0.0781            5.4878+-0.0607        
   bitops-bitwise-and                                 2.8538+-0.0727            2.8078+-0.1258          might be 1.0164x faster
   bitops-nsieve-bits                                 5.0175+-0.1289     ?      5.1600+-0.1904        ? might be 1.0284x slower
   controlflow-recursive                              2.8411+-0.1627            2.8083+-0.1345          might be 1.0117x faster
   crypto-aes                                         5.7318+-0.3966            5.4765+-0.2999          might be 1.0466x faster
   crypto-md5                                         3.4705+-0.0837            3.3588+-0.2998          might be 1.0333x faster
   crypto-sha1                                        3.1516+-0.0830     ?      3.2389+-0.1542        ? might be 1.0277x slower
   date-format-tofte                                 11.6503+-0.2827           11.5569+-0.0755        
   date-format-xparb                                  7.0659+-0.1445            6.8660+-0.3680          might be 1.0291x faster
   math-cordic                                        4.3198+-0.0173     ^      4.2057+-0.0454        ^ definitely 1.0271x faster
   math-partial-sums                                  8.9890+-0.0531     ?      9.0227+-0.2259        ?
   math-spectral-norm                                 2.8215+-0.0498            2.7356+-0.1258          might be 1.0314x faster
   regexp-dna                                         9.8810+-0.5334            9.7575+-0.2349          might be 1.0127x faster
   string-base64                                      5.5735+-0.2143            5.4975+-0.0169          might be 1.0138x faster
   string-fasta                                       8.6810+-0.1587            8.6480+-0.0699        
   string-tagcloud                                   13.9245+-0.6746           13.2781+-0.3857          might be 1.0487x faster
   string-unpack-code                                27.0518+-0.8694           26.9590+-0.6536        
   string-validate-input                              6.2625+-0.1305            6.2498+-0.1905        

   <arithmetic> *                                     6.9067+-0.0671            6.8445+-0.0341          might be 1.0091x faster
   <geometric>                                        5.7277+-0.0344            5.6717+-0.0416          might be 1.0099x faster
   <harmonic>                                         4.8689+-0.0220            4.8104+-0.0668          might be 1.0122x faster

                                                         Baseline               UndefinedFunc                                   
LongSpider:
   3d-cube                                         1160.9305+-3.9606     ^   1143.7056+-7.3160        ^ definitely 1.0151x faster
   3d-morph                                        1870.9886+-11.5479        1867.4567+-3.0918        
   3d-raytrace                                     1058.0804+-6.0319         1048.4731+-6.3476        
   access-binary-trees                             1350.3644+-10.2302        1342.5153+-6.5554        
   access-fannkuch                                  450.7495+-22.3973         438.6076+-21.2812         might be 1.0277x faster
   access-nbody                                    1001.5750+-2.8340         1000.3808+-2.4062        
   access-nsieve                                   1327.9193+-13.7958        1327.7805+-12.3116       
   bitops-3bit-bits-in-byte                          49.8154+-0.7404     ?     50.4369+-1.4263        ? might be 1.0125x slower
   bitops-bits-in-byte                              318.6658+-15.0729    ?    324.2200+-15.6388       ? might be 1.0174x slower
   bitops-nsieve-bits                               959.0280+-5.9797     ?    961.0540+-6.4928        ?
   controlflow-recursive                            717.6786+-0.6599     ?    717.8885+-2.1278        ?
   crypto-aes                                       913.2332+-8.0365          912.7480+-6.1297        
   crypto-md5                                       805.3179+-4.5049     ?    806.3229+-6.6626        ?
   crypto-sha1                                      950.8820+-22.0724    ?    955.2480+-29.0074       ?
   date-format-tofte                               1007.0717+-4.3555     ?   1033.0526+-81.6697       ? might be 1.0258x slower
   date-format-xparb                                989.1950+-41.4797         941.1365+-21.0949         might be 1.0511x faster
   math-cordic                                      677.5341+-7.0522     ?    678.7780+-9.9893        ?
   math-partial-sums                               1034.4470+-11.5892    ?   1038.6185+-2.4713        ?
   math-spectral-norm                              1082.0245+-17.4862        1075.6721+-3.5118        
   string-base64                                    469.0518+-3.8432     ?    470.1005+-7.7696        ?
   string-fasta                                     581.7630+-4.2540     ?    583.3220+-1.3866        ?
   string-tagcloud                                  312.1032+-5.0127     ^    300.8842+-3.2515        ^ definitely 1.0373x faster

   <arithmetic>                                     867.6554+-3.0488          864.4728+-4.1917          might be 1.0037x faster
   <geometric> *                                    727.5322+-3.8125          724.8956+-4.0791          might be 1.0036x faster
   <harmonic>                                       453.4245+-2.7672     ?    454.1809+-5.3375        ? might be 1.0017x slower

                                                         Baseline               UndefinedFunc                                   
V8Spider:
   crypto                                            73.3396+-2.0170           72.9153+-1.8281        
   deltablue                                        112.0315+-1.0122          110.8862+-0.9209          might be 1.0103x faster
   earley-boyer                                      62.2952+-1.3583     ?     62.7997+-0.6564        ?
   raytrace                                          39.3480+-0.9496     ?     39.4399+-1.2983        ?
   regexp                                            95.9234+-2.2420     ?     96.0132+-1.3919        ?
   richards                                         112.3655+-2.9338     ?    112.6780+-5.7984        ?
   splay                                             42.4055+-0.8011     ?     44.2395+-2.0996        ? might be 1.0433x slower

   <arithmetic>                                      76.8155+-0.5520     ?     76.9960+-0.6818        ? might be 1.0023x slower
   <geometric> *                                     71.1172+-0.3394     ?     71.5238+-0.6102        ? might be 1.0057x slower
   <harmonic>                                        65.4514+-0.3149     ?     66.0772+-0.6561        ? might be 1.0096x slower

                                                         Baseline               UndefinedFunc                                   
Octane:
   encrypt                                           0.31733+-0.00646    ?     0.32222+-0.00677       ? might be 1.0154x slower
   decrypt                                           5.69149+-0.05691          5.67350+-0.01802       
   deltablue                                x2       0.26569+-0.00295          0.26552+-0.00272       
   earley                                            1.00014+-0.00633          0.99860+-0.04116       
   boyer                                             8.75190+-0.20295          8.65566+-0.17464         might be 1.0111x faster
   navier-stokes                            x2       6.41576+-0.01127    ?     6.42037+-0.01959       ?
   raytrace                                 x2       1.65401+-0.02017          1.64824+-0.02324       
   richards                                 x2       0.16607+-0.00476    ?     0.16734+-0.00670       ?
   splay                                    x2       0.52702+-0.00396    ?     0.53644+-0.01093       ? might be 1.0179x slower
   regexp                                   x2      28.17254+-0.50376         27.93853+-0.49983       
   pdfjs                                    x2      70.15228+-0.81487    ?    70.31365+-0.35426       ?
   mandreel                                 x2      73.96336+-1.60287         73.37306+-0.77816       
   gbemu                                    x2      62.38221+-1.36993    ?    62.58065+-1.29339       ?
   closure                                           0.74499+-0.00272    ?     0.74967+-0.00551       ?
   jquery                                            9.41841+-0.09424    ?     9.48484+-0.04079       ?
   box2d                                    x2      18.84716+-0.10900    ^    18.64826+-0.06257       ^ definitely 1.0107x faster
   zlib                                     x2     674.69210+-2.14344        650.08142+-75.18092        might be 1.0379x faster
   typescript                               x2    1084.48328+-11.76009      1078.47522+-13.22654      

   <arithmetic>                                    135.64557+-0.90192        133.55940+-4.81358         might be 1.0156x faster
   <geometric> *                                     9.28131+-0.04821          9.25779+-0.09352         might be 1.0025x faster
   <harmonic>                                        0.96625+-0.01099    ?     0.97246+-0.01681       ? might be 1.0064x slower

                                                         Baseline               UndefinedFunc                                   
Kraken:
   ai-astar                                          463.028+-14.896     ?     467.213+-9.941         ?
   audio-beat-detection                              161.136+-2.860            160.390+-0.767         
   audio-dft                                         209.515+-0.754      ?     211.380+-2.425         ?
   audio-fft                                         107.886+-1.099            107.786+-1.009         
   audio-oscillator                                  312.908+-6.432            312.524+-2.545         
   imaging-darkroom                                  243.307+-1.691            243.065+-2.794         
   imaging-desaturate                                 95.104+-0.392      ?      95.629+-0.296         ?
   imaging-gaussian-blur                             156.635+-0.908      ?     157.893+-1.433         ?
   json-parse-financial                               66.985+-2.417      ?      67.214+-1.440         ?
   json-stringify-tinderbox                           82.668+-1.162             82.025+-0.720         
   stanford-crypto-aes                                82.520+-1.178      ?      83.864+-2.200         ? might be 1.0163x slower
   stanford-crypto-ccm                                74.711+-12.585            74.447+-14.686        
   stanford-crypto-pbkdf2                            227.029+-2.637      !     234.206+-3.450         ! definitely 1.0316x slower
   stanford-crypto-sha256-iterative                   71.463+-2.377      ?      71.560+-0.315         ?

   <arithmetic> *                                    168.207+-0.287      !     169.228+-0.417         ! definitely 1.0061x slower
   <geometric>                                       139.475+-1.244      ?     140.107+-1.743         ? might be 1.0045x slower
   <harmonic>                                        118.987+-2.107      ?     119.350+-2.744         ? might be 1.0030x slower

                                                         Baseline               UndefinedFunc                                   
JSRegress:
   abs-boolean                                        3.6437+-0.0507            3.6231+-0.0917        
   adapt-to-double-divide                            18.0165+-0.4431           18.0063+-0.1670        
   aliased-arguments-getbyval                         1.5870+-0.1077            1.4600+-0.0731          might be 1.0870x faster
   allocate-big-object                                3.0845+-0.3677            3.0483+-0.3014          might be 1.0119x faster
   arity-mismatch-inlining                            1.1570+-0.1525            1.1318+-0.0520          might be 1.0223x faster
   array-access-polymorphic-structure                 8.9622+-0.3222     ?      8.9795+-0.1160        ?
   array-nonarray-polymorhpic-access                 50.9824+-1.0453     ?     51.0234+-0.5355        ?
   array-prototype-every                            105.9952+-5.6501          104.7118+-2.5142          might be 1.0123x faster
   array-prototype-forEach                          105.0527+-6.0033          102.5912+-0.9407          might be 1.0240x faster
   array-prototype-map                              124.8387+-0.7834     ?    125.5502+-1.4239        ?
   array-prototype-some                             108.1491+-3.2707          102.9586+-4.3562          might be 1.0504x faster
   array-splice-contiguous                           57.6777+-0.2437           57.6548+-0.5920        
   array-with-double-add                              5.5385+-0.1238            5.4884+-0.0870        
   array-with-double-increment                        4.1060+-0.1657            4.0327+-0.1533          might be 1.0182x faster
   array-with-double-mul-add                          7.1629+-0.1153     ?      7.1661+-0.0696        ?
   array-with-double-sum                              4.2371+-0.0927     ?      4.3040+-0.1506        ? might be 1.0158x slower
   array-with-int32-add-sub                           9.5091+-0.1613     ?      9.6277+-0.1221        ? might be 1.0125x slower
   array-with-int32-or-double-sum                     4.3884+-0.1210            4.2980+-0.1221          might be 1.0210x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     46.3295+-0.8899     ?     47.5630+-0.7547        ? might be 1.0266x slower
   ArrayBuffer-DataView-alloc-long-lived             17.7255+-0.4181     ?     18.4174+-0.3047        ? might be 1.0390x slower
   ArrayBuffer-Int32Array-byteOffset                  4.5755+-0.0412     ?      4.6166+-0.1154        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     48.6617+-2.5542     ?     49.3763+-1.9072        ? might be 1.0147x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     30.7548+-2.8958           29.5364+-0.3238          might be 1.0413x faster
   ArrayBuffer-Int8Array-alloc-long-lived            17.1937+-0.3817           17.0978+-0.6630        
   ArrayBuffer-Int8Array-alloc                       14.9796+-1.4415     ?     15.6964+-1.3997        ? might be 1.0479x slower
   asmjs_bool_bug                                     8.8042+-0.2064     ?      8.9155+-0.1610        ? might be 1.0126x slower
   assign-custom-setter-polymorphic                   4.0901+-0.0973     ?      4.2201+-0.2971        ? might be 1.0318x slower
   assign-custom-setter                               5.6458+-0.0745     ?      5.6771+-0.2867        ?
   basic-set                                         12.9968+-1.0268     ?     13.2637+-0.7372        ? might be 1.0205x slower
   big-int-mul                                        5.8283+-0.1598            5.7632+-0.2469          might be 1.0113x faster
   boolean-test                                       4.1306+-0.1333     ?      4.2331+-0.2041        ? might be 1.0248x slower
   branch-fold                                        4.5650+-0.1636            4.5262+-0.1181        
   by-val-generic                                    10.7326+-0.3503     ?     10.9388+-0.2181        ? might be 1.0192x slower
   call-spread-apply                                 17.3369+-0.2938           17.2892+-0.3492        
   call-spread-call                                   7.7305+-0.2305     ?      7.7571+-0.3026        ?
   captured-assignments                               0.5975+-0.0943            0.5553+-0.0087          might be 1.0761x faster
   cast-int-to-double                                 8.1232+-0.1726     ?      8.1888+-0.2947        ?
   cell-argument                                      9.9894+-0.1268     ^      9.7045+-0.0653        ^ definitely 1.0294x faster
   cfg-simplify                                       3.6564+-0.1233            3.6299+-0.1658        
   chain-getter-access                               12.7806+-0.1854     ?     12.8400+-0.6138        ?
   cmpeq-obj-to-obj-other                            12.3860+-0.4143           12.1389+-0.3972          might be 1.0204x faster
   constant-test                                      7.4893+-0.0552            7.4345+-0.1131        
   DataView-custom-properties                        51.9518+-0.5999     ?     51.9963+-0.3248        ?
   delay-tear-off-arguments-strictmode                3.4349+-0.2065     ?      3.4808+-0.1269        ? might be 1.0134x slower
   destructuring-arguments                            7.6557+-0.1688            7.5876+-0.1234        
   destructuring-swap                                 7.6249+-0.3006     ?      7.7142+-0.2178        ? might be 1.0117x slower
   direct-arguments-getbyval                          0.8962+-0.1053     ?      0.8980+-0.0755        ?
   div-boolean-double                                 5.5046+-0.1032            5.4772+-0.1612        
   div-boolean                                        9.8295+-0.1630            9.7253+-0.1938          might be 1.0107x faster
   double-get-by-val-out-of-bounds                    5.4697+-0.4374     ?      5.6324+-0.0515        ? might be 1.0297x slower
   double-pollution-getbyval                          9.7147+-0.0597            9.7032+-0.2138        
   double-pollution-putbyoffset                       5.3742+-0.2555     ?      5.4494+-0.1004        ? might be 1.0140x slower
   double-to-int32-typed-array-no-inline              2.8268+-0.1184            2.8004+-0.1588        
   double-to-int32-typed-array                        2.4543+-0.2451            2.3845+-0.1292          might be 1.0293x faster
   double-to-uint32-typed-array-no-inline             2.8070+-0.1179     ?      2.8265+-0.1263        ?
   double-to-uint32-typed-array                       2.6685+-0.1791            2.6334+-0.2157          might be 1.0133x faster
   elidable-new-object-dag                           54.9510+-0.9331     ?     55.4106+-0.7029        ?
   elidable-new-object-roflcopter                   202.7885+-5.2648          202.4553+-1.5934        
   elidable-new-object-then-call                     51.2642+-4.1417           49.5212+-1.3355          might be 1.0352x faster
   elidable-new-object-tree                          61.9744+-2.6757     ?     62.9801+-2.5277        ? might be 1.0162x slower
   empty-string-plus-int                              7.2338+-0.4668     ?      7.2801+-0.1876        ?
   emscripten-cube2hash                              46.9266+-1.1506     ?     47.0291+-0.6978        ?
   external-arguments-getbyval                        1.7991+-0.2080            1.7446+-0.1047          might be 1.0312x faster
   external-arguments-putbyval                        2.7684+-0.1340     ?      2.8409+-0.1953        ? might be 1.0262x slower
   fixed-typed-array-storage-var-index                1.5357+-0.1569            1.5317+-0.0460        
   fixed-typed-array-storage                          1.1623+-0.0777            1.0997+-0.1326          might be 1.0569x faster
   Float32Array-matrix-mult                           6.0482+-0.7261     ?      6.1041+-0.6808        ?
   Float32Array-to-Float64Array-set                  76.1387+-3.2473     ?     77.7983+-2.7770        ? might be 1.0218x slower
   Float64Array-alloc-long-lived                     86.9961+-0.2631           86.9762+-0.6653        
   Float64Array-to-Int16Array-set                    94.8237+-0.9175           94.4523+-1.3287        
   fold-double-to-int                                17.8403+-0.5564     ?     17.9605+-0.3673        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     23.5079+-2.3313     ?     24.5173+-2.7875        ? might be 1.0429x slower
   fold-get-by-id-to-multi-get-by-offset             23.0380+-2.0944           22.0567+-1.5578          might be 1.0445x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     15.6418+-0.3523           15.4025+-0.0690          might be 1.0155x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     15.9565+-0.4547           15.7141+-0.4555          might be 1.0154x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.0903+-1.1230           15.9150+-0.8197          might be 1.0110x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     14.5000+-0.2002           14.3375+-0.3039          might be 1.0113x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     19.8048+-0.5684           19.5900+-0.5086          might be 1.0110x faster
   fold-put-by-id-to-multi-put-by-offset             24.1200+-2.4634           22.9205+-1.9819          might be 1.0523x faster
   fold-put-structure                                14.8803+-0.3391           14.6749+-0.3682          might be 1.0140x faster
   for-of-iterate-array-entries                       7.6318+-0.0979            7.4800+-0.4865          might be 1.0203x faster
   for-of-iterate-array-keys                          3.7241+-0.1042            3.6779+-0.2479          might be 1.0126x faster
   for-of-iterate-array-values                        3.1537+-0.2046     ?      3.1744+-0.2075        ?
   fround                                            21.6023+-0.2614     !     22.6892+-0.2132        ! definitely 1.0503x slower
   ftl-library-inlining-dataview                     91.7423+-0.9984           91.1877+-0.4360        
   ftl-library-inlining                              90.4935+-9.1206           90.2115+-8.2563        
   function-dot-apply                                 2.2552+-0.2018            2.2180+-0.1183          might be 1.0168x faster
   function-test                                      4.6447+-0.0949            4.5035+-0.1239          might be 1.0313x faster
   function-with-eval                               151.2146+-2.7415          149.5901+-1.9846          might be 1.0109x faster
   gcse-poly-get-less-obvious                        24.7898+-0.7220     ?     24.8268+-0.3856        ?
   gcse-poly-get                                     24.5231+-0.2389     ?     24.7525+-0.6640        ?
   gcse                                               6.4987+-0.2567     ?      6.5347+-0.0687        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.2513+-0.1118            3.2174+-0.1644          might be 1.0105x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      8.3284+-0.1198            8.2220+-0.2427          might be 1.0129x faster
   get-by-id-chain-from-try-block                    15.5178+-0.3511     ?     15.6767+-0.8063        ? might be 1.0102x slower
   get-by-id-check-structure-elimination              7.3882+-0.1464     ?      7.4680+-0.1351        ? might be 1.0108x slower
   get-by-id-proto-or-self                           22.7470+-2.1111           22.5458+-1.1472        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.8047+-0.0466     !      4.0173+-0.0503        ! definitely 1.0559x slower
   get-by-id-self-or-proto                           23.4608+-2.2767           22.3175+-1.0798          might be 1.0512x faster
   get-by-val-out-of-bounds                           5.6313+-0.1160            5.4941+-0.1602          might be 1.0250x faster
   get_callee_monomorphic                             4.9140+-0.2592     ?      4.9161+-0.5158        ?
   get_callee_polymorphic                             4.2510+-0.1780     ?      4.3139+-0.2465        ? might be 1.0148x slower
   getter-no-activation                               5.6465+-0.0839     ?      5.7087+-0.0832        ? might be 1.0110x slower
   getter-richards                                  167.8748+-13.0367    ?    169.0120+-14.0322       ?
   getter                                             6.5461+-0.2413            6.4401+-0.0783          might be 1.0165x faster
   global-var-const-infer-fire-from-opt               1.1868+-0.1244     ?      1.3201+-0.2475        ? might be 1.1123x slower
   global-var-const-infer                             1.2471+-0.2328            1.0591+-0.1560          might be 1.1775x faster
   HashMap-put-get-iterate-keys                      35.1672+-1.0748           34.9451+-1.0566        
   HashMap-put-get-iterate                           34.7428+-1.1891           34.0622+-0.5571          might be 1.0200x faster
   HashMap-string-put-get-iterate                    33.7900+-1.1296           33.4713+-0.8637        
   hoist-make-rope                                   13.8890+-1.1992           13.7089+-1.6871          might be 1.0131x faster
   hoist-poly-check-structure-effectful-loop   
                                                      6.4940+-0.0921     ?      6.5225+-0.1213        ?
   hoist-poly-check-structure                         4.7583+-0.0938     ?      4.7900+-0.0588        ?
   imul-double-only                                   9.7755+-0.9072     ?     10.0713+-0.1641        ? might be 1.0303x slower
   imul-int-only                                     12.5493+-0.6557     ?     12.6414+-1.3563        ?
   imul-mixed                                         9.7451+-0.4090     ?      9.9910+-1.0558        ? might be 1.0252x slower
   in-four-cases                                     23.9414+-0.7074           23.9172+-0.4255        
   in-one-case-false                                 12.4760+-0.1413           12.4490+-0.1819        
   in-one-case-true                                  12.5020+-0.2000           12.4958+-0.0526        
   in-two-cases                                      13.0479+-0.1946           13.0156+-0.3014        
   indexed-properties-in-objects                      3.8092+-0.1206            3.7700+-0.0956          might be 1.0104x faster
   infer-closure-const-then-mov-no-inline             4.3020+-0.1267            4.2089+-0.1237          might be 1.0221x faster
   infer-closure-const-then-mov                      24.6890+-0.3762     ?     24.7131+-0.2577        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.9119+-0.1608     ?     15.0322+-0.1135        ?
   infer-closure-const-then-put-to-scope             29.1497+-2.2341     ?     29.8658+-4.7215        ? might be 1.0246x slower
   infer-closure-const-then-reenter-no-inline   
                                                     64.6081+-0.8551           64.1285+-0.5843        
   infer-closure-const-then-reenter                  28.0976+-0.3488           27.9600+-0.1781        
   infer-constant-global-property                     4.7172+-0.1453            4.6995+-0.1240        
   infer-constant-property                            3.2770+-0.0643            3.2087+-0.0288          might be 1.0213x faster
   infer-one-time-closure-ten-vars                   14.9130+-0.3756     ?     14.9686+-0.4079        ?
   infer-one-time-closure-two-vars                   14.0778+-0.3780     ?     14.2133+-0.2722        ?
   infer-one-time-closure                            13.7919+-0.4161     ?     14.1583+-0.3005        ? might be 1.0266x slower
   infer-one-time-deep-closure                       24.5585+-0.8323     ?     24.8576+-0.6656        ? might be 1.0122x slower
   inline-arguments-access                            2.0997+-0.1299            2.0447+-0.0621          might be 1.0269x faster
   inline-arguments-aliased-access                    2.4142+-0.1268     ?      2.4741+-0.1293        ? might be 1.0248x slower
   inline-arguments-local-escape                     15.8397+-0.3003     ?     15.9580+-0.4996        ?
   inline-get-scoped-var                              5.6020+-0.0713     ?      5.7004+-0.0858        ? might be 1.0176x slower
   inlined-put-by-id-transition                      13.2547+-0.4733           13.1742+-0.2781        
   int-or-other-abs-then-get-by-val                   6.9318+-0.1117            6.8304+-0.1433          might be 1.0148x faster
   int-or-other-abs-zero-then-get-by-val             26.4957+-0.4796     ?     26.8609+-0.6054        ? might be 1.0138x slower
   int-or-other-add-then-get-by-val                   5.8719+-0.1290     ?      5.9342+-0.1658        ? might be 1.0106x slower
   int-or-other-add                                   7.7820+-0.0290     ?      7.8498+-0.0901        ?
   int-or-other-div-then-get-by-val                   5.0825+-0.1211     ?      5.1218+-0.1161        ?
   int-or-other-max-then-get-by-val                   6.4495+-0.3705     ?      6.5160+-0.2070        ? might be 1.0103x slower
   int-or-other-min-then-get-by-val                   5.2519+-0.0839            5.1844+-0.0398          might be 1.0130x faster
   int-or-other-mod-then-get-by-val                   5.1440+-0.0481            5.1085+-0.2499        
   int-or-other-mul-then-get-by-val                   4.9916+-0.1632     ?      5.0115+-0.1397        ?
   int-or-other-neg-then-get-by-val                   6.1171+-0.1334     ?      6.1392+-0.0597        ?
   int-or-other-neg-zero-then-get-by-val             26.2350+-0.3389     ?     26.9834+-0.5726        ? might be 1.0285x slower
   int-or-other-sub-then-get-by-val                   5.8165+-0.0671     ?      5.9003+-0.1399        ? might be 1.0144x slower
   int-or-other-sub                                   5.1537+-0.1644            5.0305+-0.1514          might be 1.0245x faster
   int-overflow-local                                 5.8417+-0.2977            5.7538+-0.1523          might be 1.0153x faster
   Int16Array-alloc-long-lived                       61.3978+-1.0606           61.0508+-1.0415        
   Int16Array-bubble-sort-with-byteLength            38.7104+-0.7951           38.4618+-0.2713        
   Int16Array-bubble-sort                            38.4918+-0.9121           38.4597+-0.2528        
   Int16Array-load-int-mul                            1.9250+-0.1057            1.8881+-0.1053          might be 1.0196x faster
   Int16Array-to-Int32Array-set                      74.2353+-1.7058     ?     75.3610+-2.0762        ? might be 1.0152x slower
   Int32Array-alloc-large                            36.1815+-0.8652           34.7300+-0.7144          might be 1.0418x faster
   Int32Array-alloc-long-lived                       68.4501+-0.6730     ?     68.6372+-1.4367        ?
   Int32Array-alloc                                   3.9286+-0.2119     ?      3.9791+-0.1020        ? might be 1.0128x slower
   Int32Array-Int8Array-view-alloc                    9.4392+-0.3028            8.8750+-0.4898          might be 1.0636x faster
   int52-spill                                        8.5757+-0.2565            8.5333+-0.3229        
   Int8Array-alloc-long-lived                        55.4685+-1.2928     ?     55.5698+-0.8696        ?
   Int8Array-load-with-byteLength                     4.7252+-0.1230            4.6815+-0.0478        
   Int8Array-load                                     4.7417+-0.1141            4.6512+-0.1053          might be 1.0195x faster
   integer-divide                                    14.3812+-0.2352           14.2275+-0.1601          might be 1.0108x faster
   integer-modulo                                     2.7552+-0.1871            2.7029+-0.2553          might be 1.0194x faster
   large-int-captured                                10.9674+-0.6232     ?     11.0304+-0.3842        ?
   large-int-neg                                     20.9854+-0.6015     ?     21.1737+-0.4243        ?
   large-int                                         18.8331+-1.0127     ?     19.0234+-0.6106        ? might be 1.0101x slower
   logical-not                                        6.0604+-0.0859     ?      6.1042+-0.3601        ?
   lots-of-fields                                    15.6068+-0.1652           15.5110+-0.2727        
   make-indexed-storage                               3.9894+-0.1396            3.9242+-0.4644          might be 1.0166x faster
   make-rope-cse                                      5.4882+-0.2882     ?      5.5870+-0.1430        ? might be 1.0180x slower
   marsaglia-larger-ints                             55.1172+-0.3675     ?     55.7508+-1.3567        ? might be 1.0115x slower
   marsaglia-osr-entry                               28.1013+-0.8797           27.6476+-0.1356          might be 1.0164x faster
   max-boolean                                        3.2947+-0.1979            3.2315+-0.1191          might be 1.0195x faster
   method-on-number                                  23.5540+-1.2433     ?     23.7208+-1.1244        ?
   min-boolean                                        3.2455+-0.1040            3.1715+-0.0855          might be 1.0233x faster
   minus-boolean-double                               4.1417+-0.1814     ?      4.1778+-0.1353        ?
   minus-boolean                                      3.2781+-0.4240            3.2557+-0.0689        
   misc-strict-eq                                    53.9434+-0.7476           53.3035+-0.3721          might be 1.0120x faster
   mod-boolean-double                                11.6533+-0.2820           11.6196+-0.3271        
   mod-boolean                                        8.9221+-0.1630     ?      8.9509+-0.1189        ?
   mul-boolean-double                                 4.7979+-0.1736            4.7505+-0.1097        
   mul-boolean                                        3.4223+-0.0653            3.4182+-0.0568        
   neg-boolean                                        4.1777+-0.0594            4.1722+-0.1165        
   negative-zero-divide                               0.4479+-0.0740     ?      0.4669+-0.0968        ? might be 1.0425x slower
   negative-zero-modulo                               0.4673+-0.0937     ?      0.4730+-0.1150        ? might be 1.0121x slower
   negative-zero-negate                               0.4266+-0.0856            0.3928+-0.0241          might be 1.0859x faster
   nested-function-parsing                           33.2473+-0.5381           32.8270+-0.9728          might be 1.0128x faster
   new-array-buffer-dead                              3.7063+-0.2036     ?      3.7841+-0.1783        ? might be 1.0210x slower
   new-array-buffer-push                              9.6901+-0.2825     ^      9.1895+-0.1401        ^ definitely 1.0545x faster
   new-array-dead                                    15.5812+-2.4400     ?     15.6038+-0.5996        ?
   new-array-push                                     6.5715+-0.3290            6.3920+-0.2131          might be 1.0281x faster
   number-test                                        4.0695+-0.1911     ?      4.0749+-0.1433        ?
   object-closure-call                                7.6845+-0.4593     ?      7.7094+-0.1592        ?
   object-test                                        4.2998+-0.1516     ?      4.3018+-0.0866        ?
   obvious-sink-pathology-taken                     174.4190+-5.1509          171.3528+-2.9052          might be 1.0179x faster
   obvious-sink-pathology                           165.2239+-6.4436          163.7383+-4.6858        
   obviously-elidable-new-object                     49.6196+-0.6834     ?     49.6628+-0.9180        ?
   plus-boolean-arith                                 3.2413+-0.1056            3.1740+-0.0520          might be 1.0212x faster
   plus-boolean-double                                4.1500+-0.0897            4.1207+-0.1255        
   plus-boolean                                       3.0500+-0.0355     ?      3.1431+-0.1162        ? might be 1.0305x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.7668+-0.1322     ?      3.8098+-0.1226        ? might be 1.0114x slower
   poly-chain-access-different-prototypes             2.8813+-0.2545     !      3.3515+-0.1549        ! definitely 1.1632x slower
   poly-chain-access-simpler                          3.7610+-0.0598     ?      3.8264+-0.1405        ? might be 1.0174x slower
   poly-chain-access                                  3.1686+-0.1451     ?      3.2062+-0.1646        ? might be 1.0119x slower
   poly-stricteq                                     68.4530+-0.3885     ?     69.1483+-1.5238        ? might be 1.0102x slower
   polymorphic-array-call                             2.2172+-0.2386     ?      2.3234+-0.1648        ? might be 1.0479x slower
   polymorphic-get-by-id                              4.1441+-0.0614            4.1278+-0.1289        
   polymorphic-put-by-id                             39.3367+-7.2393           37.6735+-1.7495          might be 1.0441x faster
   polymorphic-structure                             21.2762+-1.9365     ?     21.7947+-2.0781        ? might be 1.0244x slower
   polyvariant-monomorphic-get-by-id                 11.3228+-0.1237     ?     11.3607+-0.3130        ?
   proto-getter-access                               12.9315+-0.6332     ?     12.9413+-0.1778        ?
   put-by-id-replace-and-transition                  11.0488+-0.2998     ?     11.1098+-0.4531        ?
   put-by-id-slightly-polymorphic                     3.5402+-0.1324            3.5042+-0.2198          might be 1.0103x faster
   put-by-id                                         17.7447+-0.2162     ?     18.0435+-0.5401        ? might be 1.0168x slower
   put-by-val-direct                                  0.7283+-0.1142     ?      0.7422+-0.1041        ? might be 1.0192x slower
   put-by-val-large-index-blank-indexing-type   
                                                      7.8495+-0.5868     ?      7.9821+-0.3121        ? might be 1.0169x slower
   put-by-val-machine-int                             3.2039+-0.1218            3.1982+-0.1970        
   rare-osr-exit-on-local                            18.3172+-0.4160           18.1672+-0.1237        
   register-pressure-from-osr                        26.8782+-0.6159           26.5682+-0.2445          might be 1.0117x faster
   setter                                             6.4027+-0.1652     ?      6.4393+-0.1288        ?
   simple-activation-demo                            32.6480+-0.3185     ?     32.8755+-0.3082        ?
   simple-getter-access                              18.1043+-1.0184           18.0257+-0.3345        
   simple-poly-call-nested                           21.3599+-1.8930     ?     22.1334+-0.2936        ? might be 1.0362x slower
   simple-poly-call                                   1.6030+-0.1099     ?      1.6035+-0.0968        ?
   sin-boolean                                       24.9792+-4.3823           24.8759+-4.3721        
   sinkable-new-object-dag                           94.1278+-0.7144           92.9161+-2.6115          might be 1.0130x faster
   sinkable-new-object-taken                         68.2675+-1.2393     ?     69.8903+-5.2258        ? might be 1.0238x slower
   sinkable-new-object                               52.7207+-1.2223           51.7943+-0.7228          might be 1.0179x faster
   slow-array-profile-convergence                     3.7192+-0.2951            3.4830+-0.2731          might be 1.0678x faster
   slow-convergence                                   4.3657+-0.2040            4.3455+-0.3224        
   sparse-conditional                                 1.5207+-0.1649            1.4970+-0.1032          might be 1.0158x faster
   splice-to-remove                                  21.1331+-0.5643     ?     22.8280+-1.2165        ? might be 1.0802x slower
   string-char-code-at                               19.8638+-0.1339           19.7661+-0.7578        
   string-concat-object                               2.7579+-0.2920            2.7148+-0.4670          might be 1.0159x faster
   string-concat-pair-object                          2.6023+-0.1942     ?      2.6126+-0.2396        ?
   string-concat-pair-simple                         15.5604+-0.3052           15.4670+-0.4702        
   string-concat-simple                              15.4633+-0.3101     ?     15.7349+-0.7227        ? might be 1.0176x slower
   string-cons-repeat                                10.4015+-0.3503           10.3836+-0.3255        
   string-cons-tower                                  9.5858+-0.2621     ?      9.7407+-0.5111        ? might be 1.0162x slower
   string-equality                                   22.2062+-0.3310           22.1160+-0.3402        
   string-get-by-val-big-char                         9.5818+-0.3638     ?      9.6310+-0.7672        ?
   string-get-by-val-out-of-bounds-insane             5.6357+-0.1490            5.5009+-0.3439          might be 1.0245x faster
   string-get-by-val-out-of-bounds                    6.7587+-0.1007            6.7050+-0.1130        
   string-get-by-val                                  4.7222+-0.0966            4.7095+-0.0940        
   string-hash                                        2.6141+-0.0519     ?      2.7018+-0.1693        ? might be 1.0336x slower
   string-long-ident-equality                        18.2690+-0.2096     ?     18.3013+-0.3081        ?
   string-repeat-arith                               40.3123+-0.5808           39.8430+-0.7381          might be 1.0118x faster
   string-sub                                        80.2155+-2.9314     ?     80.7030+-1.5687        ?
   string-test                                        4.0775+-0.1311            4.0560+-0.1082        
   string-var-equality                               43.5605+-0.1799           43.5302+-0.3944        
   structure-hoist-over-transitions                   3.3590+-0.4433            3.3265+-0.1695        
   substring-concat-weird                            53.0084+-0.7586           52.8245+-0.9739        
   substring-concat                                  56.1563+-0.2732           55.5636+-1.8459          might be 1.0107x faster
   substring                                         62.2142+-0.7411           61.3459+-1.0810          might be 1.0142x faster
   switch-char-constant                               3.3317+-0.1972            3.2523+-0.1383          might be 1.0244x faster
   switch-char                                        7.8472+-0.0787     !      8.1863+-0.0621        ! definitely 1.0432x slower
   switch-constant                                   12.3555+-1.8987           12.0934+-2.0126          might be 1.0217x faster
   switch-string-basic-big-var                       21.3031+-2.2886     ?     21.3423+-3.1261        ?
   switch-string-basic-big                           21.3156+-5.3796           20.1611+-0.8941          might be 1.0573x faster
   switch-string-basic-var                           26.2910+-1.6546     ?     26.8113+-1.5265        ? might be 1.0198x slower
   switch-string-basic                               18.5315+-0.8406     ?     19.2083+-3.2429        ? might be 1.0365x slower
   switch-string-big-length-tower-var                25.3953+-0.6860           25.2682+-0.3789        
   switch-string-length-tower-var                    19.8730+-0.2364           19.6832+-0.1263        
   switch-string-length-tower                        14.5559+-0.3457     ?     14.6617+-0.4330        ?
   switch-string-short                               14.7220+-0.4685     ?     15.0652+-0.4922        ? might be 1.0233x slower
   switch                                            16.2682+-3.3638     ?     16.7345+-4.1008        ? might be 1.0287x slower
   tear-off-arguments-simple                          3.2314+-0.2424     ?      3.2357+-0.3333        ?
   tear-off-arguments                                 4.9818+-0.2158            4.8538+-0.1832          might be 1.0264x faster
   temporal-structure                                17.2350+-0.1629           17.1755+-0.2550        
   to-int32-boolean                                  20.5250+-0.4193     ?     20.8517+-0.2475        ? might be 1.0159x slower
   undefined-property-access                        479.7628+-23.8299         469.1871+-1.7661          might be 1.0225x faster
   undefined-test                                     4.2167+-0.0933     ?      4.2476+-0.0722        ?
   unprofiled-licm                                   27.3610+-0.5807     ?     27.5142+-0.7061        ?
   weird-inlining-const-prop                          2.4694+-0.0737     ?      2.4830+-0.0720        ?

   <arithmetic>                                      22.8357+-0.1630           22.7493+-0.0993          might be 1.0038x faster
   <geometric> *                                     10.5738+-0.0315           10.5593+-0.0420          might be 1.0014x faster
   <harmonic>                                         5.3103+-0.0695            5.2735+-0.1059          might be 1.0070x faster

                                                         Baseline               UndefinedFunc                                   
AsmBench:
   bigfib.cpp                                       677.2413+-8.5516     ?    678.8892+-8.2028        ?
   cray.c                                           686.0812+-5.8876     ?    688.1118+-6.1636        ?
   dry.c                                            655.3725+-2.5204          652.7973+-9.2439        
   FloatMM.c                                        950.4007+-1.3924     ?    951.0965+-4.9512        ?
   gcc-loops.cpp                                   5824.1706+-16.5732        5823.1967+-29.6393       
   n-body.c                                        1669.9743+-1.4183     ?   1673.0967+-3.0915        ?
   Quicksort.c                                      583.9355+-6.4283     ?    586.3626+-10.1923       ?
   stepanov_container.cpp                          4868.7386+-48.3223    ?   4874.4932+-32.3213       ?
   Towers.c                                         396.2017+-0.9726     ?    397.9208+-3.3761        ?

   <arithmetic>                                    1812.4574+-6.9573     ?   1813.9961+-6.0479        ? might be 1.0008x slower
   <geometric> *                                   1136.7916+-2.7232     ?   1138.4969+-4.4601        ? might be 1.0015x slower
   <harmonic>                                       839.1828+-1.9823     ?    840.8905+-3.8372        ? might be 1.0020x slower

                                                         Baseline               UndefinedFunc                                   
CompressionBench:
   huffman                                          645.7045+-9.8187          636.0800+-16.3046         might be 1.0151x faster
   arithmetic-simple                                574.9868+-2.4483     ?    577.2659+-1.6462        ?
   arithmetic-precise                               439.5007+-15.1951         431.7443+-1.4635          might be 1.0180x faster
   arithmetic-complex-precise                       432.6166+-6.4601          431.6287+-1.6404        
   arithmetic-precise-order-0                       649.0367+-11.3296         649.0328+-10.8584       
   arithmetic-precise-order-1                       472.3568+-6.3980          464.8635+-7.7389          might be 1.0161x faster
   arithmetic-precise-order-2                       521.7921+-6.8654     ?    532.1755+-16.5204       ? might be 1.0199x slower
   arithmetic-simple-order-1                        595.2588+-7.7163          594.7711+-1.9062        
   arithmetic-simple-order-2                        670.2905+-17.3928         665.9950+-5.2487        
   lz-string                                        437.6993+-8.0156     ?    438.8642+-20.4113       ?

   <arithmetic>                                     543.9243+-3.4933          542.2421+-1.2751          might be 1.0031x faster
   <geometric> *                                    536.3813+-3.3528          534.6558+-1.3823          might be 1.0032x faster
   <harmonic>                                       528.8976+-3.3763          527.0804+-1.6405          might be 1.0034x faster

                                                         Baseline               UndefinedFunc                                   
All benchmarks:
   <arithmetic>                                     137.1961+-0.1912          136.8283+-0.2732          might be 1.0027x faster
   <geometric>                                       17.7018+-0.0426           17.6701+-0.0508          might be 1.0018x faster
   <harmonic>                                         4.4472+-0.0240            4.4357+-0.0731          might be 1.0026x faster

                                                         Baseline               UndefinedFunc                                   
Geomean of preferred means:
   <scaled-result>                                   88.0015+-0.1239           87.9294+-0.1003          might be 1.0008x faster
Comment 8 Geoffrey Garen 2014-12-08 16:10:57 PST
Comment on attachment 242853 [details]
Patch using undefined function class for missing getters and setters

View in context: https://bugs.webkit.org/attachment.cgi?id=242853&action=review

r=me with some fixes

> Source/JavaScriptCore/runtime/GetterSetter.cpp:81
> +bool GetterSetter::isGetterNull() const
> +{
> +    return m_getter.get() == jsCast<JSObject*>(structure()->globalObject()->undefinedFunction());
> +}
> +    
> +bool GetterSetter::isSetterNull() const
> +{
> +    return m_setter.get() == jsCast<JSObject*>(structure()->globalObject()->undefinedFunction());
> +}

I think this would be better as a type check: jsDynamicCast<UndefinedFunction*>(thingy). You don't need to change the GetterSetter structure to be per-global-object.

> Source/JavaScriptCore/runtime/UndefinedFunction.h:33
> +class UndefinedFunction : public InternalFunction {

This needs a more purpose-specific name. Something like "NullGetterFunction". It's not really valid to use this as a general-purpose function.
Comment 9 Build Bot 2014-12-08 16:25:04 PST
Comment on attachment 242853 [details]
Patch using undefined function class for missing getters and setters

Attachment 242853 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5257833020915712

New failing tests:
ietestcenter/Javascript/11.1.5_6-3-2.html
ietestcenter/Javascript/15.2.3.3-4-3.html
js/dom/getOwnPropertyDescriptor.html
ietestcenter/Javascript/11.1.5_7-3-2.html
Comment 10 Build Bot 2014-12-08 16:25:09 PST
Created attachment 242861 [details]
Archive of layout-test-results from ews100 for mac-mountainlion

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mountainlion  Platform: Mac OS X 10.8.5
Comment 11 Geoffrey Garen 2014-12-08 16:33:26 PST
Comment on attachment 242853 [details]
Patch using undefined function class for missing getters and setters

Looks like this is failing tests.
Comment 12 Michael Saboff 2014-12-08 16:41:44 PST
(In reply to comment #9)
> Comment on attachment 242853 [details]
> Patch using undefined function class for missing getters and setters
> 
> Attachment 242853 [details] did not pass mac-ews (mac):
> Output: http://webkit-queues.appspot.com/results/5257833020915712
> 
> New failing tests:
> ietestcenter/Javascript/11.1.5_6-3-2.html
> ietestcenter/Javascript/15.2.3.3-4-3.html
> js/dom/getOwnPropertyDescriptor.html
> ietestcenter/Javascript/11.1.5_7-3-2.html

I found this after posting.  The fix is to use isGetterNull() and isSetterNull() in 2 places each in PropertyDescriptor.cpp.  I verified all other uses of GetterSetter::getter() and ::setter() to check that they are valid.
Comment 13 Michael Saboff 2014-12-09 03:34:15 PST
Created attachment 242906 [details]
Patch with suggested changes and fix for test failures
Comment 14 Michael Saboff 2014-12-09 11:52:02 PST
Committed r177030: <http://trac.webkit.org/changeset/177030>
Comment 15 Csaba Osztrogonác 2014-12-10 04:52:34 PST
buildfix landed in https://trac.webkit.org/changeset/177055