Compile-Time objects

See Also: S06 

The compile-time system builds a 'Program' object.

"$program" stringifies to compiled code.

Environment

- contains the declarations in scope: variables, subroutines
- maybe contains also 'want'.

Methods

."" (overloaded stringification) - stringifies to source code
.box - creates a boxed object. Example: int.box -> Int
.WHAT - returns the class as a Class (which stringifies to the class name)
.perl - returns a Str, which contains the object dumped as Perl6 source code  

Coercions

.str .num .int .bool
.array .hash .scalar

Class-specific operations - for example:

.print - returns the code to execute '.print'
.true
.not
.== (encoded to ASCII, as '_61__61_')
.eq

--------------

Classes

See also: S06:Built-in Types

Native types

...


Undefined types

...


Immutable types

Seq
List
...

Mutable types

Array
Hash
...

Other types - See S06

Value types, Implementation types, Hierarchical types, Polymorphic types, Parameter types, Generic types, Return types

Special Classes

These classes are used internally to optimize the implementation, by moving boxing and type-checks to compile-time.

(Type)Scalar - a typed Scalar
  ArrayScalar
  HashScalar

(Type)Seq - a typed Seq 
  ArraySeq
    - An Array that doesn't contain Lazy components. This can be represented by a Perl5 Array.
  HashSeq

(Type)Expression - a typed expression
  AnyExpression 
  BoolExpression
  IntExpression
  StrExpression
  ...
  ArrayExpression
  HashExpression

Perl5Scalar - '$a'
  A Scalar called by name

Perl5Array - '@a'
  An Array called by name

Perl5Hash - '%h'
  A Hash called by name

(TODO)
  A Hash that only has Stringified keys. This can be represented by a Perl5 Hash.

--------------

Miscellaneus 

* use ::unicode_sub sub {...} to define methods with non alphanumeric names

--------------

