Chromium Code Reviews| Index: dart/frog/leg/ssa/codegen.dart |
| diff --git a/dart/frog/leg/ssa/codegen.dart b/dart/frog/leg/ssa/codegen.dart |
| index 2a951f43ca3978a194dcd2f1059267123b946717..165d54893b78bf38905576a6b866cfa0ccd8892e 100644 |
| --- a/dart/frog/leg/ssa/codegen.dart |
| +++ b/dart/frog/leg/ssa/codegen.dart |
| @@ -682,8 +682,10 @@ class SsaCodeGenerator implements HVisitor { |
| } |
| visitThrow(HThrow node) { |
| - buffer.add('throw '); |
| - use(node.inputs[0], JSPrecedence.EXPRESSION_PRECEDENCE); |
| + Element toStringHelper = |
| + compiler.findHelper(new SourceString(@'builtin$toString$0')); |
| + compiler.registerStaticUse(toStringHelper); |
|
ngeoffray
2012/02/22 11:12:36
Please add a comment that you're adding toString b
ahe
2012/02/22 21:51:24
Done.
|
| + generateThrowWithHelper('captureStackTrace', node.inputs[0]); |
| buffer.add(';\n'); |
| } |
| @@ -695,7 +697,7 @@ class SsaCodeGenerator implements HVisitor { |
| buffer.add(' >= '); |
| use(node.length, JSPrecedence.SHIFT_PRECEDENCE); |
| buffer.add(") "); |
| - generateFail('ioore', node.index); |
| + generateThrowWithHelper('ioore', node.index); |
| } |
| visitIntegerCheck(HIntegerCheck node) { |
| @@ -704,10 +706,10 @@ class SsaCodeGenerator implements HVisitor { |
| buffer.add(' !== ('); |
| use(node.value, JSPrecedence.BITWISE_OR_PRECEDENCE); |
| buffer.add(" | 0)) "); |
| - generateFail('iae', node.value); |
| + generateThrowWithHelper('iae', node.value); |
| } |
| - void generateFail(String helperName, HInstruction argument) { |
| + void generateThrowWithHelper(String helperName, HInstruction argument) { |
| Element helper = compiler.findHelper(new SourceString(helperName)); |
| compiler.registerStaticUse(helper); |
| buffer.add('throw '); |
| @@ -891,6 +893,18 @@ class SsaCodeGenerator implements HVisitor { |
| endExpression(JSPrecedence.LOGICAL_AND_PRECEDENCE); |
| } else { |
| beginExpression(JSPrecedence.LOGICAL_AND_PRECEDENCE); |
| + if (element == coreLibrary.find(const SourceString('Comparable'))) { |
| + checkString(input, '==='); |
| + buffer.add(' || '); |
| + } |
| + if (element == coreLibrary.find(const SourceString('Hashable'))) { |
| + checkString(input, '==='); |
| + buffer.add(' || '); |
| + } |
| + if (element == coreLibrary.find(const SourceString('Pattern'))) { |
|
ngeoffray
2012/02/22 11:12:36
Please merge the conditions into one if. Also add
ahe
2012/02/22 21:51:24
Done.
|
| + checkString(input, '==='); |
| + buffer.add(' || '); |
| + } |
| checkObject(input, '==='); |
| buffer.add(' && '); |
| int precedence = JSPrecedence.PREFIX_PRECEDENCE; |