| Index: src/js/regexp.js
 | 
| diff --git a/src/js/regexp.js b/src/js/regexp.js
 | 
| index 266d6b6c529e62a4a31a034982f77c28f3b0ff32..71fe64f05930fdcb54fb02192d8a2e0ab9d5813e 100644
 | 
| --- a/src/js/regexp.js
 | 
| +++ b/src/js/regexp.js
 | 
| @@ -178,11 +178,20 @@ function RegExpExecJS(string) {
 | 
|    var sticky = TO_BOOLEAN(REGEXP_STICKY(this));
 | 
|    var updateLastIndex = global || sticky;
 | 
|    if (updateLastIndex) {
 | 
| -    lastIndex = TO_LENGTH(this.lastIndex);
 | 
| +    // TODO(jgruber): This is actually ToLength in the spec, but we bailout
 | 
| +    // to the runtime in %_RegExpExec if lastIndex is not a Smi, so we are
 | 
| +    // smart here and trick both TurboFan and Crankshaft to produce a Smi.
 | 
| +    // This is a terrible hack, and correct for subtle reasons; it's a clear
 | 
| +    // indicator that we need a predictable RegExp implementation where we
 | 
| +    // don't need to add specific work-arounds for certain compiler issues.
 | 
| +    lastIndex = +this.lastIndex;
 | 
|      if (lastIndex > string.length) {
 | 
|        this.lastIndex = 0;
 | 
|        return null;
 | 
| +    } else if (lastIndex <= 0) {
 | 
| +      lastIndex = 0;
 | 
|      }
 | 
| +    lastIndex = lastIndex|0;
 | 
|    } else {
 | 
|      lastIndex = 0;
 | 
|    }
 | 
| 
 |