skip shebang in the first line
Something like this works now:
===
% PATH="./bin:$PATH" ./sum.ktscript 31 21
31 + 21 = 52
% cat sum.ktscript
#!/usr/bin/env kotlin -script
val a = Integer.parseInt(args[0])
val b = Integer.parseInt(args[1])
println("$a + $b = ${a + b}")
===
This commit is contained in:
@@ -24,7 +24,10 @@
|
|||||||
jvmargs="-Xmx512M"
|
jvmargs="-Xmx512M"
|
||||||
fork="true"
|
fork="true"
|
||||||
failonerror="true">
|
failonerror="true">
|
||||||
|
<arg value="-charat"/>
|
||||||
|
<!-- generates invalid code when %line option is on
|
||||||
<arg value="-sliceandcharat"/>
|
<arg value="-sliceandcharat"/>
|
||||||
|
-->
|
||||||
<arg value="-skel"/>
|
<arg value="-skel"/>
|
||||||
<arg value="@{skeleton}"/>
|
<arg value="@{skeleton}"/>
|
||||||
<arg value="-d"/>
|
<arg value="-d"/>
|
||||||
|
|||||||
+2
-1
@@ -55,7 +55,8 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
|
|||||||
|
|
||||||
if (previousToken == JetTokens.BLOCK_COMMENT
|
if (previousToken == JetTokens.BLOCK_COMMENT
|
||||||
|| previousToken == JetTokens.DOC_COMMENT
|
|| previousToken == JetTokens.DOC_COMMENT
|
||||||
|| previousToken == JetTokens.EOL_COMMENT) {
|
|| previousToken == JetTokens.EOL_COMMENT
|
||||||
|
|| previousToken == SHEBANG_COMMENT) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import org.jetbrains.jet.lexer.JetTokens;
|
|||||||
%unicode
|
%unicode
|
||||||
%class _JetLexer
|
%class _JetLexer
|
||||||
%implements FlexLexer
|
%implements FlexLexer
|
||||||
|
%column
|
||||||
|
%line
|
||||||
|
|
||||||
%{
|
%{
|
||||||
private static final class State {
|
private static final class State {
|
||||||
@@ -31,6 +33,9 @@ import org.jetbrains.jet.lexer.JetTokens;
|
|||||||
|
|
||||||
private final Stack<State> states = new Stack<State>();
|
private final Stack<State> states = new Stack<State>();
|
||||||
private int lBraceCount;
|
private int lBraceCount;
|
||||||
|
|
||||||
|
private int yyline;
|
||||||
|
private int yycolumn;
|
||||||
|
|
||||||
private int commentStart;
|
private int commentStart;
|
||||||
private int commentDepth;
|
private int commentDepth;
|
||||||
@@ -84,6 +89,7 @@ FIELD_IDENTIFIER = \${IDENTIFIER}
|
|||||||
LABEL_IDENTIFIER = \@{IDENTIFIER}
|
LABEL_IDENTIFIER = \@{IDENTIFIER}
|
||||||
|
|
||||||
EOL_COMMENT="/""/"[^\n]*
|
EOL_COMMENT="/""/"[^\n]*
|
||||||
|
SHEBANG_COMMENT="#!"[^\n]*
|
||||||
|
|
||||||
INTEGER_LITERAL={DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BIN_INTEGER_LITERAL}
|
INTEGER_LITERAL={DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BIN_INTEGER_LITERAL}
|
||||||
DECIMAL_INTEGER_LITERAL=(0|([1-9]({DIGIT})*))
|
DECIMAL_INTEGER_LITERAL=(0|([1-9]({DIGIT})*))
|
||||||
@@ -212,6 +218,15 @@ LONG_TEMPLATE_ENTRY_END=\}
|
|||||||
({WHITE_SPACE_CHAR})+ { return JetTokens.WHITE_SPACE; }
|
({WHITE_SPACE_CHAR})+ { return JetTokens.WHITE_SPACE; }
|
||||||
|
|
||||||
{EOL_COMMENT} { return JetTokens.EOL_COMMENT; }
|
{EOL_COMMENT} { return JetTokens.EOL_COMMENT; }
|
||||||
|
{SHEBANG_COMMENT} {
|
||||||
|
if (yyline == 0 && yycolumn == 0) {
|
||||||
|
return JetTokens.SHEBANG_COMMENT;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
yypushback(yylength() - 1);
|
||||||
|
return JetTokens.HASH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{INTEGER_LITERAL}\.\. { yypushback(2); return JetTokens.INTEGER_LITERAL; }
|
{INTEGER_LITERAL}\.\. { yypushback(2); return JetTokens.INTEGER_LITERAL; }
|
||||||
{INTEGER_LITERAL} { return JetTokens.INTEGER_LITERAL; }
|
{INTEGER_LITERAL} { return JetTokens.INTEGER_LITERAL; }
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public interface JetTokens {
|
|||||||
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
|
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
|
||||||
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
|
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
|
||||||
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
|
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
|
||||||
|
JetToken SHEBANG_COMMENT = new JetToken("SHEBANG_COMMENT");
|
||||||
|
|
||||||
IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
|
IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
|
||||||
|
|
||||||
@@ -180,9 +181,9 @@ public interface JetTokens {
|
|||||||
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
|
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
|
||||||
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
|
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
|
||||||
);
|
);
|
||||||
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
|
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
|
||||||
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
||||||
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
|
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
|
||||||
|
|
||||||
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
|
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
|
||||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
|
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env kotlin
|
||||||
|
|
||||||
|
println(args)
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
JetFile: Shebang.ktscript
|
||||||
|
PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
SCRIPT
|
||||||
|
BLOCK
|
||||||
|
CALL_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('println')
|
||||||
|
VALUE_ARGUMENT_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
VALUE_ARGUMENT
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('args')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
println(1); #!/usr
|
||||||
|
|
||||||
|
#!/hi
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
JetFile: ShebangIncorrect.ktscript
|
||||||
|
SCRIPT
|
||||||
|
BLOCK
|
||||||
|
CALL_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('println')
|
||||||
|
VALUE_ARGUMENT_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
VALUE_ARGUMENT
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BINARY_EXPRESSION
|
||||||
|
TUPLE
|
||||||
|
PsiElement(HASH)('#')
|
||||||
|
PsiElement(EXCL)('!')
|
||||||
|
PsiErrorElement:Expecting an expression
|
||||||
|
<empty list>
|
||||||
|
OPERATION_REFERENCE
|
||||||
|
PsiElement(DIV)('/')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('usr')
|
||||||
|
PsiWhiteSpace('\n\n')
|
||||||
|
BINARY_EXPRESSION
|
||||||
|
TUPLE
|
||||||
|
PsiElement(HASH)('#')
|
||||||
|
PsiElement(EXCL)('!')
|
||||||
|
PsiErrorElement:Expecting an expression
|
||||||
|
<empty list>
|
||||||
|
OPERATION_REFERENCE
|
||||||
|
PsiElement(DIV)('/')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('hi')
|
||||||
@@ -82,6 +82,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
|||||||
keys.put(JetTokens.CHARACTER_LITERAL, JetHighlightingColors.STRING);
|
keys.put(JetTokens.CHARACTER_LITERAL, JetHighlightingColors.STRING);
|
||||||
|
|
||||||
keys.put(JetTokens.EOL_COMMENT, JetHighlightingColors.LINE_COMMENT);
|
keys.put(JetTokens.EOL_COMMENT, JetHighlightingColors.LINE_COMMENT);
|
||||||
|
keys.put(JetTokens.SHEBANG_COMMENT, JetHighlightingColors.LINE_COMMENT);
|
||||||
keys.put(JetTokens.BLOCK_COMMENT, JetHighlightingColors.BLOCK_COMMENT);
|
keys.put(JetTokens.BLOCK_COMMENT, JetHighlightingColors.BLOCK_COMMENT);
|
||||||
keys.put(JetTokens.DOC_COMMENT, JetHighlightingColors.DOC_COMMENT);
|
keys.put(JetTokens.DOC_COMMENT, JetHighlightingColors.DOC_COMMENT);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user