Hierarchy (View Summary)

Implements

Constructors

Properties

The loc field represents the source location information of the node. If the node contains no information about the source location, the field is null or undefined; otherwise it is an object consisting of a start position (the position of the first character of the parsed source region) and an end position (the position of the first character after the parsed source region): and offset index (the position of the first character)

range?: [number, number]

start and end position offset

type: string

The type field is a string representing the AST variant type. Each subtype of Node is documented below with the specific string of its type field. You can use this field to determine which interface a node implements.

Methods

  • declare variable in the current local scope (block), or closest function scope (global) scop, the propertyName will be calculated at runtime

    Parameters

    • stack: Stack

      the stack which an identifier will be declared

    • values: any

      the initial value of identifier

    Returns void

  • Parameters

    • stack: Stack
    • values: any[]

    Returns void

  • Parameters

    • stack: Stack
    • iterator: Iterator

    Returns void

  • get all dependencies form an expression node

    the return from this method, is represent an answer for what identifiers this expression depends-on.

    ex:

    x + y;
    
    • for + operator : the answer should be lhs and rhs,
    • for x identifier: the answer should be node x,
    • for y identifier: the answer should be node y.

    so, the return from + will be [ node 'x', node 'y']

    and:

    • x.y.z * a ==> [ member node x.y.z, identifier 'a']

    Parameters

    • Optionalcomputed: true

    Returns ExpressionNode[]

  • ex:

    x + y;
    
    • for + operator : the answer should be lhs and rhs,
    • for x identifier: the answer should be node x,
    • for y identifier: the answer should be node y.

    so, the return from + will be ['x', 'y']

    and:

    • x.y.z ==> ['x', 'y', 'z']
    • x[y].z ==> ['x', ]

    Parameters

    • Optionalcomputed: true

      required for member and chaining operators

    Returns ExpressionEventPath[]

  • get all the events form this expression

    the return from this method, is represent an answer for what is this expression depends-on as identifier name

    ex:

    x + y;
    
    • for + operator : the answer should be lhs and rhs,
    • for x identifier: the answer should be x
    • for y identifier: the answer should be y the final output will be

    so, the return from + will be { x: undefined, y: undefined }

    and:

    • x.y.z * a ==> { x: { y: { z: undefined }, a: undefined } }
    • x.y.z > x.y.h.g ==> { x: { y: { z: undefined, h: { g: undefined} } } }
    • x[Symbol.toStringTag] + 'Class' + classType + array[3] ==> { x: { 'Symbol.toStringTag': undefined }, classType: undefined, array: { 3: undefined } }
    • 'name' ==> {}
    • 
      

    user[firstName + son of ${fatherName}] ``` ==> { user: { 'firstName:fatherName': undefined }, firstName: undefined, fatherName: undefined }

    Returns ExpressionEventMap

  • assign the value to this expression in stack.

    most ExpressionNode will not implement this method, and will throw an exception.

    Parameters

    Returns void

  • Returns object