// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*element: main:[null]*/
main() {
  zero();
  one();
  half();
  large();
  huge();

  emptyString();
  nonEmptyString();
  stringJuxtaposition();
  stringConstantInterpolation();
  stringNonConstantInterpolation();

  thisExact();
  thisSubclass();
  thisSubclassExact();
  thisSubtype();
  thisSubtypeExact();
  thisSubtypeMixedIn();
  thisSubtypeExactMixedIn();
}

////////////////////////////////////////////////////////////////////////////////
/// Return a zero integer literal.
////////////////////////////////////////////////////////////////////////////////

/*element: zero:[exact=JSUInt31]*/
zero() => 0;

////////////////////////////////////////////////////////////////////////////////
/// Return a positive integer literal.
////////////////////////////////////////////////////////////////////////////////

/*element: one:[exact=JSUInt31]*/
one() => 1;

////////////////////////////////////////////////////////////////////////////////
/// Return a double literal.
////////////////////////////////////////////////////////////////////////////////

/*element: half:[exact=JSDouble]*/
half() => 0.5;

////////////////////////////////////////////////////////////////////////////////
/// Return a >31bit integer literal.
////////////////////////////////////////////////////////////////////////////////

/*element: large:[subclass=JSUInt32]*/
large() => 2147483648;

////////////////////////////////////////////////////////////////////////////////
/// Return a >32bit integer literal.
////////////////////////////////////////////////////////////////////////////////

/*element: huge:[subclass=JSPositiveInt]*/
huge() => 4294967296;

////////////////////////////////////////////////////////////////////////////////
/// Return an empty string.
////////////////////////////////////////////////////////////////////////////////

/*element: emptyString:Value mask: [""] type: [exact=JSString]*/
emptyString() => '';

////////////////////////////////////////////////////////////////////////////////
/// Return a non-empty string.
////////////////////////////////////////////////////////////////////////////////

/*element: nonEmptyString:Value mask: ["foo"] type: [exact=JSString]*/
nonEmptyString() => 'foo';

////////////////////////////////////////////////////////////////////////////////
/// Return a string juxtaposition.
////////////////////////////////////////////////////////////////////////////////

/*element: stringJuxtaposition:[exact=JSString]*/
stringJuxtaposition() => 'foo' 'bar';

////////////////////////////////////////////////////////////////////////////////
/// Return a string constant interpolation.
////////////////////////////////////////////////////////////////////////////////

/*element: stringConstantInterpolation:[exact=JSString]*/
stringConstantInterpolation() => 'foo${'bar'}';

////////////////////////////////////////////////////////////////////////////////
/// Return a string non-constant interpolation.
////////////////////////////////////////////////////////////////////////////////

/*element: _method1:[exact=JSBool]*/
_method1(/*[exact=JSBool]*/ c) => c;

/*element: stringNonConstantInterpolation:[exact=JSString]*/
stringNonConstantInterpolation() => 'foo${_method1(true)}${_method1(false)}';

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class with no subclasses.
////////////////////////////////////////////////////////////////////////////////

/*element: Class1.:[exact=Class1]*/
class Class1 {
  /*element: Class1.method:[exact=Class1]*/
  method() => this;
}

/*element: thisExact:[exact=Class1]*/
thisExact() => new Class1(). /*invoke: [exact=Class1]*/ method();

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class with an instantiated subclass.
////////////////////////////////////////////////////////////////////////////////

/*element: Class2a.:[exact=Class2a]*/
class Class2a {
  /*element: Class2a.method:[subclass=Class2a]*/
  method() => this;
}

/*element: Class2b.:[exact=Class2b]*/
class Class2b extends Class2a {}

/*element: thisSubclass:[subclass=Class2a]*/
thisSubclass() {
  new Class2b();
  return new Class2a(). /*invoke: [exact=Class2a]*/ method();
}

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class with no instantiated subclasses.
////////////////////////////////////////////////////////////////////////////////

/*element: Class3a.:[exact=Class3a]*/
class Class3a {
  /*element: Class3a.method:[exact=Class3a]*/
  method() => this;
}

class Class3b extends Class3a {}

/*element: thisSubclassExact:[exact=Class3a]*/
thisSubclassExact() {
  return new Class3a(). /*invoke: [exact=Class3a]*/ method();
}

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class that is mixed into an instantiated class.
////////////////////////////////////////////////////////////////////////////////

/*element: Class4a.:[exact=Class4a]*/
class Class4a {
  /*element: Class4a.method:[subtype=Class4a]*/
  method() => this;
}

/*element: Class4b.:[exact=Class4b]*/
class Class4b extends Object with Class4a {}

/*element: thisSubtype:[subtype=Class4a]*/
thisSubtype() {
  new Class4b();
  return new Class4a(). /*invoke: [exact=Class4a]*/ method();
}

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class that is mixed into an uninstantiated class.
////////////////////////////////////////////////////////////////////////////////

/*element: Class5a.:[exact=Class5a]*/
class Class5a {
  /*element: Class5a.method:[exact=Class5a]*/
  method() => this;
}

class Class5b extends Object with Class5a {}

/*element: thisSubtypeExact:[exact=Class5a]*/
thisSubtypeExact() {
  return new Class5a(). /*invoke: [exact=Class5a]*/ method();
}

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a mixed in class that is itself instantiated.
////////////////////////////////////////////////////////////////////////////////

/*element: Class6a.:[exact=Class6a]*/
class Class6a {
  /*element: Class6a.method:[subtype=Class6a]*/
  method() => this;
}

/*element: Class6b.:[exact=Class6b]*/
class Class6b extends Object with Class6a {}

/*element: thisSubtypeMixedIn:[subtype=Class6a]*/
thisSubtypeMixedIn() {
  new Class6a();
  return new Class6b(). /*invoke: [exact=Class6b]*/ method();
}

////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a mixed in class that is itself uninstantiated.
////////////////////////////////////////////////////////////////////////////////

class Class7a {
  /*element: Class7a.method:[exact=Class7b]*/
  method() => this;
}

/*element: Class7b.:[exact=Class7b]*/
class Class7b extends Object with Class7a {}

/*element: thisSubtypeExactMixedIn:[exact=Class7b]*/
thisSubtypeExactMixedIn() {
  return new Class7b(). /*invoke: [exact=Class7b]*/ method();
}
