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
--------------