Skip to content

Commit 526abdc

Browse files
author
Andrin Meier
committed
allow conditonal compilation keywords inside logical lines
1 parent c2812d9 commit 526abdc

13 files changed

+1501
-1267
lines changed

Rubberduck.Parsing/Grammar/VBALexer.cs

Lines changed: 640 additions & 612 deletions
Large diffs are not rendered by default.

Rubberduck.Parsing/Grammar/VBALexer.g4

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -234,16 +234,16 @@ NEQ : '<>' | '><';
234234
PLUS : '+';
235235
POW : '^';
236236
RPAREN : ')';
237-
HASHCONST : WS* HASH CONST;
238-
HASHIF : WS* HASH I F;
239-
HASHELSEIF : WS* HASH E L S E I F;
240-
HASHELSE : WS* HASH E L S E;
241-
HASHENDIF : WS* HASH E N D WS* I F;
237+
HASHCONST : WS* HASH CONST WS+;
238+
HASHIF : WS* HASH I F WS+;
239+
HASHELSEIF : WS* HASH E L S E I F WS+;
240+
HASHELSE : WS* HASH E L S E WS* (SINGLEQUOTE (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*)? (NEWLINE | EOF);
241+
HASHENDIF : WS* HASH E N D WS* I F WS* (SINGLEQUOTE (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*)? (NEWLINE | EOF);
242242
L_SQUARE_BRACKET : '[';
243243
R_SQUARE_BRACKET : ']';
244244
STRINGLITERAL : '"' (~["\r\n] | '""')* '"';
245-
OCTLITERAL : '&O' [0-8]+ '&'?;
246-
HEXLITERAL : '&H' [0-9A-F]+ '&'?;
245+
OCTLITERAL : '&O' [0-8]+ INTEGERTYPESUFFIX?;
246+
HEXLITERAL : '&H' [0-9A-F]+ INTEGERTYPESUFFIX?;
247247
FLOATLITERAL :
248248
FLOATINGPOINTLITERAL FLOATINGPOINTTYPESUFFIX?
249249
| DECIMALLITERAL FLOATINGPOINTTYPESUFFIX;

Rubberduck.Parsing/Preprocessing/HexNumberLiteralExpression.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ public HexNumberLiteralExpression(IExpression tokenText)
1414
public override IValue Evaluate()
1515
{
1616
string literal = _tokenText.Evaluate().AsString;
17-
literal = literal.Replace("&H", "").Replace("&", "");
17+
literal = literal.Replace("&H", "")
18+
.Replace("&", "")
19+
.Replace("%", "")
20+
.Replace("^", "");
1821
var number = (decimal)int.Parse(literal, NumberStyles.HexNumber);
1922
return new DecimalValue(number);
2023
}

Rubberduck.Parsing/Preprocessing/NumberLiteralExpression.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@ public NumberLiteralExpression(IExpression tokenText)
1414
public override IValue Evaluate()
1515
{
1616
string literal = _tokenText.Evaluate().AsString;
17-
var number = decimal.Parse(literal.Replace("#", "").Replace("&", "").Replace("@", ""), NumberStyles.Float, CultureInfo.InvariantCulture);
17+
var number = decimal.Parse(literal
18+
.Replace("%", "")
19+
.Replace("&", "")
20+
.Replace("^", "")
21+
.Replace("!", "")
22+
.Replace("#", "")
23+
.Replace("@", "")
24+
, NumberStyles.Float, CultureInfo.InvariantCulture);
1825
return new DecimalValue(number);
1926
}
2027
}

Rubberduck.Parsing/Preprocessing/OctNumberLiteralExpression.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ public OctNumberLiteralExpression(IExpression tokenText)
1414
public override IValue Evaluate()
1515
{
1616
string literal = _tokenText.Evaluate().AsString;
17-
literal = literal.Replace("&O", "").Replace("&", "");
17+
literal = literal.Replace("&O", "")
18+
.Replace("&", "")
19+
.Replace("%", "")
20+
.Replace("^", "");
1821
var number = (decimal)Convert.ToInt32(literal, 8);
1922
return new DecimalValue(number);
2023
}

0 commit comments

Comments
 (0)