blob: 28491f668d635545f15160ab81e72e0ad3f3fdd9 [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
import "dart:math" as math;
abstract sealed class Shape extends core::Object {
synthetic constructor •() self::Shape
: super core::Object::•()
;
abstract method calculateArea() core::double;
}
class Square extends core::Object implements self::Shape {
final field core::double length;
constructor •(core::double length) self::Square
: self::Square::length = length, super core::Object::•()
;
method calculateArea() core::double
return this.{self::Square::length}{core::double}.{core::double::*}(this.{self::Square::length}{core::double}){(core::num) core::double};
}
class Circle extends core::Object implements self::Shape {
final field core::double radius;
constructor •(core::double radius) self::Circle
: self::Circle::radius = radius, super core::Object::•()
;
method calculateArea() core::double
return #C1.{core::double::*}(this.{self::Circle::radius}{core::double}){(core::num) → core::double}.{core::double::*}(this.{self::Circle::radius}{core::double}){(core::num) → core::double};
}
static method calculateArea(self::Shape shape) core::double
return block {
core::double #t1;
final synthesized self::Shape #0#0 = shape;
#L1:
{
{
hoisted core::double l;
if(#0#0 is self::Square && (let final core::double #t2 = l = #0#0{self::Square}.{self::Square::length}{core::double} in true)) {
#t1 = l.{core::double::*}(l){(core::num) → core::double};
break #L1;
}
}
{
hoisted core::double r;
if(#0#0 is self::Circle && (let final core::double #t3 = r = #0#0{self::Circle}.{self::Circle::radius}{core::double} in true)) {
#t1 = #C1.{core::double::*}(r){(core::num) → core::double}.{core::double::*}(r){(core::num) → core::double};
break #L1;
}
}
throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>#t1;
static method main() dynamic {
self::Square s1 = new self::Square::•(2.0);
self::expect(s1.{self::Square::calculateArea}(){() core::double}, self::calculateArea(s1));
self::Circle s2 = new self::Circle::•(3.0);
self::expect(s2.{self::Circle::calculateArea}(){() core::double}, self::calculateArea(s2));
}
static method expect(dynamic expected, dynamic actual) dynamic {
if(!(expected =={core::Object::==}{(core::Object) core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
constants {
#C1 = 3.141592653589793
}