Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1483)

Unified Diff: dart/frog/leg/ssa/codegen.dart

Issue 9429047: Implement operator-is for interfaces' supertypes and String's supertypes. Also, improve stack trace… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698