Args are the children nodes to the current node.
Flags store metadata/primitive data in an Iridium node. These nodes cannot store other Iridium S-Expressions.
Tag specifics the S-Expression Type.
This method is used to squish the Iridium Code into an array which can be easily stored on disk.
Nested Array of Iridium S-Expressions.
Optionalspace: numberStaticdumpGiven a serialized array of Iridium code, pretty prints it for debugging
The array produced by serialize()
Indicating the traversal depth
An object to track the current index during recursion
Remarks
BBContainer represents a logical piece of compilable code, it consists of two parts. The first arg contains a BindingsSEXP which is used to create and populate a stack frame. The second arg contains a ListSEXP of type BBSEXP which contains the instructions to execute.
Structure
ARG(bindings): Stores a BindingsSEXP.ARG(BB): Stores a ListSEXP of type BBSEXP.FLAG(ECMAArgs): Used to set thelengthproperty for functions, which indicates the number of expected arguments as per the ECMAScript spec.FLAG(StartBBIDX): IDX of the entry BB.FLAG(ScopeIDX): Scope/environment IDX of top level scope for this container.FLAG(ARGUMENTS): Is theargumentsobject allowed in this scope?FLAG(ASYNC): Is this an asynchronous function/module?FLAG(STRICT): Is the code in strict mode?FLAG(GENERATOR): Is this a generator function?FLAG(PROTO): Does the function have a prototype?FLAG(NEW): Is new.target lookup allowed in this function?FLAG(SCALL): Is super call allowed in this function?FLAG(SOBJ): Is super object allowed in this function?FLAG(HOME): Does this function need the home object?FLAG(DERIVED): Is this a derived constructor function?FLAG(TopLevel): Is top Level?FLAG(ContainerFlagID): A number.FLAG(NAME): string function name.Closure Type Map
Regular Closure = { }
Constructor = { PROTO, NEW }
Derived Constructor = { PROTO, NEW, SCALL, SOBJ, HOME, DERIVED }
Derived Method = { SOBJ, HOME }
Private Method = { HOME }
Prop Init + no_private = { }
Prop Init Derived + no_private = { SOBJ, HOME }
Prop Init + private = { HOME }
Prop Init Derived + private = { SOBJ, HOME }
Private Derived Method = { SOBJ, HOME }
Static Prop Init = { }
Static Prop Init Derived = { SOBJ, HOME }