CLASS Box Value : INTEGER OVERLOAD FUNCTION OPERATOR+(rhs : INTEGER) RETURNS Box DECLARE result : Box result.Value <- Value + rhs RETURN result ENDFUNCTION OVERLOAD FUNCTION OPERATOR+(rhs : Box) RETURNS INTEGER Value <- Value + rhs.Value RETURN Value ENDFUNCTION OVERLOAD FUNCTION OPERATOR-() RETURNS INTEGER RETURN -Value ENDFUNCTION OVERLOAD FUNCTION OPERATOR NOT() RETURNS STRING RETURN "negated" ENDFUNCTION PRIVATE OVERLOAD FUNCTION OPERATOR&(rhs : STRING) RETURNS STRING RETURN NUM_TO_STR(Value) & rhs ENDFUNCTION FUNCTION Describe() RETURNS STRING RETURN this & "!" ENDFUNCTION ENDCLASS OVERLOAD FUNCTION OPERATOR-(lhs : Box, rhs : INTEGER) RETURNS INTEGER RETURN lhs.Value - rhs ENDFUNCTION OVERLOAD FUNCTION OPERATOR*(lhs : Box, rhs : Box) RETURNS INTEGER THROW RETURN 0 ENDFUNCTION FUNCTION MakeBox() RETURNS Box OUTPUT "make" DECLARE result : Box result.Value <- 4 RETURN result ENDFUNCTION FUNCTION Number() RETURNS INTEGER OUTPUT "number" RETURN 2 ENDFUNCTION DECLARE a : Box DECLARE b : Box DECLARE result : Box a.Value <- 3 b.Value <- 5 result <- (a + 2) + 4 OUTPUT result.Value OUTPUT -a OUTPUT NOT a OUTPUT a.Describe() OUTPUT a + b OUTPUT a.Value OUTPUT a.OPERATOR+(1) - 1 OUTPUT OPERATOR-(a, 2) CALL a.OPERATOR-( ) a.OPERATOR-( ) CALL OPERATOR-(a, 1) OPERATOR-(a, 1) result <- MakeBox() + Number() OUTPUT result.Value TRY OUTPUT a * b CATCH OUTPUT "caught" ENDTRY