Package

scala.meta.internal

tasty

Permalink

package tasty

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. tasty
  2. AnyRef
  3. Any
  1. Hide All
  2. Show all
Visibility
  1. Public
  2. All

Type Members

  1. class NameBuffer extends TastyBuffer

    Permalink
  2. type SemanticSource = Source

    Permalink
  3. final class SyntacticDigest extends Product

    Permalink
  4. class TastyBuffer extends AnyRef

    Permalink

    A byte array buffer that can be filled with bytes or natural numbers in TASTY format, and that supports reading and patching addresses represented as natural numbers.

  5. final class TastyException extends Exception with ScalametaError with Product

    Permalink
  6. abstract class TastyName extends AnyRef

    Permalink
  7. class TastyPickler extends AnyRef

    Permalink
  8. class TastyReader extends AnyRef

    Permalink

    A byte array buffer that can be filled with bytes or natural numbers in TASTY format, and that supports reading and patching addresses represented as natural numbers.

  9. class TastyUnpickler extends AnyRef

    Permalink
  10. final class UntastyException extends Exception with ScalametaError with Product

    Permalink
  11. implicit class XtensionSyntacticDigestTree extends AnyRef

    Permalink
  12. implicit class XtensionTastyDebug extends AnyRef

    Permalink

Value Members

  1. object SyntacticDigest

    Permalink
  2. object TastyBuffer

    Permalink
  3. object TastyException extends Serializable

    Permalink
  4. object TastyFormat

    Permalink

    ********************************************************** Notation:

    ********************************************************** Notation:

    We use BNF notation. Terminal symbols start with at least two consecutive upper case letters. Each terminal is represented as a single byte tag. Non-terminals are mixed case. Prefixes of the form lower case letter*_ are for explanation of semantic content only, they can be dropped without changing the grammar.

    Micro-syntax:

    LongInt = Digit* StopDigit // big endian 2's complement, value fits in a Long w/o overflow Int = LongInt // big endian 2's complement, fits in an Int w/o overflow Nat = LongInt // non-negative value, fits in an Int without overflow Digit = 0 | ... | 127 StopDigit = 128 | ... | 255 // value = digit - 128

    Macro-format:

    File = Header majorVersion_Nat minorVersion_Nat UUID nameTable_Length Name* Section* Header = 0x5CA1AB1F UUID = Byte*16 // random UUID

    Section = NameRef Length Bytes Length = Nat // length of rest of entry in bytes

    Name = UTF8 Length UTF8-CodePoint* QUALIFIED Length qualified_NameRef selector_NameRef SIGNED Length original_NameRef resultSig_NameRef paramSig_NameRef* EXPANDED Length original_NameRef OBJECTCLASS Length module_NameRef SUPERACCESSOR Length accessed_NameRef DEFAULTGETTER Length method_NameRef paramNumber_Nat SHADOWED Length original_NameRef MANGLED Length mangle_NameRef name_NameRef ...

    NameRef = Nat // ordinal number of name in name table, starting from 1.

    Note: Unqualified names in the name table are strings. The context decides whether a name is a type-name or a term-name. The same string can represent both.

    Standard-Section: "ASTs" TopLevelStat*

    TopLevelStat = PACKAGE Length Path TopLevelStat* Stat

    Stat = Term VALDEF Length NameRef Type rhs_Term? Modifier* DEFDEF Length NameRef TypeParam* Params* return_Type rhs_Term? Modifier* TYPEDEF Length NameRef (Type | Template) Modifier* IMPORT Length qual_Term Selector* Selector = IMPORTED name_NameRef RENAMED Length from_NameRef to_NameRef // Imports are for scala.meta, they are not used in the backend

    TypeParam = TYPEPARAM Length NameRef Type Modifier* Params = PARAMS Length Param* Param = PARAM Length NameRef Type rhs_Term? Modifier* // rhs_Term is present in the case of an aliased class parameter Template = TEMPLATE Length TypeParam* Param* Parent* Self? Stat* // Stat* always starts with the primary constructor. Parent = Application Type Self = SELFDEF selfName_NameRef selfType_Type

    Term = Path Application IDENT NameRef Type // used when ident’s type is not a TermRef SELECT possiblySigned_NameRef qual_Term NEW cls_Type SUPER Length this_Term mixinTrait_Type? PAIR Length left_Term right_Term TYPED Length expr_Term ascription_Type NAMEDARG Length paramName_NameRef arg_Term ASSIGN Length lhs_Term rhs_Term BLOCK Length expr_Term Stat* LAMBDA Length meth_Term target_Type IF Length cond_Term then_Term else_Term MATCH Length sel_Term CaseDef* TRY Length expr_Term CaseDef* finalizer_Term? RETURN Length meth_ASTRef expr_Term? REPEATED Length elem_Term* BIND Length boundName_NameRef patType_Type pat_Term ALTERNATIVE Length alt_Term* UNAPPLY Length fun_Term ImplicitArg* pat_Type pat_Term* EMPTYTREE SHARED term_ASTRef Application = APPLY Length fn_Term arg_Term*

    TYPEAPPLY Length fn_Term arg_Type* CaseDef = CASEDEF Length pat_Term rhs_Tree guard_Tree? ImplicitArg = IMPLICITARG arg_Term ASTRef = Nat // byte position in AST payload

    Path = Constant TERMREFdirect sym_ASTRef TERMREFsymbol sym_ASTRef qual_Type TERMREFpkg fullyQualified_NameRef TERMREF possiblySigned_NameRef qual_Type THIS clsRef_Type SKOLEMtype refinedType_ASTRef SHARED path_ASTRef

    Constant = UNITconst FALSEconst TRUEconst BYTEconst Int SHORTconst Int CHARconst Nat INTconst Int LONGconst LongInt FLOATconst Int DOUBLEconst LongInt STRINGconst NameRef NULLconst CLASSconst Type ENUMconst Path

    Type = Path TYPEREFdirect sym_ASTRef TYPEREFsymbol sym_ASTRef qual_Type TYPEREFpkg fullyQualified_NameRef TYPEREF possiblySigned_NameRef qual_Type SUPERtype Length this_Type underlying_Type REFINEDtype Length underlying_Type refinement_NameRef info_Type APPLIEDtype Length tycon_Type arg_Type* TYPEBOUNDS Length low_Type high_Type TYPEALIAS Length alias_Type (COVARIANT | CONTRAVARIANT)? ANNOTATED Length fullAnnotation_Term underlying_Type ANDtype Length left_Type right_Type ORtype Length left_Type right_Type BIND Length boundName_NameRef bounds_Type // for type-variables defined in a type pattern BYNAMEtype underlying_Type POLYtype Length result_Type NamesTypes // needed for refinements METHODtype Length result_Type NamesTypes // needed for refinements PARAMtype Length binder_ASTref paramNum_Nat // needed for refinements SHARED type_ASTRef NamesTypes = ParamType* NameType = paramName_NameRef typeOrBounds_ASTRef

    Modifier = PRIVATE INTERNAL // package private PROTECTED PRIVATEqualified qualifier_Type // will be dropped PROTECTEDqualified qualifier_Type // will be dropped ABSTRACT FINAL SEALED CASE IMPLICIT LAZY OVERRIDE INLINE // macro ABSOVERRIDE // abstract override STATIC // mapped to static Java member OBJECT // an object or its class TRAIT // a trait LOCAL // private[this] or protected[this] SYNTHETIC // generated by Scala compiler ARTIFACT // to be tagged Java Synthetic MUTABLE // a var LABEL // method generated as a label FIELDaccessor // getter or setter CASEaccessor // getter for case class param COVARIANT // type param marked “+” CONTRAVARIANT // type param marked “-” SCALA2X // Imported from Scala2.x DEFAULTparameterized // Method with default params INSUPERCALL // defined in the argument of a constructor supercall Annotation Annotation = ANNOTATION Length tycon_Type fullAnnotation_Term

    Note: Tree tags are grouped into 5 categories that determine what follows, and thus allow to compute the size of the tagged tree in a generic way.

    Category 1 (tags 0-63) : tag Category 2 (tags 64-95) : tag Nat Category 3 (tags 96-111) : tag AST Category 4 (tags 112-127): tag Nat AST Category 5 (tags 128-255): tag Length <payload>

    Standard Section: "Sourcefile" sourcefile_NameRef

    Standard Section: "Positions" sourceLength_Nat Assoc*

    Assoc = addr_Delta offset_Delta offset_Delta? // addr_Delta : // Difference of address to last recorded node. // All but the first addr_Deltas are > 0, the first is >= 0. // 2nd offset_Delta: // Difference of end offset of addressed node vs parent node. Always <= 0 // 1st offset Delta, if delta >= 0 or 2nd offset delta exists // Difference of start offset of addressed node vs parent node. // 1st offset Delta, if delta < 0 and 2nd offset delta does not exist: // Difference of end offset of addressed node vs parent node. // Offsets and addresses are difference encoded. // Nodes which have the same positions as their parents are omitted. Delta = Int // Difference between consecutive offsets / tree addresses,

    ************************************************************************************

  5. object TastyName

    Permalink
  6. object TastyUnpickler

    Permalink
  7. object UntastyException extends Serializable

    Permalink
  8. object Util

    Permalink
  9. def fromTasty(tastyBlob: Array[Byte]): (SyntacticDigest, SemanticSource)

    Permalink
  10. def toTasty(digest: SyntacticDigest, source: SemanticSource): Array[Byte]

    Permalink

Inherited from AnyRef

Inherited from Any

Ungrouped