Mixin: Global01

Eight~ Global01

Example 8/01: adds actions and infrastructure to compile global higher-order functions.

Source:

Classes

Fun
Type
Var

Members


<constant> mainType :Type

Predefined type descriptor for main (): number.

Type:
  • Type
Source:

<constant> numberType :Type

Predefined type descriptor for number.

Type:
  • Type
Source:

typeSymbols

Type table, maps names to descriptions.

Source:

Methods


_lift(args)

Move function address past arguments to the top of the stack.

Parameters:
Name Type Description
args Array.<Type>

list of argument types.

Source:

add()

add: '+' product; checks for number

Source:

args()

args: '(' [ sums ] ')'; codes call, chains context

Source:

cmp()

cmp: sum rel; checks for number

Source:

divide()

divide: '/' signed; checks for number

Source:

eq()

eq: '=' sum; checks for number

Source:

ge()

ge: '>=' sum; checks for number

Source:

gt()

gt: '>' sum; checks for number

Source:

input()

input: 'input' [ Number ]; returns `this.numberType

Source:

le()

le: '<=' sum; checks for number

Source:

lt()

lt: '<' sum; checks for number

Source:

multiply()

multiply: '*' signed; checks for number

Source:

name()

name: symbol [{ args }];

Source:

ne()

ne: '<>' sum; checks for number

Source:

number()

number: Number; returns this.numberType

Source:

parms()

parms: '(' [ names ] ')' [ ':' Name ]; declares

Source:

print()

print: 'print' sums; checks types

Source:

product()

product: signed [{ multiply | divide }]; returns signed

Source:

prog()

prog: [ typedcls ] [ vars ] funs;

Source:

return()

return: 'return' [ sum ];

Source:

signed()

signed: [ '-' ] term; checks for number, returns term

Source:

store()

store: '=' sum; expects context, codes assignment

Source:

subtract()

subtract: '-' product; checks for number

Source:

sum()

sum: product [{ add | subtract }]; returns product

Source:

sums()

sums: sum [{ ',' sum }]; returns list of types

Source:

term()

term: input | number | name | '(' sum ')'; returns type

Source:

type()

type: Name | 'number'; returns type symbol

Source:

typedcl()

typedcl: Name '(' [ types ] ')' [ ':' typename ]; declares

Source:

typedcls()

typedcls: { 'type' typedcl [{ ',' typedcl }] ';' }; checks and translates the types

Source:

typename()

typename: Name | 'number'; returns name or 'number'

Source:

types()

types: typename [{ ',' typename }]; returns list

Source:

varname()

varname: Name [ ':' type ]; declares the name. Can be used with one or two arguments, defaults to number.

Source: