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

Unified Diff: frog/leg/lib/core.dart

Issue 9284022: Operators. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 11 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: frog/leg/lib/core.dart
===================================================================
--- frog/leg/lib/core.dart (revision 3592)
+++ frog/leg/lib/core.dart (working copy)
@@ -56,28 +56,28 @@
// operator, since that's what we are defining here.
throw "calling toString() on right hand operand of operator + did not return a String";
}
- throw "Unimplemented user-defined +.";
+ return UNINTERCEPTED(a + b);
}
div(var a, var b) {
if (checkNumbers(a, b, "num/ expects a number as second operand.")) {
return JS("num", @"$0 / $1", a, b);
}
- throw "Unimplemented user-defined /.";
+ return UNINTERCEPTED(a / b);
}
mul(var a, var b) {
if (checkNumbers(a, b, "num* expects a number as second operand.")) {
return JS("num", @"$0 * $1", a, b);
}
- throw "Unimplemented user-defined *.";
+ return UNINTERCEPTED(a * b);
}
sub(var a, var b) {
if (checkNumbers(a, b, "num- expects a number as second operand.")) {
return JS("num", @"$0 - $1", a, b);
}
- throw "Unimplemented user-defined binary -.";
+ return UNINTERCEPTED(a - b);
}
mod(var a, var b) {
@@ -92,7 +92,7 @@
return result + b;
}
}
- throw "Unimplemented user-defined %.";
+ return UNINTERCEPTED(a % b);
}
tdiv(var a, var b) {
@@ -106,13 +106,15 @@
return JS("num", @"Math.floor($0)", tmp);
}
}
- throw "Unimplemented user-defined ~/.";
+ return UNINTERCEPTED(a ~/ b);
}
eq(var a, var b) {
if (JS("bool", @"typeof $0 === 'object'", a)) {
- if (JS("bool", @"$0.$equals", a)) {
- return JS("bool", @"$0.$equals($1) === true", a, b);
+ // TODO(ngeoffray): If we start using more property checks like
+ // this, add a foreign PROPERTY_CHECK element.
+ if (JS("bool", @"$0.operator$eq$1", a)) {
Lasse Reichstein Nielsen 2012/01/27 09:42:34 I recommend doing the foreign PREOPRTY_CHECK macro
ngeoffray 2012/01/27 10:50:04 As discussed, added a JS_HAS_EQUALS to avoid the m
+ return UNINTERCEPTED(a == b) === true;
} else {
return JS("bool", @"$0 === $1", a, b);
}
@@ -127,8 +129,8 @@
eqNull(var a) {
if (JS("bool", @"typeof $0 === 'object'", a)) {
- if (JS("bool", @"$0.$equals", a)) {
- return JS("bool", @"$0.$equals(void 0) === true", a);
+ if (JS("bool", @"$0.operator$eq$1", a)) {
Lasse Reichstein Nielsen 2012/01/27 09:42:34 Ditto here.
ngeoffray 2012/01/27 10:50:04 Done.
+ return UNINTERCEPTED(a == null) === true;
} else {
return false;
}
@@ -141,28 +143,28 @@
if (checkNumbers(a, b, "num> expects a number as second operand.")) {
return JS("bool", @"$0 > $1", a, b);
}
- throw "Unimplemented user-defined binary >.";
+ return UNINTERCEPTED(a > b);
}
ge(var a, var b) {
if (checkNumbers(a, b, "num>= expects a number as second operand.")) {
return JS("bool", @"$0 >= $1", a, b);
}
- throw "Unimplemented user-defined binary >=.";
+ return UNINTERCEPTED(a >= b);
}
lt(var a, var b) {
if (checkNumbers(a, b, "num< expects a number as second operand.")) {
return JS("bool", @"$0 < $1", a, b);
}
- throw "Unimplemented user-defined binary <.";
+ return UNINTERCEPTED(a < b);
}
le(var a, var b) {
if (checkNumbers(a, b, "num<= expects a number as second operand.")) {
return JS("bool", @"$0 <= $1", a, b);
}
- throw "Unimplemented user-defined binary <=.";
+ return UNINTERCEPTED(a <= b);
}
shl(var a, var b) {
@@ -170,7 +172,7 @@
if (checkNumbers(a, b, "int<< expects an int as second operand.")) {
return JS("num", @"$0 << $1", a, b);
}
- throw "Unimplemented user-defined binary <<.";
+ return UNINTERCEPTED(a << b);
}
shr(var a, var b) {
@@ -178,7 +180,7 @@
if (checkNumbers(a, b, "int>> expects an int as second operand.")) {
return JS("num", @"$0 >> $1", a, b);
}
- throw "Unimplemented user-defined binary >>.";
+ return UNINTERCEPTED(a >> b);
}
and(var a, var b) {
@@ -186,7 +188,7 @@
if (checkNumbers(a, b, "int& expects an int as second operand.")) {
return JS("num", @"$0 & $1", a, b);
}
- throw "Unimplemented user-defined binary &.";
+ return UNINTERCEPTED(a & b);
}
or(var a, var b) {
@@ -194,7 +196,7 @@
if (checkNumbers(a, b, "int| expects an int as second operand.")) {
return JS("num", @"$0 | $1", a, b);
}
- throw "Unimplemented user-defined binary |.";
+ return UNINTERCEPTED(a | b);
}
xor(var a, var b) {
@@ -202,17 +204,17 @@
if (checkNumbers(a, b, "int^ expects an int as second operand.")) {
return JS("num", @"$0 ^ $1", a, b);
}
- throw "Unimplemented user-defined binary ^.";
+ return UNINTERCEPTED(a ^ b);
}
not(var a) {
if (JS("bool", @"typeof $0 === 'number'", a)) return JS("num", @"~$0", a);
- throw "Unimplemented user-defined ~.";
+ return UNINTERCEPTED(~a);
}
neg(var a) {
if (JS("bool", @"typeof $0 === 'number'", a)) return JS("num", @"-$0", a);
- throw "Unimplemented user-defined unary-.";
+ return UNINTERCEPTED(-a);
}
index(var a, var index) {
@@ -221,7 +223,7 @@
if (index < 0 || index >= a.length) $throw('Out of bounds');
return JS("Object", @"$0[$1]", a, index);
}
- throw "Unimplemented user-defined [].";
+ return UNINTERCEPTED(a[index]);
}
indexSet(var a, var index, var value) {
@@ -230,7 +232,7 @@
if (index < 0 || index >= a.length) $throw('Out of bounds');
return JS("Object", @"$0[$1] = $2", a, index, value);
}
- throw "Unimplemented user-defined []=.";
+ return UNINTERCEPTED(a[index] = value);
}
builtin$add$1(var receiver, var value) {
@@ -238,14 +240,14 @@
JS("Object", @"$0.push($1)", receiver, value);
return;
}
- throw "Unimplemented user-defined add().";
+ return UNINTERCEPTED(receiver.add(value));
}
builtin$removeLast$0(var receiver) {
if (isJSArray(receiver)) {
return JS("Object", @"$0.pop()", receiver);
}
- throw "Unimplemented user-defined removeLast().";
+ return UNINTERCEPTED(receiver.removeLast());
}
builtin$filter$1(var receiver, var predicate) {
@@ -253,7 +255,7 @@
return JS("Object", @"$0.filter(function(v) { return $1(v) === true; })",
receiver, predicate);
}
- throw "Unimplemented user-defined filter().";
+ return UNINTERCEPTED(receiver.filter(predicate));
}
@@ -261,7 +263,7 @@
if (JS("bool", @"typeof $0 === 'string'", receiver) || isJSArray(receiver)) {
return JS("num", @"$0.length", receiver);
}
- throw "Unimplemented user-defined length.";
+ return UNINTERCEPTED(receiver.length);
}
@@ -387,13 +389,18 @@
}
static void _fail(String message) {
- throw message;
+ $throw(message);
}
static void isTrue(var actual) {
Lasse Reichstein Nielsen 2012/01/27 09:42:34 Add a TODO to add the optional message parameter w
ngeoffray 2012/01/27 10:50:04 Done.
if (actual === true) return;
_fail("Expect.isTrue($actual) fails.");
}
+
+ static void isFalse(var actual) {
+ if (actual === false) return;
+ _fail("Expect.isFalse($actual) fails.");
+ }
}
class Stopwatch {
« no previous file with comments | « frog/leg/emitter.dart ('k') | frog/leg/namer.dart » ('j') | frog/leg/resolver.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698