X-Git-Url: http://nitlanguage.org diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 219c396..9131c3e 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -311,6 +311,35 @@ abstract class Token # May have disappeared in the AST var next_token: nullable Token = null + # Is `self` a token discarded from the AST? + # + # Loose tokens are not present in the AST. + # It means they were identified by the lexer but were discarded by the parser. + # It also means that they are not visited or manipulated by AST-related functions. + # + # Each loose token is attached to the non-loose token that precedes or follows it. + # The rules are the following: + # + # * tokens that follow a non-loose token on a same line are attached to it. + # See `next_looses`. + # * other tokens, thus that precede a non-loose token on the same line or the next one, + # are attached to this one. See `prev_looses`. + # + # Loose tokens are mostly end of lines (`TEol`) and comments (`TComment`). + # Whitespace are ignored by the lexer, so they are not even considered as loose tokens. + # See `blank_before` to get the whitespace that separate tokens. + var is_loose = false + + # Loose tokens that precede `self`. + # + # These tokens start the line or belong to a line with only loose tokens. + var prev_looses = new Array[Token] is lazy + + # Loose tokens that follow `self` + # + # These tokens are on the same line than `self`. + var next_looses = new Array[Token] is lazy + # The verbatim blank text between `prev_token` and `self` fun blank_before: String do @@ -750,6 +779,21 @@ class TStarstareq super TokenOperator end +# The operator `|=` +class TPipeeq + super TokenOperator +end + +# The operator `^=` +class TCareteq + super TokenOperator +end + +# The operator `&=` +class TAmpeq + super TokenOperator +end + # The operator `<<=` class TLleq super TokenOperator @@ -800,11 +844,31 @@ class TSlash super TokenOperator end -# The operator `+% +# The operator `%` class TPercent super TokenOperator end +# The operator `|` +class TPipe + super TokenOperator +end + +# The operator `^` +class TCaret + super TokenOperator +end + +# The operator `&` +class TAmp + super TokenOperator +end + +# The operator `~` +class TTilde + super TokenOperator +end + # The operator `==` class TEq super TokenOperator @@ -860,6 +924,11 @@ class TAt super Token end +# The symbol `;` +class TSemi + super Token +end + # A class (or formal type) identifier. They start with an uppercase. class TClassid super Token @@ -906,6 +975,36 @@ class THexNumber super TokenLiteral end +# A literal binary integer +class TBinNumber + super TokenLiteral +end + +# A literal octal integer +class TOctNumber + super TokenLiteral +end + +# A literal decimal byte +class TBytenum + super TokenLiteral +end + +# A literal hexadecimal byte +class THexBytenum + super TokenLiteral +end + +# A literal binary byte +class TBinBytenum + super TokenLiteral +end + +# A literal octal byte +class TOctBytenum + super TokenLiteral +end + # A literal floating point number class TFloat super TokenLiteral @@ -1102,9 +1201,15 @@ class AStdClassdef # The name of the class var n_id: nullable TClassid = null is writable + # The `[` symbol + var n_obra: nullable TObra = null is writable + # The list of formal parameter types var n_formaldefs = new ANodes[AFormaldef](self) + # The `]` symbol + var n_cbra: nullable TCbra = null is writable + # The extern block code var n_extern_code_block: nullable AExternCodeBlock = null is writable @@ -1200,21 +1305,30 @@ end class AAttrPropdef super APropdef - # The identifier for a old-style attribute (null if new-style) + # The `var` keyword var n_kwvar: TKwvar is writable, noinit - # The identifier for a new-style attribute (null if old-style) + # The identifier for a new-style attribute var n_id2: TId is writable, noinit # The declared type of the attribute var n_type: nullable AType = null is writable + # The `=` symbol + var n_assign: nullable TAssign = null is writable + # The initial value, if any (set with `=`) var n_expr: nullable AExpr = null is writable + # The `do` keyword + var n_kwdo: nullable TKwdo = null is writable + # The initial value, if any (set with `do return`) var n_block: nullable AExpr = null is writable + # The `end` keyword + var n_kwend: nullable TKwend = null is writable + redef fun hot_location do return n_id2.location @@ -1240,9 +1354,15 @@ class AMethPropdef # The signature of the method, if any var n_signature: nullable ASignature = null is writable + # The `do` keyword + var n_kwdo: nullable TKwdo = null is writable + # The body (in Nit) of the method, if any var n_block: nullable AExpr = null is writable + # The `end` keyword + var n_kwend: nullable TKwend = null is writable + # The list of declared callbacks (for extern methods) var n_extern_calls: nullable AExternCalls = null is writable @@ -1460,7 +1580,26 @@ end # A method name `%` class APercentMethid super AOperatorMethid +end + +# A method name `|` +class APipeMethid + super AOperatorMethid +end + +# A method name `^` +class ACaretMethid + super AOperatorMethid +end + +# A method name `&` +class AAmpMethid + super AOperatorMethid +end +# A method name `~` +class ATildeMethid + super AOperatorMethid end # A method name `==` @@ -1584,8 +1723,14 @@ class AType # The name of the class or of the formal type var n_id: TClassid is writable, noinit + # The opening bracket + var n_obra: nullable TObra = null is writable + # Type arguments for a generic type var n_types = new ANodes[AType](self) + + # The closing bracket + var n_cbra: nullable TCbra = null is writable end # A label at the end of a block or in a break/continue statement. eg `label x` @@ -1712,9 +1857,15 @@ class AIfExpr # The expression used as the condition of the `if` var n_expr: AExpr is writable, noinit + # The `then` keyword + var n_kwthen: TKwthen is writable, noinit + # The body of the `then` part var n_then: nullable AExpr = null is writable + # The `else` keyword + var n_kwelse: nullable TKwelse = null is writable + # The body of the `else` part var n_else: nullable AExpr = null is writable end @@ -1783,6 +1934,9 @@ class AForExpr # The list of name of the automatic variables var n_ids = new ANodes[TId](self) + # The `in` keyword + var n_kwin: TKwin is writable, noinit + # The expression used as the collection to iterate on var n_expr: AExpr is writable, noinit @@ -1824,6 +1978,9 @@ class AAssertExpr # The expression used as the condition of the `assert` var n_expr: AExpr is writable, noinit + # The `else` keyword + var n_kwelse: nullable TKwelse = null is writable + # The body to execute when the assert fails var n_else: nullable AExpr = null is writable end @@ -2041,20 +2198,51 @@ class APercentExpr redef fun operator do return "%" end -# A unary minus expression. eg `-x` -class AUminusExpr +# A `|` expression +class APipeExpr + super ABinopExpr + redef fun operator do return "|" +end + +# A `^` expression +class ACaretExpr + super ABinopExpr + redef fun operator do return "^" +end + +# A `&` expression +class AAmpExpr + super ABinopExpr + redef fun operator do return "&" +end + +# A unary operation on a method +class AUnaryopExpr super ASendExpr - # The `-` symbol - var n_minus: TMinus is writable, noinit + # The operator + var n_op: Token is writable, noinit + + # The name of the operator (eg '+') + fun operator: String is abstract +end + +# A unary minus expression. eg `-x` +class AUminusExpr + super AUnaryopExpr + redef fun operator do return "-" end # A unary plus expression. eg `+x` class AUplusExpr - super ASendExpr + super AUnaryopExpr + redef fun operator do return "+" +end - # The `+` symbol - var n_plus: TPlus is writable, noinit +# A unary `~` expression +class AUtildeExpr + super AUnaryopExpr + redef fun operator do return "~" end # An explicit instantiation. eg `new T` @@ -2229,7 +2417,10 @@ abstract class ARangeExpr # The left (lower) element of the range var n_expr: AExpr is writable, noinit - # The right (uppr) element of the range + # The `..` + var n_dotdot: TDotdot is writable, noinit + + # The right (upper) element of the range var n_expr2: AExpr is writable, noinit end @@ -2330,6 +2521,59 @@ class AHexIntExpr var n_hex_number: THexNumber is writable, noinit end +# An integer literal in binary format +class ABinIntExpr + super AIntExpr + + # The binary token + var n_bin_number: TBinNumber is writable, noinit +end + +# An integer literal in octal format +class AOctIntExpr + super AIntExpr + + # The octal token + var n_oct_number: TOctNumber is writable, noinit +end + +# An byte literal +class AByteExpr + super AExpr +end + +# An byte literal in decimal format +class ADecByteExpr + super AByteExpr + + # The decimal token + var n_bytenum: TBytenum is writable, noinit +end + +# An byte literal in hexadecimal format +class AHexByteExpr + super AByteExpr + + # The hexadecimal token + var n_hex_bytenum: THexBytenum is writable, noinit +end + +# An byte literal in binary format +class ABinByteExpr + super AByteExpr + + # The binary token + var n_bin_bytenum: TBinBytenum is writable, noinit +end + +# An byte literal in octal format +class AOctByteExpr + super AByteExpr + + # The octal token + var n_oct_bytenum: TOctBytenum is writable, noinit +end + # A float literal class AFloatExpr super AExpr @@ -2452,6 +2696,20 @@ class AVarargExpr var n_dotdotdot: TDotdotdot is writable, noinit end +# An named notation used to pass an expression by name in a parameter +class ANamedargExpr + super AExpr + + # The name of the argument + var n_id: TId is writable, noinit + + # The `=` synbol + var n_assign: TAssign is writable, noinit + + # The passed expression + var n_expr: AExpr is writable, noinit +end + # A list of expression separated with commas (arguments for instance) class AManyExpr super AExpr @@ -2594,6 +2852,27 @@ class AStarstarAssignOp redef fun operator do return "**" end +# A `|=` assignment operation +class APipeAssignOp + super AAssignOp + + redef fun operator do return "|" +end + +# A `^=` assignment operation +class ACaretAssignOp + super AAssignOp + + redef fun operator do return "^" +end + +# A `&=` assignment operation +class AAmpAssignOp + super AAssignOp + + redef fun operator do return "&" +end + # A `<<=` assignment operation class ALlAssignOp super AAssignOp @@ -2677,6 +2956,9 @@ end class AAnnotations super Prod + # The `is` keyword, for *is* annotations + var n_kwis: nullable TKwis = null is writable + # The `@` symbol, for *at* annotations var n_at: nullable TAt = null is writable @@ -2688,6 +2970,9 @@ class AAnnotations # The closing parenthesis in *at* annotations var n_cpar: nullable TCpar = null is writable + + # The `end` keyword, for *is* annotations + var n_kwend: nullable TKwend = null is writable end # A single annotation