mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-12-26 18:29:54 +00:00
Added literal char syntax. Added literal test. Improved voronoi by using inmem arrays.
This commit is contained in:
parent
b4abb9394e
commit
1ee63ce40a
@ -87,6 +87,8 @@ public class AsmFragment {
|
||||
return asmName.replace("#", "_").replace("$", "_");
|
||||
} else if (value instanceof ConstantInteger) {
|
||||
return getAsmNumber(((ConstantInteger) value).getNumber());
|
||||
} else if (value instanceof ConstantChar) {
|
||||
return "'"+((ConstantChar) value).getValue()+"'";
|
||||
} else if (value instanceof ConstantUnary) {
|
||||
ConstantUnary unary = (ConstantUnary) value;
|
||||
Operator operator = unary.getOperator();
|
||||
|
37
src/main/java/dk/camelot64/kickc/model/ConstantChar.java
Normal file
37
src/main/java/dk/camelot64/kickc/model/ConstantChar.java
Normal file
@ -0,0 +1,37 @@
|
||||
package dk.camelot64.kickc.model;
|
||||
|
||||
/**
|
||||
* SSA form constant char value (a byte)
|
||||
*/
|
||||
public class ConstantChar implements ConstantValue {
|
||||
|
||||
private Character value;
|
||||
|
||||
public ConstantChar(Character value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SymbolType getType(ProgramScope scope) {
|
||||
return SymbolTypeBasic.BYTE;
|
||||
}
|
||||
|
||||
public Character getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return toString(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(Program program) {
|
||||
if (program == null) {
|
||||
return "'" + value + "'";
|
||||
} else {
|
||||
return "(" + SymbolTypeBasic.BYTE.getTypeName() + ") " + "'" + value + "'";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -104,6 +104,8 @@ public class SymbolTypeInference {
|
||||
return rInt.getType(programScope);
|
||||
} else if (rValue instanceof ConstantString) {
|
||||
type = SymbolTypeBasic.STRING;
|
||||
} else if (rValue instanceof ConstantChar) {
|
||||
type = SymbolTypeBasic.BYTE;
|
||||
} else if (rValue instanceof ConstantBool) {
|
||||
type = SymbolTypeBasic.BOOLEAN;
|
||||
} else if (rValue instanceof ConstantUnary) {
|
||||
|
@ -72,6 +72,7 @@ expr
|
||||
| NAME #exprId
|
||||
| NUMBER #exprNumber
|
||||
| STRING #exprString
|
||||
| CHAR #exprChar
|
||||
| BOOLEAN #exprBool
|
||||
;
|
||||
|
||||
@ -81,6 +82,7 @@ parameterList
|
||||
|
||||
SIMPLETYPE: 'byte' | 'word' | 'string' | 'boolean' | 'void' ;
|
||||
STRING : '"' ('\\"' | ~'"')* '"';
|
||||
CHAR : '\'' ('\\\'' | ~'\'' ) '\'';
|
||||
BOOLEAN : 'true' | 'false';
|
||||
NUMBER : NUMFLOAT | NUMINT ;
|
||||
NUMFLOAT : BINFLOAT | DECFLOAT | HEXFLOAT;
|
||||
|
@ -42,20 +42,21 @@ T__40=41
|
||||
T__41=42
|
||||
SIMPLETYPE=43
|
||||
STRING=44
|
||||
BOOLEAN=45
|
||||
NUMBER=46
|
||||
NUMFLOAT=47
|
||||
BINFLOAT=48
|
||||
DECFLOAT=49
|
||||
HEXFLOAT=50
|
||||
NUMINT=51
|
||||
BININTEGER=52
|
||||
DECINTEGER=53
|
||||
HEXINTEGER=54
|
||||
NAME=55
|
||||
WS=56
|
||||
COMMENT_LINE=57
|
||||
COMMENT_BLOCK=58
|
||||
CHAR=45
|
||||
BOOLEAN=46
|
||||
NUMBER=47
|
||||
NUMFLOAT=48
|
||||
BINFLOAT=49
|
||||
DECFLOAT=50
|
||||
HEXFLOAT=51
|
||||
NUMINT=52
|
||||
BININTEGER=53
|
||||
DECINTEGER=54
|
||||
HEXINTEGER=55
|
||||
NAME=56
|
||||
WS=57
|
||||
COMMENT_LINE=58
|
||||
COMMENT_BLOCK=59
|
||||
'{'=1
|
||||
'}'=2
|
||||
'('=3
|
||||
|
@ -323,30 +323,6 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitLvaluePar(KickCParser.LvalueParContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprCast(KickCParser.ExprCastContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprCast(KickCParser.ExprCastContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprCall(KickCParser.ExprCallContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprCall(KickCParser.ExprCallContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -371,6 +347,78 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprBinary(KickCParser.ExprBinaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprPostMod(KickCParser.ExprPostModContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprPostMod(KickCParser.ExprPostModContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprUnary(KickCParser.ExprUnaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprUnary(KickCParser.ExprUnaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprNumber(KickCParser.ExprNumberContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprNumber(KickCParser.ExprNumberContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprChar(KickCParser.ExprCharContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprChar(KickCParser.ExprCharContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprCast(KickCParser.ExprCastContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprCast(KickCParser.ExprCastContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprCall(KickCParser.ExprCallContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprCall(KickCParser.ExprCallContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -407,18 +455,6 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprBool(KickCParser.ExprBoolContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprPostMod(KickCParser.ExprPostModContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprPostMod(KickCParser.ExprPostModContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -431,30 +467,6 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprId(KickCParser.ExprIdContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprUnary(KickCParser.ExprUnaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprUnary(KickCParser.ExprUnaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterExprNumber(KickCParser.ExprNumberContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitExprNumber(KickCParser.ExprNumberContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
@ -193,20 +193,6 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLvaluePar(KickCParser.LvalueParContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -221,6 +207,48 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprBinary(KickCParser.ExprBinaryContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprChar(KickCParser.ExprCharContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -242,13 +270,6 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprBool(KickCParser.ExprBoolContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
@ -256,20 +277,6 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprId(KickCParser.ExprIdContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
@ -22,10 +22,10 @@ public class KickCLexer extends Lexer {
|
||||
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
|
||||
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
|
||||
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
|
||||
T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45,
|
||||
NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51,
|
||||
BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57,
|
||||
COMMENT_BLOCK=58;
|
||||
T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45,
|
||||
BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51,
|
||||
NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57,
|
||||
COMMENT_LINE=58, COMMENT_BLOCK=59;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
@ -40,10 +40,10 @@ public class KickCLexer extends Lexer {
|
||||
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
|
||||
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
|
||||
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
|
||||
"T__41", "SIMPLETYPE", "STRING", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT",
|
||||
"DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER",
|
||||
"BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR",
|
||||
"WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||
"T__41", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT",
|
||||
"BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER",
|
||||
"HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START",
|
||||
"NAME_CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||
};
|
||||
|
||||
private static final String[] _LITERAL_NAMES = {
|
||||
@ -57,9 +57,10 @@ public class KickCLexer extends Lexer {
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN",
|
||||
"NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER",
|
||||
"DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||
null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR",
|
||||
"BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT",
|
||||
"BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE",
|
||||
"COMMENT_BLOCK"
|
||||
};
|
||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||
|
||||
@ -119,7 +120,7 @@ public class KickCLexer extends Lexer {
|
||||
public ATN getATN() { return _ATN; }
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2<\u01be\b\1\4\2\t"+
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2=\u01c8\b\1\4\2\t"+
|
||||
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
|
||||
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
|
||||
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
|
||||
@ -127,153 +128,156 @@ public class KickCLexer extends Lexer {
|
||||
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
|
||||
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
|
||||
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
|
||||
"\4>\t>\4?\t?\4@\t@\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6"+
|
||||
"\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3"+
|
||||
"\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16"+
|
||||
"\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24"+
|
||||
"\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31"+
|
||||
"\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37\3\37"+
|
||||
"\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3"+
|
||||
"\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,"+
|
||||
"\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0116\n,\3-\3-"+
|
||||
"\3-\3-\7-\u011c\n-\f-\16-\u011f\13-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\5"+
|
||||
".\u012c\n.\3/\3/\5/\u0130\n/\3\60\3\60\3\60\5\60\u0135\n\60\3\61\3\61"+
|
||||
"\3\61\3\61\3\61\5\61\u013c\n\61\3\61\7\61\u013f\n\61\f\61\16\61\u0142"+
|
||||
"\13\61\3\61\3\61\6\61\u0146\n\61\r\61\16\61\u0147\3\62\7\62\u014b\n\62"+
|
||||
"\f\62\16\62\u014e\13\62\3\62\3\62\6\62\u0152\n\62\r\62\16\62\u0153\3\63"+
|
||||
"\3\63\3\63\3\63\3\63\5\63\u015b\n\63\3\63\7\63\u015e\n\63\f\63\16\63\u0161"+
|
||||
"\13\63\3\63\3\63\6\63\u0165\n\63\r\63\16\63\u0166\3\64\3\64\3\64\5\64"+
|
||||
"\u016c\n\64\3\65\3\65\3\65\6\65\u0171\n\65\r\65\16\65\u0172\3\65\3\65"+
|
||||
"\6\65\u0177\n\65\r\65\16\65\u0178\5\65\u017b\n\65\3\66\6\66\u017e\n\66"+
|
||||
"\r\66\16\66\u017f\3\67\3\67\3\67\3\67\3\67\5\67\u0187\n\67\3\67\6\67\u018a"+
|
||||
"\n\67\r\67\16\67\u018b\38\38\39\39\3:\3:\3;\3;\7;\u0196\n;\f;\16;\u0199"+
|
||||
"\13;\3<\3<\3=\3=\3>\6>\u01a0\n>\r>\16>\u01a1\3>\3>\3?\3?\3?\3?\7?\u01aa"+
|
||||
"\n?\f?\16?\u01ad\13?\3?\3?\3@\3@\3@\3@\7@\u01b5\n@\f@\16@\u01b8\13@\3"+
|
||||
"@\3@\3@\3@\3@\3\u01b6\2A\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f"+
|
||||
"\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+
|
||||
"\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+
|
||||
"c\63e\64g\65i\66k\67m8o\2q\2s\2u9w\2y\2{:};\177<\3\2\13\3\2$$\4\2DDdd"+
|
||||
"\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17"+
|
||||
"\"\"\4\2\f\f\17\17\2\u01d9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2"+
|
||||
"\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2"+
|
||||
"\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3"+
|
||||
"\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2"+
|
||||
"\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67"+
|
||||
"\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2"+
|
||||
"\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2"+
|
||||
"\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]"+
|
||||
"\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2"+
|
||||
"\2\2\2k\3\2\2\2\2m\3\2\2\2\2u\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2"+
|
||||
"\2\2\3\u0081\3\2\2\2\5\u0083\3\2\2\2\7\u0085\3\2\2\2\t\u0087\3\2\2\2\13"+
|
||||
"\u0089\3\2\2\2\r\u008f\3\2\2\2\17\u0091\3\2\2\2\21\u0093\3\2\2\2\23\u0096"+
|
||||
"\3\2\2\2\25\u009b\3\2\2\2\27\u00a1\3\2\2\2\31\u00a4\3\2\2\2\33\u00a8\3"+
|
||||
"\2\2\2\35\u00af\3\2\2\2\37\u00b1\3\2\2\2!\u00b4\3\2\2\2#\u00b6\3\2\2\2"+
|
||||
"%\u00b8\3\2\2\2\'\u00ba\3\2\2\2)\u00bc\3\2\2\2+\u00bf\3\2\2\2-\u00c2\3"+
|
||||
"\2\2\2/\u00c4\3\2\2\2\61\u00c6\3\2\2\2\63\u00ca\3\2\2\2\65\u00cc\3\2\2"+
|
||||
"\2\67\u00ce\3\2\2\29\u00d1\3\2\2\2;\u00d4\3\2\2\2=\u00d6\3\2\2\2?\u00d9"+
|
||||
"\3\2\2\2A\u00dc\3\2\2\2C\u00df\3\2\2\2E\u00e1\3\2\2\2G\u00e4\3\2\2\2I"+
|
||||
"\u00e7\3\2\2\2K\u00ea\3\2\2\2M\u00ed\3\2\2\2O\u00ef\3\2\2\2Q\u00f3\3\2"+
|
||||
"\2\2S\u00f6\3\2\2\2U\u00f9\3\2\2\2W\u0115\3\2\2\2Y\u0117\3\2\2\2[\u012b"+
|
||||
"\3\2\2\2]\u012f\3\2\2\2_\u0134\3\2\2\2a\u013b\3\2\2\2c\u014c\3\2\2\2e"+
|
||||
"\u015a\3\2\2\2g\u016b\3\2\2\2i\u017a\3\2\2\2k\u017d\3\2\2\2m\u0186\3\2"+
|
||||
"\2\2o\u018d\3\2\2\2q\u018f\3\2\2\2s\u0191\3\2\2\2u\u0193\3\2\2\2w\u019a"+
|
||||
"\3\2\2\2y\u019c\3\2\2\2{\u019f\3\2\2\2}\u01a5\3\2\2\2\177\u01b0\3\2\2"+
|
||||
"\2\u0081\u0082\7}\2\2\u0082\4\3\2\2\2\u0083\u0084\7\177\2\2\u0084\6\3"+
|
||||
"\2\2\2\u0085\u0086\7*\2\2\u0086\b\3\2\2\2\u0087\u0088\7+\2\2\u0088\n\3"+
|
||||
"\2\2\2\u0089\u008a\7e\2\2\u008a\u008b\7q\2\2\u008b\u008c\7p\2\2\u008c"+
|
||||
"\u008d\7u\2\2\u008d\u008e\7v\2\2\u008e\f\3\2\2\2\u008f\u0090\7?\2\2\u0090"+
|
||||
"\16\3\2\2\2\u0091\u0092\7=\2\2\u0092\20\3\2\2\2\u0093\u0094\7k\2\2\u0094"+
|
||||
"\u0095\7h\2\2\u0095\22\3\2\2\2\u0096\u0097\7g\2\2\u0097\u0098\7n\2\2\u0098"+
|
||||
"\u0099\7u\2\2\u0099\u009a\7g\2\2\u009a\24\3\2\2\2\u009b\u009c\7y\2\2\u009c"+
|
||||
"\u009d\7j\2\2\u009d\u009e\7k\2\2\u009e\u009f\7n\2\2\u009f\u00a0\7g\2\2"+
|
||||
"\u00a0\26\3\2\2\2\u00a1\u00a2\7f\2\2\u00a2\u00a3\7q\2\2\u00a3\30\3\2\2"+
|
||||
"\2\u00a4\u00a5\7h\2\2\u00a5\u00a6\7q\2\2\u00a6\u00a7\7t\2\2\u00a7\32\3"+
|
||||
"\2\2\2\u00a8\u00a9\7t\2\2\u00a9\u00aa\7g\2\2\u00aa\u00ab\7v\2\2\u00ab"+
|
||||
"\u00ac\7w\2\2\u00ac\u00ad\7t\2\2\u00ad\u00ae\7p\2\2\u00ae\34\3\2\2\2\u00af"+
|
||||
"\u00b0\7<\2\2\u00b0\36\3\2\2\2\u00b1\u00b2\7\60\2\2\u00b2\u00b3\7\60\2"+
|
||||
"\2\u00b3 \3\2\2\2\u00b4\u00b5\7.\2\2\u00b5\"\3\2\2\2\u00b6\u00b7\7,\2"+
|
||||
"\2\u00b7$\3\2\2\2\u00b8\u00b9\7]\2\2\u00b9&\3\2\2\2\u00ba\u00bb\7_\2\2"+
|
||||
"\u00bb(\3\2\2\2\u00bc\u00bd\7/\2\2\u00bd\u00be\7/\2\2\u00be*\3\2\2\2\u00bf"+
|
||||
"\u00c0\7-\2\2\u00c0\u00c1\7-\2\2\u00c1,\3\2\2\2\u00c2\u00c3\7-\2\2\u00c3"+
|
||||
".\3\2\2\2\u00c4\u00c5\7/\2\2\u00c5\60\3\2\2\2\u00c6\u00c7\7p\2\2\u00c7"+
|
||||
"\u00c8\7q\2\2\u00c8\u00c9\7v\2\2\u00c9\62\3\2\2\2\u00ca\u00cb\7#\2\2\u00cb"+
|
||||
"\64\3\2\2\2\u00cc\u00cd\7(\2\2\u00cd\66\3\2\2\2\u00ce\u00cf\7@\2\2\u00cf"+
|
||||
"\u00d0\7@\2\2\u00d08\3\2\2\2\u00d1\u00d2\7>\2\2\u00d2\u00d3\7>\2\2\u00d3"+
|
||||
":\3\2\2\2\u00d4\u00d5\7\61\2\2\u00d5<\3\2\2\2\u00d6\u00d7\7?\2\2\u00d7"+
|
||||
"\u00d8\7?\2\2\u00d8>\3\2\2\2\u00d9\u00da\7#\2\2\u00da\u00db\7?\2\2\u00db"+
|
||||
"@\3\2\2\2\u00dc\u00dd\7>\2\2\u00dd\u00de\7@\2\2\u00deB\3\2\2\2\u00df\u00e0"+
|
||||
"\7>\2\2\u00e0D\3\2\2\2\u00e1\u00e2\7>\2\2\u00e2\u00e3\7?\2\2\u00e3F\3"+
|
||||
"\2\2\2\u00e4\u00e5\7?\2\2\u00e5\u00e6\7>\2\2\u00e6H\3\2\2\2\u00e7\u00e8"+
|
||||
"\7@\2\2\u00e8\u00e9\7?\2\2\u00e9J\3\2\2\2\u00ea\u00eb\7?\2\2\u00eb\u00ec"+
|
||||
"\7@\2\2\u00ecL\3\2\2\2\u00ed\u00ee\7@\2\2\u00eeN\3\2\2\2\u00ef\u00f0\7"+
|
||||
"c\2\2\u00f0\u00f1\7p\2\2\u00f1\u00f2\7f\2\2\u00f2P\3\2\2\2\u00f3\u00f4"+
|
||||
"\7(\2\2\u00f4\u00f5\7(\2\2\u00f5R\3\2\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8"+
|
||||
"\7t\2\2\u00f8T\3\2\2\2\u00f9\u00fa\7~\2\2\u00fa\u00fb\7~\2\2\u00fbV\3"+
|
||||
"\2\2\2\u00fc\u00fd\7d\2\2\u00fd\u00fe\7{\2\2\u00fe\u00ff\7v\2\2\u00ff"+
|
||||
"\u0116\7g\2\2\u0100\u0101\7y\2\2\u0101\u0102\7q\2\2\u0102\u0103\7t\2\2"+
|
||||
"\u0103\u0116\7f\2\2\u0104\u0105\7u\2\2\u0105\u0106\7v\2\2\u0106\u0107"+
|
||||
"\7t\2\2\u0107\u0108\7k\2\2\u0108\u0109\7p\2\2\u0109\u0116\7i\2\2\u010a"+
|
||||
"\u010b\7d\2\2\u010b\u010c\7q\2\2\u010c\u010d\7q\2\2\u010d\u010e\7n\2\2"+
|
||||
"\u010e\u010f\7g\2\2\u010f\u0110\7c\2\2\u0110\u0116\7p\2\2\u0111\u0112"+
|
||||
"\7x\2\2\u0112\u0113\7q\2\2\u0113\u0114\7k\2\2\u0114\u0116\7f\2\2\u0115"+
|
||||
"\u00fc\3\2\2\2\u0115\u0100\3\2\2\2\u0115\u0104\3\2\2\2\u0115\u010a\3\2"+
|
||||
"\2\2\u0115\u0111\3\2\2\2\u0116X\3\2\2\2\u0117\u011d\7$\2\2\u0118\u0119"+
|
||||
"\7^\2\2\u0119\u011c\7$\2\2\u011a\u011c\n\2\2\2\u011b\u0118\3\2\2\2\u011b"+
|
||||
"\u011a\3\2\2\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2"+
|
||||
"\2\2\u011e\u0120\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0121\7$\2\2\u0121"+
|
||||
"Z\3\2\2\2\u0122\u0123\7v\2\2\u0123\u0124\7t\2\2\u0124\u0125\7w\2\2\u0125"+
|
||||
"\u012c\7g\2\2\u0126\u0127\7h\2\2\u0127\u0128\7c\2\2\u0128\u0129\7n\2\2"+
|
||||
"\u0129\u012a\7u\2\2\u012a\u012c\7g\2\2\u012b\u0122\3\2\2\2\u012b\u0126"+
|
||||
"\3\2\2\2\u012c\\\3\2\2\2\u012d\u0130\5_\60\2\u012e\u0130\5g\64\2\u012f"+
|
||||
"\u012d\3\2\2\2\u012f\u012e\3\2\2\2\u0130^\3\2\2\2\u0131\u0135\5a\61\2"+
|
||||
"\u0132\u0135\5c\62\2\u0133\u0135\5e\63\2\u0134\u0131\3\2\2\2\u0134\u0132"+
|
||||
"\3\2\2\2\u0134\u0133\3\2\2\2\u0135`\3\2\2\2\u0136\u013c\7\'\2\2\u0137"+
|
||||
"\u0138\7\62\2\2\u0138\u013c\7d\2\2\u0139\u013a\7\62\2\2\u013a\u013c\7"+
|
||||
"D\2\2\u013b\u0136\3\2\2\2\u013b\u0137\3\2\2\2\u013b\u0139\3\2\2\2\u013c"+
|
||||
"\u0140\3\2\2\2\u013d\u013f\5o8\2\u013e\u013d\3\2\2\2\u013f\u0142\3\2\2"+
|
||||
"\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0143\3\2\2\2\u0142\u0140"+
|
||||
"\3\2\2\2\u0143\u0145\7\60\2\2\u0144\u0146\5o8\2\u0145\u0144\3\2\2\2\u0146"+
|
||||
"\u0147\3\2\2\2\u0147\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148b\3\2\2\2"+
|
||||
"\u0149\u014b\5q9\2\u014a\u0149\3\2\2\2\u014b\u014e\3\2\2\2\u014c\u014a"+
|
||||
"\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u014c\3\2\2\2\u014f"+
|
||||
"\u0151\7\60\2\2\u0150\u0152\5q9\2\u0151\u0150\3\2\2\2\u0152\u0153\3\2"+
|
||||
"\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154d\3\2\2\2\u0155\u015b"+
|
||||
"\7&\2\2\u0156\u0157\7\62\2\2\u0157\u015b\7z\2\2\u0158\u0159\7\62\2\2\u0159"+
|
||||
"\u015b\7Z\2\2\u015a\u0155\3\2\2\2\u015a\u0156\3\2\2\2\u015a\u0158\3\2"+
|
||||
"\2\2\u015b\u015f\3\2\2\2\u015c\u015e\5s:\2\u015d\u015c\3\2\2\2\u015e\u0161"+
|
||||
"\3\2\2\2\u015f\u015d\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u0162\3\2\2\2\u0161"+
|
||||
"\u015f\3\2\2\2\u0162\u0164\7\60\2\2\u0163\u0165\5s:\2\u0164\u0163\3\2"+
|
||||
"\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167"+
|
||||
"f\3\2\2\2\u0168\u016c\5k\66\2\u0169\u016c\5m\67\2\u016a\u016c\5i\65\2"+
|
||||
"\u016b\u0168\3\2\2\2\u016b\u0169\3\2\2\2\u016b\u016a\3\2\2\2\u016ch\3"+
|
||||
"\2\2\2\u016d\u016e\7\62\2\2\u016e\u0170\t\3\2\2\u016f\u0171\5o8\2\u0170"+
|
||||
"\u016f\3\2\2\2\u0171\u0172\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2"+
|
||||
"\2\2\u0173\u017b\3\2\2\2\u0174\u0176\7\'\2\2\u0175\u0177\5o8\2\u0176\u0175"+
|
||||
"\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0176\3\2\2\2\u0178\u0179\3\2\2\2\u0179"+
|
||||
"\u017b\3\2\2\2\u017a\u016d\3\2\2\2\u017a\u0174\3\2\2\2\u017bj\3\2\2\2"+
|
||||
"\u017c\u017e\5q9\2\u017d\u017c\3\2\2\2\u017e\u017f\3\2\2\2\u017f\u017d"+
|
||||
"\3\2\2\2\u017f\u0180\3\2\2\2\u0180l\3\2\2\2\u0181\u0187\7&\2\2\u0182\u0183"+
|
||||
"\7\62\2\2\u0183\u0187\7z\2\2\u0184\u0185\7\62\2\2\u0185\u0187\7Z\2\2\u0186"+
|
||||
"\u0181\3\2\2\2\u0186\u0182\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u0189\3\2"+
|
||||
"\2\2\u0188\u018a\5s:\2\u0189\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u0189"+
|
||||
"\3\2\2\2\u018b\u018c\3\2\2\2\u018cn\3\2\2\2\u018d\u018e\t\4\2\2\u018e"+
|
||||
"p\3\2\2\2\u018f\u0190\t\5\2\2\u0190r\3\2\2\2\u0191\u0192\t\6\2\2\u0192"+
|
||||
"t\3\2\2\2\u0193\u0197\5w<\2\u0194\u0196\5y=\2\u0195\u0194\3\2\2\2\u0196"+
|
||||
"\u0199\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198v\3\2\2\2"+
|
||||
"\u0199\u0197\3\2\2\2\u019a\u019b\t\7\2\2\u019bx\3\2\2\2\u019c\u019d\t"+
|
||||
"\b\2\2\u019dz\3\2\2\2\u019e\u01a0\t\t\2\2\u019f\u019e\3\2\2\2\u01a0\u01a1"+
|
||||
"\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3"+
|
||||
"\u01a4\b>\2\2\u01a4|\3\2\2\2\u01a5\u01a6\7\61\2\2\u01a6\u01a7\7\61\2\2"+
|
||||
"\u01a7\u01ab\3\2\2\2\u01a8\u01aa\n\n\2\2\u01a9\u01a8\3\2\2\2\u01aa\u01ad"+
|
||||
"\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2\u01ad"+
|
||||
"\u01ab\3\2\2\2\u01ae\u01af\b?\2\2\u01af~\3\2\2\2\u01b0\u01b1\7\61\2\2"+
|
||||
"\u01b1\u01b2\7,\2\2\u01b2\u01b6\3\2\2\2\u01b3\u01b5\13\2\2\2\u01b4\u01b3"+
|
||||
"\3\2\2\2\u01b5\u01b8\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b6\u01b4\3\2\2\2\u01b7"+
|
||||
"\u01b9\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01ba\7,\2\2\u01ba\u01bb\7\61"+
|
||||
"\2\2\u01bb\u01bc\3\2\2\2\u01bc\u01bd\b@\2\2\u01bd\u0080\3\2\2\2\34\2\u0115"+
|
||||
"\u011b\u011d\u012b\u012f\u0134\u013b\u0140\u0147\u014c\u0153\u015a\u015f"+
|
||||
"\u0166\u016b\u0172\u0178\u017a\u017f\u0186\u018b\u0197\u01a1\u01ab\u01b6"+
|
||||
"\3\b\2\2";
|
||||
"\4>\t>\4?\t?\4@\t@\4A\tA\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3"+
|
||||
"\6\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3"+
|
||||
"\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16"+
|
||||
"\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+
|
||||
"\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31"+
|
||||
"\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37"+
|
||||
"\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&"+
|
||||
"\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3"+
|
||||
",\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0118\n,\3"+
|
||||
"-\3-\3-\3-\7-\u011e\n-\f-\16-\u0121\13-\3-\3-\3.\3.\3.\3.\5.\u0129\n."+
|
||||
"\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\5/\u0136\n/\3\60\3\60\5\60\u013a\n\60"+
|
||||
"\3\61\3\61\3\61\5\61\u013f\n\61\3\62\3\62\3\62\3\62\3\62\5\62\u0146\n"+
|
||||
"\62\3\62\7\62\u0149\n\62\f\62\16\62\u014c\13\62\3\62\3\62\6\62\u0150\n"+
|
||||
"\62\r\62\16\62\u0151\3\63\7\63\u0155\n\63\f\63\16\63\u0158\13\63\3\63"+
|
||||
"\3\63\6\63\u015c\n\63\r\63\16\63\u015d\3\64\3\64\3\64\3\64\3\64\5\64\u0165"+
|
||||
"\n\64\3\64\7\64\u0168\n\64\f\64\16\64\u016b\13\64\3\64\3\64\6\64\u016f"+
|
||||
"\n\64\r\64\16\64\u0170\3\65\3\65\3\65\5\65\u0176\n\65\3\66\3\66\3\66\6"+
|
||||
"\66\u017b\n\66\r\66\16\66\u017c\3\66\3\66\6\66\u0181\n\66\r\66\16\66\u0182"+
|
||||
"\5\66\u0185\n\66\3\67\6\67\u0188\n\67\r\67\16\67\u0189\38\38\38\38\38"+
|
||||
"\58\u0191\n8\38\68\u0194\n8\r8\168\u0195\39\39\3:\3:\3;\3;\3<\3<\7<\u01a0"+
|
||||
"\n<\f<\16<\u01a3\13<\3=\3=\3>\3>\3?\6?\u01aa\n?\r?\16?\u01ab\3?\3?\3@"+
|
||||
"\3@\3@\3@\7@\u01b4\n@\f@\16@\u01b7\13@\3@\3@\3A\3A\3A\3A\7A\u01bf\nA\f"+
|
||||
"A\16A\u01c2\13A\3A\3A\3A\3A\3A\3\u01c0\2B\3\3\5\4\7\5\t\6\13\7\r\b\17"+
|
||||
"\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+"+
|
||||
"\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+"+
|
||||
"U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q\2s\2u\2w:y\2{\2};\177<\u0081"+
|
||||
"=\3\2\f\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6"+
|
||||
"\2\62;C\\aac|\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2\u01e4\2\3\3\2\2\2\2\5"+
|
||||
"\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+
|
||||
"\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33"+
|
||||
"\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2"+
|
||||
"\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+
|
||||
"\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2"+
|
||||
"\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K"+
|
||||
"\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2"+
|
||||
"\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2"+
|
||||
"\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2w"+
|
||||
"\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\3\u0083\3\2\2\2\5\u0085"+
|
||||
"\3\2\2\2\7\u0087\3\2\2\2\t\u0089\3\2\2\2\13\u008b\3\2\2\2\r\u0091\3\2"+
|
||||
"\2\2\17\u0093\3\2\2\2\21\u0095\3\2\2\2\23\u0098\3\2\2\2\25\u009d\3\2\2"+
|
||||
"\2\27\u00a3\3\2\2\2\31\u00a6\3\2\2\2\33\u00aa\3\2\2\2\35\u00b1\3\2\2\2"+
|
||||
"\37\u00b3\3\2\2\2!\u00b6\3\2\2\2#\u00b8\3\2\2\2%\u00ba\3\2\2\2\'\u00bc"+
|
||||
"\3\2\2\2)\u00be\3\2\2\2+\u00c1\3\2\2\2-\u00c4\3\2\2\2/\u00c6\3\2\2\2\61"+
|
||||
"\u00c8\3\2\2\2\63\u00cc\3\2\2\2\65\u00ce\3\2\2\2\67\u00d0\3\2\2\29\u00d3"+
|
||||
"\3\2\2\2;\u00d6\3\2\2\2=\u00d8\3\2\2\2?\u00db\3\2\2\2A\u00de\3\2\2\2C"+
|
||||
"\u00e1\3\2\2\2E\u00e3\3\2\2\2G\u00e6\3\2\2\2I\u00e9\3\2\2\2K\u00ec\3\2"+
|
||||
"\2\2M\u00ef\3\2\2\2O\u00f1\3\2\2\2Q\u00f5\3\2\2\2S\u00f8\3\2\2\2U\u00fb"+
|
||||
"\3\2\2\2W\u0117\3\2\2\2Y\u0119\3\2\2\2[\u0124\3\2\2\2]\u0135\3\2\2\2_"+
|
||||
"\u0139\3\2\2\2a\u013e\3\2\2\2c\u0145\3\2\2\2e\u0156\3\2\2\2g\u0164\3\2"+
|
||||
"\2\2i\u0175\3\2\2\2k\u0184\3\2\2\2m\u0187\3\2\2\2o\u0190\3\2\2\2q\u0197"+
|
||||
"\3\2\2\2s\u0199\3\2\2\2u\u019b\3\2\2\2w\u019d\3\2\2\2y\u01a4\3\2\2\2{"+
|
||||
"\u01a6\3\2\2\2}\u01a9\3\2\2\2\177\u01af\3\2\2\2\u0081\u01ba\3\2\2\2\u0083"+
|
||||
"\u0084\7}\2\2\u0084\4\3\2\2\2\u0085\u0086\7\177\2\2\u0086\6\3\2\2\2\u0087"+
|
||||
"\u0088\7*\2\2\u0088\b\3\2\2\2\u0089\u008a\7+\2\2\u008a\n\3\2\2\2\u008b"+
|
||||
"\u008c\7e\2\2\u008c\u008d\7q\2\2\u008d\u008e\7p\2\2\u008e\u008f\7u\2\2"+
|
||||
"\u008f\u0090\7v\2\2\u0090\f\3\2\2\2\u0091\u0092\7?\2\2\u0092\16\3\2\2"+
|
||||
"\2\u0093\u0094\7=\2\2\u0094\20\3\2\2\2\u0095\u0096\7k\2\2\u0096\u0097"+
|
||||
"\7h\2\2\u0097\22\3\2\2\2\u0098\u0099\7g\2\2\u0099\u009a\7n\2\2\u009a\u009b"+
|
||||
"\7u\2\2\u009b\u009c\7g\2\2\u009c\24\3\2\2\2\u009d\u009e\7y\2\2\u009e\u009f"+
|
||||
"\7j\2\2\u009f\u00a0\7k\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7g\2\2\u00a2"+
|
||||
"\26\3\2\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7q\2\2\u00a5\30\3\2\2\2\u00a6"+
|
||||
"\u00a7\7h\2\2\u00a7\u00a8\7q\2\2\u00a8\u00a9\7t\2\2\u00a9\32\3\2\2\2\u00aa"+
|
||||
"\u00ab\7t\2\2\u00ab\u00ac\7g\2\2\u00ac\u00ad\7v\2\2\u00ad\u00ae\7w\2\2"+
|
||||
"\u00ae\u00af\7t\2\2\u00af\u00b0\7p\2\2\u00b0\34\3\2\2\2\u00b1\u00b2\7"+
|
||||
"<\2\2\u00b2\36\3\2\2\2\u00b3\u00b4\7\60\2\2\u00b4\u00b5\7\60\2\2\u00b5"+
|
||||
" \3\2\2\2\u00b6\u00b7\7.\2\2\u00b7\"\3\2\2\2\u00b8\u00b9\7,\2\2\u00b9"+
|
||||
"$\3\2\2\2\u00ba\u00bb\7]\2\2\u00bb&\3\2\2\2\u00bc\u00bd\7_\2\2\u00bd("+
|
||||
"\3\2\2\2\u00be\u00bf\7/\2\2\u00bf\u00c0\7/\2\2\u00c0*\3\2\2\2\u00c1\u00c2"+
|
||||
"\7-\2\2\u00c2\u00c3\7-\2\2\u00c3,\3\2\2\2\u00c4\u00c5\7-\2\2\u00c5.\3"+
|
||||
"\2\2\2\u00c6\u00c7\7/\2\2\u00c7\60\3\2\2\2\u00c8\u00c9\7p\2\2\u00c9\u00ca"+
|
||||
"\7q\2\2\u00ca\u00cb\7v\2\2\u00cb\62\3\2\2\2\u00cc\u00cd\7#\2\2\u00cd\64"+
|
||||
"\3\2\2\2\u00ce\u00cf\7(\2\2\u00cf\66\3\2\2\2\u00d0\u00d1\7@\2\2\u00d1"+
|
||||
"\u00d2\7@\2\2\u00d28\3\2\2\2\u00d3\u00d4\7>\2\2\u00d4\u00d5\7>\2\2\u00d5"+
|
||||
":\3\2\2\2\u00d6\u00d7\7\61\2\2\u00d7<\3\2\2\2\u00d8\u00d9\7?\2\2\u00d9"+
|
||||
"\u00da\7?\2\2\u00da>\3\2\2\2\u00db\u00dc\7#\2\2\u00dc\u00dd\7?\2\2\u00dd"+
|
||||
"@\3\2\2\2\u00de\u00df\7>\2\2\u00df\u00e0\7@\2\2\u00e0B\3\2\2\2\u00e1\u00e2"+
|
||||
"\7>\2\2\u00e2D\3\2\2\2\u00e3\u00e4\7>\2\2\u00e4\u00e5\7?\2\2\u00e5F\3"+
|
||||
"\2\2\2\u00e6\u00e7\7?\2\2\u00e7\u00e8\7>\2\2\u00e8H\3\2\2\2\u00e9\u00ea"+
|
||||
"\7@\2\2\u00ea\u00eb\7?\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7?\2\2\u00ed\u00ee"+
|
||||
"\7@\2\2\u00eeL\3\2\2\2\u00ef\u00f0\7@\2\2\u00f0N\3\2\2\2\u00f1\u00f2\7"+
|
||||
"c\2\2\u00f2\u00f3\7p\2\2\u00f3\u00f4\7f\2\2\u00f4P\3\2\2\2\u00f5\u00f6"+
|
||||
"\7(\2\2\u00f6\u00f7\7(\2\2\u00f7R\3\2\2\2\u00f8\u00f9\7q\2\2\u00f9\u00fa"+
|
||||
"\7t\2\2\u00faT\3\2\2\2\u00fb\u00fc\7~\2\2\u00fc\u00fd\7~\2\2\u00fdV\3"+
|
||||
"\2\2\2\u00fe\u00ff\7d\2\2\u00ff\u0100\7{\2\2\u0100\u0101\7v\2\2\u0101"+
|
||||
"\u0118\7g\2\2\u0102\u0103\7y\2\2\u0103\u0104\7q\2\2\u0104\u0105\7t\2\2"+
|
||||
"\u0105\u0118\7f\2\2\u0106\u0107\7u\2\2\u0107\u0108\7v\2\2\u0108\u0109"+
|
||||
"\7t\2\2\u0109\u010a\7k\2\2\u010a\u010b\7p\2\2\u010b\u0118\7i\2\2\u010c"+
|
||||
"\u010d\7d\2\2\u010d\u010e\7q\2\2\u010e\u010f\7q\2\2\u010f\u0110\7n\2\2"+
|
||||
"\u0110\u0111\7g\2\2\u0111\u0112\7c\2\2\u0112\u0118\7p\2\2\u0113\u0114"+
|
||||
"\7x\2\2\u0114\u0115\7q\2\2\u0115\u0116\7k\2\2\u0116\u0118\7f\2\2\u0117"+
|
||||
"\u00fe\3\2\2\2\u0117\u0102\3\2\2\2\u0117\u0106\3\2\2\2\u0117\u010c\3\2"+
|
||||
"\2\2\u0117\u0113\3\2\2\2\u0118X\3\2\2\2\u0119\u011f\7$\2\2\u011a\u011b"+
|
||||
"\7^\2\2\u011b\u011e\7$\2\2\u011c\u011e\n\2\2\2\u011d\u011a\3\2\2\2\u011d"+
|
||||
"\u011c\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2"+
|
||||
"\2\2\u0120\u0122\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\7$\2\2\u0123"+
|
||||
"Z\3\2\2\2\u0124\u0128\7)\2\2\u0125\u0126\7^\2\2\u0126\u0129\7)\2\2\u0127"+
|
||||
"\u0129\n\3\2\2\u0128\u0125\3\2\2\2\u0128\u0127\3\2\2\2\u0129\u012a\3\2"+
|
||||
"\2\2\u012a\u012b\7)\2\2\u012b\\\3\2\2\2\u012c\u012d\7v\2\2\u012d\u012e"+
|
||||
"\7t\2\2\u012e\u012f\7w\2\2\u012f\u0136\7g\2\2\u0130\u0131\7h\2\2\u0131"+
|
||||
"\u0132\7c\2\2\u0132\u0133\7n\2\2\u0133\u0134\7u\2\2\u0134\u0136\7g\2\2"+
|
||||
"\u0135\u012c\3\2\2\2\u0135\u0130\3\2\2\2\u0136^\3\2\2\2\u0137\u013a\5"+
|
||||
"a\61\2\u0138\u013a\5i\65\2\u0139\u0137\3\2\2\2\u0139\u0138\3\2\2\2\u013a"+
|
||||
"`\3\2\2\2\u013b\u013f\5c\62\2\u013c\u013f\5e\63\2\u013d\u013f\5g\64\2"+
|
||||
"\u013e\u013b\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013d\3\2\2\2\u013fb\3"+
|
||||
"\2\2\2\u0140\u0146\7\'\2\2\u0141\u0142\7\62\2\2\u0142\u0146\7d\2\2\u0143"+
|
||||
"\u0144\7\62\2\2\u0144\u0146\7D\2\2\u0145\u0140\3\2\2\2\u0145\u0141\3\2"+
|
||||
"\2\2\u0145\u0143\3\2\2\2\u0146\u014a\3\2\2\2\u0147\u0149\5q9\2\u0148\u0147"+
|
||||
"\3\2\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b"+
|
||||
"\u014d\3\2\2\2\u014c\u014a\3\2\2\2\u014d\u014f\7\60\2\2\u014e\u0150\5"+
|
||||
"q9\2\u014f\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u014f\3\2\2\2\u0151"+
|
||||
"\u0152\3\2\2\2\u0152d\3\2\2\2\u0153\u0155\5s:\2\u0154\u0153\3\2\2\2\u0155"+
|
||||
"\u0158\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0159\3\2"+
|
||||
"\2\2\u0158\u0156\3\2\2\2\u0159\u015b\7\60\2\2\u015a\u015c\5s:\2\u015b"+
|
||||
"\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015b\3\2\2\2\u015d\u015e\3\2"+
|
||||
"\2\2\u015ef\3\2\2\2\u015f\u0165\7&\2\2\u0160\u0161\7\62\2\2\u0161\u0165"+
|
||||
"\7z\2\2\u0162\u0163\7\62\2\2\u0163\u0165\7Z\2\2\u0164\u015f\3\2\2\2\u0164"+
|
||||
"\u0160\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0169\3\2\2\2\u0166\u0168\5u"+
|
||||
";\2\u0167\u0166\3\2\2\2\u0168\u016b\3\2\2\2\u0169\u0167\3\2\2\2\u0169"+
|
||||
"\u016a\3\2\2\2\u016a\u016c\3\2\2\2\u016b\u0169\3\2\2\2\u016c\u016e\7\60"+
|
||||
"\2\2\u016d\u016f\5u;\2\u016e\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u016e"+
|
||||
"\3\2\2\2\u0170\u0171\3\2\2\2\u0171h\3\2\2\2\u0172\u0176\5m\67\2\u0173"+
|
||||
"\u0176\5o8\2\u0174\u0176\5k\66\2\u0175\u0172\3\2\2\2\u0175\u0173\3\2\2"+
|
||||
"\2\u0175\u0174\3\2\2\2\u0176j\3\2\2\2\u0177\u0178\7\62\2\2\u0178\u017a"+
|
||||
"\t\4\2\2\u0179\u017b\5q9\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2\2\2\u017c"+
|
||||
"\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u0185\3\2\2\2\u017e\u0180\7\'"+
|
||||
"\2\2\u017f\u0181\5q9\2\u0180\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0180"+
|
||||
"\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0185\3\2\2\2\u0184\u0177\3\2\2\2\u0184"+
|
||||
"\u017e\3\2\2\2\u0185l\3\2\2\2\u0186\u0188\5s:\2\u0187\u0186\3\2\2\2\u0188"+
|
||||
"\u0189\3\2\2\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018an\3\2\2\2"+
|
||||
"\u018b\u0191\7&\2\2\u018c\u018d\7\62\2\2\u018d\u0191\7z\2\2\u018e\u018f"+
|
||||
"\7\62\2\2\u018f\u0191\7Z\2\2\u0190\u018b\3\2\2\2\u0190\u018c\3\2\2\2\u0190"+
|
||||
"\u018e\3\2\2\2\u0191\u0193\3\2\2\2\u0192\u0194\5u;\2\u0193\u0192\3\2\2"+
|
||||
"\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2\u0195\u0196\3\2\2\2\u0196p"+
|
||||
"\3\2\2\2\u0197\u0198\t\5\2\2\u0198r\3\2\2\2\u0199\u019a\t\6\2\2\u019a"+
|
||||
"t\3\2\2\2\u019b\u019c\t\7\2\2\u019cv\3\2\2\2\u019d\u01a1\5y=\2\u019e\u01a0"+
|
||||
"\5{>\2\u019f\u019e\3\2\2\2\u01a0\u01a3\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1"+
|
||||
"\u01a2\3\2\2\2\u01a2x\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a4\u01a5\t\b\2\2"+
|
||||
"\u01a5z\3\2\2\2\u01a6\u01a7\t\t\2\2\u01a7|\3\2\2\2\u01a8\u01aa\t\n\2\2"+
|
||||
"\u01a9\u01a8\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac"+
|
||||
"\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae\b?\2\2\u01ae~\3\2\2\2\u01af\u01b0"+
|
||||
"\7\61\2\2\u01b0\u01b1\7\61\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b4\n\13\2"+
|
||||
"\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6"+
|
||||
"\3\2\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8\u01b9\b@\2\2\u01b9"+
|
||||
"\u0080\3\2\2\2\u01ba\u01bb\7\61\2\2\u01bb\u01bc\7,\2\2\u01bc\u01c0\3\2"+
|
||||
"\2\2\u01bd\u01bf\13\2\2\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0"+
|
||||
"\u01c1\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01c0\3\2"+
|
||||
"\2\2\u01c3\u01c4\7,\2\2\u01c4\u01c5\7\61\2\2\u01c5\u01c6\3\2\2\2\u01c6"+
|
||||
"\u01c7\bA\2\2\u01c7\u0082\3\2\2\2\35\2\u0117\u011d\u011f\u0128\u0135\u0139"+
|
||||
"\u013e\u0145\u014a\u0151\u0156\u015d\u0164\u0169\u0170\u0175\u017c\u0182"+
|
||||
"\u0184\u0189\u0190\u0195\u01a1\u01ab\u01b5\u01c0\3\b\2\2";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
static {
|
||||
|
@ -42,20 +42,21 @@ T__40=41
|
||||
T__41=42
|
||||
SIMPLETYPE=43
|
||||
STRING=44
|
||||
BOOLEAN=45
|
||||
NUMBER=46
|
||||
NUMFLOAT=47
|
||||
BINFLOAT=48
|
||||
DECFLOAT=49
|
||||
HEXFLOAT=50
|
||||
NUMINT=51
|
||||
BININTEGER=52
|
||||
DECINTEGER=53
|
||||
HEXINTEGER=54
|
||||
NAME=55
|
||||
WS=56
|
||||
COMMENT_LINE=57
|
||||
COMMENT_BLOCK=58
|
||||
CHAR=45
|
||||
BOOLEAN=46
|
||||
NUMBER=47
|
||||
NUMFLOAT=48
|
||||
BINFLOAT=49
|
||||
DECFLOAT=50
|
||||
HEXFLOAT=51
|
||||
NUMINT=52
|
||||
BININTEGER=53
|
||||
DECINTEGER=54
|
||||
HEXINTEGER=55
|
||||
NAME=56
|
||||
WS=57
|
||||
COMMENT_LINE=58
|
||||
COMMENT_BLOCK=59
|
||||
'{'=1
|
||||
'}'=2
|
||||
'('=3
|
||||
|
@ -311,30 +311,6 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitLvaluePar(KickCParser.LvalueParContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprPreMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -359,6 +335,78 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprBinary(KickCParser.ExprBinaryContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprChar}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprChar(KickCParser.ExprCharContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprChar}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprChar(KickCParser.ExprCharContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprPar}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -395,18 +443,6 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprBool(KickCParser.ExprBoolContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprId}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -419,30 +455,6 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprId(KickCParser.ExprIdContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code exprArray}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
|
@ -22,10 +22,10 @@ public class KickCParser extends Parser {
|
||||
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
|
||||
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
|
||||
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
|
||||
T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45,
|
||||
NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51,
|
||||
BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57,
|
||||
COMMENT_BLOCK=58;
|
||||
T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45,
|
||||
BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51,
|
||||
NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57,
|
||||
COMMENT_LINE=58, COMMENT_BLOCK=59;
|
||||
public static final int
|
||||
RULE_file = 0, RULE_stmtSeq = 1, RULE_stmt = 2, RULE_forDeclaration = 3,
|
||||
RULE_forIteration = 4, RULE_parameterListDecl = 5, RULE_parameterDecl = 6,
|
||||
@ -47,9 +47,10 @@ public class KickCParser extends Parser {
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN",
|
||||
"NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER",
|
||||
"DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||
null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR",
|
||||
"BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT",
|
||||
"BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE",
|
||||
"COMMENT_BLOCK"
|
||||
};
|
||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||
|
||||
@ -193,7 +194,7 @@ public class KickCParser extends Parser {
|
||||
setState(30);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) );
|
||||
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) );
|
||||
}
|
||||
}
|
||||
catch (RecognitionException re) {
|
||||
@ -458,7 +459,7 @@ public class KickCParser extends Parser {
|
||||
setState(34);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(33);
|
||||
stmtSeq();
|
||||
@ -496,7 +497,7 @@ public class KickCParser extends Parser {
|
||||
setState(46);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(45);
|
||||
stmtSeq();
|
||||
@ -662,7 +663,7 @@ public class KickCParser extends Parser {
|
||||
setState(102);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(101);
|
||||
expr(0);
|
||||
@ -843,7 +844,7 @@ public class KickCParser extends Parser {
|
||||
setState(119);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(118);
|
||||
expr(0);
|
||||
@ -1121,7 +1122,7 @@ public class KickCParser extends Parser {
|
||||
setState(147);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(146);
|
||||
expr(0);
|
||||
@ -1223,6 +1224,7 @@ public class KickCParser extends Parser {
|
||||
case T__24:
|
||||
case T__25:
|
||||
case STRING:
|
||||
case CHAR:
|
||||
case BOOLEAN:
|
||||
case NUMBER:
|
||||
case NAME:
|
||||
@ -1471,6 +1473,119 @@ public class KickCParser extends Parser {
|
||||
super.copyFrom(ctx);
|
||||
}
|
||||
}
|
||||
public static class ExprPreModContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprPreModContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPreMod(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPreMod(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprPreMod(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprBinaryContext extends ExprContext {
|
||||
public List<ExprContext> expr() {
|
||||
return getRuleContexts(ExprContext.class);
|
||||
}
|
||||
public ExprContext expr(int i) {
|
||||
return getRuleContext(ExprContext.class,i);
|
||||
}
|
||||
public ExprBinaryContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprBinary(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprBinary(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprBinary(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprPostModContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprPostModContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPostMod(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPostMod(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprPostMod(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprUnaryContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprUnaryContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprUnary(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprUnary(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprUnary(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprNumberContext extends ExprContext {
|
||||
public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); }
|
||||
public ExprNumberContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprNumber(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprNumber(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprNumber(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprCharContext extends ExprContext {
|
||||
public TerminalNode CHAR() { return getToken(KickCParser.CHAR, 0); }
|
||||
public ExprCharContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprChar(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprChar(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprChar(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprCastContext extends ExprContext {
|
||||
public TypeDeclContext typeDecl() {
|
||||
return getRuleContext(TypeDeclContext.class,0);
|
||||
@ -1513,47 +1628,6 @@ public class KickCParser extends Parser {
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprPreModContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprPreModContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPreMod(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPreMod(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprPreMod(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprBinaryContext extends ExprContext {
|
||||
public List<ExprContext> expr() {
|
||||
return getRuleContexts(ExprContext.class);
|
||||
}
|
||||
public ExprContext expr(int i) {
|
||||
return getRuleContext(ExprContext.class,i);
|
||||
}
|
||||
public ExprBinaryContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprBinary(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprBinary(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprBinary(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprParContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
@ -1607,25 +1681,6 @@ public class KickCParser extends Parser {
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprPostModContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprPostModContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPostMod(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPostMod(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprPostMod(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprIdContext extends ExprContext {
|
||||
public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
|
||||
public ExprIdContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@ -1643,42 +1698,6 @@ public class KickCParser extends Parser {
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprUnaryContext extends ExprContext {
|
||||
public ExprContext expr() {
|
||||
return getRuleContext(ExprContext.class,0);
|
||||
}
|
||||
public ExprUnaryContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprUnary(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprUnary(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprUnary(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprNumberContext extends ExprContext {
|
||||
public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); }
|
||||
public ExprNumberContext(ExprContext ctx) { copyFrom(ctx); }
|
||||
@Override
|
||||
public void enterRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprNumber(this);
|
||||
}
|
||||
@Override
|
||||
public void exitRule(ParseTreeListener listener) {
|
||||
if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprNumber(this);
|
||||
}
|
||||
@Override
|
||||
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
|
||||
if ( visitor instanceof KickCVisitor ) return ((KickCVisitor<? extends T>)visitor).visitExprNumber(this);
|
||||
else return visitor.visitChildren(this);
|
||||
}
|
||||
}
|
||||
public static class ExprArrayContext extends ExprContext {
|
||||
public List<ExprContext> expr() {
|
||||
return getRuleContexts(ExprContext.class);
|
||||
@ -1718,7 +1737,7 @@ public class KickCParser extends Parser {
|
||||
int _alt;
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(213);
|
||||
setState(214);
|
||||
_errHandler.sync(this);
|
||||
switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
|
||||
case 1:
|
||||
@ -1747,7 +1766,7 @@ public class KickCParser extends Parser {
|
||||
setState(197);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
|
||||
{
|
||||
setState(196);
|
||||
parameterList();
|
||||
@ -1770,7 +1789,7 @@ public class KickCParser extends Parser {
|
||||
setState(202);
|
||||
match(T__3);
|
||||
setState(203);
|
||||
expr(15);
|
||||
expr(16);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
@ -1789,7 +1808,7 @@ public class KickCParser extends Parser {
|
||||
consume();
|
||||
}
|
||||
setState(206);
|
||||
expr(13);
|
||||
expr(14);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
@ -1808,7 +1827,7 @@ public class KickCParser extends Parser {
|
||||
consume();
|
||||
}
|
||||
setState(208);
|
||||
expr(11);
|
||||
expr(12);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
@ -1840,16 +1859,25 @@ public class KickCParser extends Parser {
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
_localctx = new ExprBoolContext(_localctx);
|
||||
_localctx = new ExprCharContext(_localctx);
|
||||
_ctx = _localctx;
|
||||
_prevctx = _localctx;
|
||||
setState(212);
|
||||
match(CHAR);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
{
|
||||
_localctx = new ExprBoolContext(_localctx);
|
||||
_ctx = _localctx;
|
||||
_prevctx = _localctx;
|
||||
setState(213);
|
||||
match(BOOLEAN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
_ctx.stop = _input.LT(-1);
|
||||
setState(242);
|
||||
setState(243);
|
||||
_errHandler.sync(this);
|
||||
_alt = getInterpreter().adaptivePredict(_input,25,_ctx);
|
||||
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
|
||||
@ -1857,16 +1885,16 @@ public class KickCParser extends Parser {
|
||||
if ( _parseListeners!=null ) triggerExitRuleEvent();
|
||||
_prevctx = _localctx;
|
||||
{
|
||||
setState(240);
|
||||
setState(241);
|
||||
_errHandler.sync(this);
|
||||
switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
|
||||
case 1:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(215);
|
||||
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
|
||||
setState(216);
|
||||
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
|
||||
setState(217);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__26 || _la==T__27) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1876,17 +1904,17 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(217);
|
||||
expr(11);
|
||||
setState(218);
|
||||
expr(12);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(218);
|
||||
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
|
||||
setState(219);
|
||||
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
|
||||
setState(220);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__16 || _la==T__28) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1896,17 +1924,17 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(220);
|
||||
expr(10);
|
||||
setState(221);
|
||||
expr(11);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(221);
|
||||
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
|
||||
setState(222);
|
||||
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
|
||||
setState(223);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__21 || _la==T__22) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1916,17 +1944,17 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(223);
|
||||
expr(9);
|
||||
setState(224);
|
||||
expr(10);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(224);
|
||||
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
|
||||
setState(225);
|
||||
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
|
||||
setState(226);
|
||||
_la = _input.LA(1);
|
||||
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37))) != 0)) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1936,17 +1964,17 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(226);
|
||||
expr(8);
|
||||
setState(227);
|
||||
expr(9);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(227);
|
||||
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
|
||||
setState(228);
|
||||
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
|
||||
setState(229);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__38 || _la==T__39) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1956,17 +1984,17 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(229);
|
||||
expr(7);
|
||||
setState(230);
|
||||
expr(8);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
{
|
||||
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(230);
|
||||
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
|
||||
setState(231);
|
||||
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
|
||||
setState(232);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__40 || _la==T__41) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -1976,21 +2004,21 @@ public class KickCParser extends Parser {
|
||||
_errHandler.reportMatch(this);
|
||||
consume();
|
||||
}
|
||||
setState(232);
|
||||
expr(6);
|
||||
setState(233);
|
||||
expr(7);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
{
|
||||
_localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(233);
|
||||
if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
|
||||
setState(234);
|
||||
match(T__17);
|
||||
if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
|
||||
setState(235);
|
||||
expr(0);
|
||||
match(T__17);
|
||||
setState(236);
|
||||
expr(0);
|
||||
setState(237);
|
||||
match(T__18);
|
||||
}
|
||||
break;
|
||||
@ -1998,9 +2026,9 @@ public class KickCParser extends Parser {
|
||||
{
|
||||
_localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState));
|
||||
pushNewRecursionContext(_localctx, _startState, RULE_expr);
|
||||
setState(238);
|
||||
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
|
||||
setState(239);
|
||||
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
|
||||
setState(240);
|
||||
_la = _input.LA(1);
|
||||
if ( !(_la==T__19 || _la==T__20) ) {
|
||||
_errHandler.recoverInline(this);
|
||||
@ -2015,7 +2043,7 @@ public class KickCParser extends Parser {
|
||||
}
|
||||
}
|
||||
}
|
||||
setState(244);
|
||||
setState(245);
|
||||
_errHandler.sync(this);
|
||||
_alt = getInterpreter().adaptivePredict(_input,25,_ctx);
|
||||
}
|
||||
@ -2065,21 +2093,21 @@ public class KickCParser extends Parser {
|
||||
try {
|
||||
enterOuterAlt(_localctx, 1);
|
||||
{
|
||||
setState(245);
|
||||
setState(246);
|
||||
expr(0);
|
||||
setState(250);
|
||||
setState(251);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
while (_la==T__15) {
|
||||
{
|
||||
{
|
||||
setState(246);
|
||||
match(T__15);
|
||||
setState(247);
|
||||
match(T__15);
|
||||
setState(248);
|
||||
expr(0);
|
||||
}
|
||||
}
|
||||
setState(252);
|
||||
setState(253);
|
||||
_errHandler.sync(this);
|
||||
_la = _input.LA(1);
|
||||
}
|
||||
@ -2126,27 +2154,27 @@ public class KickCParser extends Parser {
|
||||
private boolean expr_sempred(ExprContext _localctx, int predIndex) {
|
||||
switch (predIndex) {
|
||||
case 3:
|
||||
return precpred(_ctx, 10);
|
||||
return precpred(_ctx, 11);
|
||||
case 4:
|
||||
return precpred(_ctx, 9);
|
||||
return precpred(_ctx, 10);
|
||||
case 5:
|
||||
return precpred(_ctx, 8);
|
||||
return precpred(_ctx, 9);
|
||||
case 6:
|
||||
return precpred(_ctx, 7);
|
||||
return precpred(_ctx, 8);
|
||||
case 7:
|
||||
return precpred(_ctx, 6);
|
||||
return precpred(_ctx, 7);
|
||||
case 8:
|
||||
return precpred(_ctx, 5);
|
||||
return precpred(_ctx, 6);
|
||||
case 9:
|
||||
return precpred(_ctx, 14);
|
||||
return precpred(_ctx, 15);
|
||||
case 10:
|
||||
return precpred(_ctx, 12);
|
||||
return precpred(_ctx, 13);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3<\u0100\4\2\t\2\4"+
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3=\u0101\4\2\t\2\4"+
|
||||
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
|
||||
"\13\4\f\t\f\4\r\t\r\3\2\3\2\3\2\3\3\6\3\37\n\3\r\3\16\3 \3\4\3\4\5\4%"+
|
||||
"\n\4\3\4\3\4\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\5\4\61\n\4\3\4\3\4\3\4\5"+
|
||||
@ -2160,21 +2188,21 @@ public class KickCParser extends Parser {
|
||||
"\n\u00a3\n\n\f\n\16\n\u00a6\13\n\3\n\3\n\5\n\u00aa\n\n\3\13\3\13\3\13"+
|
||||
"\3\13\3\13\3\13\3\13\3\13\5\13\u00b4\n\13\3\13\3\13\3\13\3\13\3\13\7\13"+
|
||||
"\u00bb\n\13\f\13\16\13\u00be\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f"+
|
||||
"\u00c8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f"+
|
||||
"\u00d8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
|
||||
"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u00f3\n\f\f\f\16\f\u00f6"+
|
||||
"\13\f\3\r\3\r\3\r\7\r\u00fb\n\r\f\r\16\r\u00fe\13\r\3\r\2\5\20\24\26\16"+
|
||||
"\u00c8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
|
||||
"\5\f\u00d9\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
|
||||
"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u00f4\n\f\f\f\16\f\u00f7"+
|
||||
"\13\f\3\r\3\r\3\r\7\r\u00fc\n\r\f\r\16\r\u00ff\13\r\3\r\2\5\20\24\26\16"+
|
||||
"\2\4\6\b\n\f\16\20\22\24\26\30\2\n\3\2\26\27\4\2\23\23\30\34\3\2\35\36"+
|
||||
"\4\2\23\23\37\37\3\2\30\31\3\2 (\3\2)*\3\2+,\2\u0124\2\32\3\2\2\2\4\36"+
|
||||
"\4\2\23\23\37\37\3\2\30\31\3\2 (\3\2)*\3\2+,\2\u0126\2\32\3\2\2\2\4\36"+
|
||||
"\3\2\2\2\6k\3\2\2\2\bn\3\2\2\2\n\u0080\3\2\2\2\f\u0082\3\2\2\2\16\u008a"+
|
||||
"\3\2\2\2\20\u008d\3\2\2\2\22\u00a9\3\2\2\2\24\u00b3\3\2\2\2\26\u00d7\3"+
|
||||
"\2\2\2\30\u00f7\3\2\2\2\32\33\5\4\3\2\33\34\7\2\2\3\34\3\3\2\2\2\35\37"+
|
||||
"\3\2\2\2\20\u008d\3\2\2\2\22\u00a9\3\2\2\2\24\u00b3\3\2\2\2\26\u00d8\3"+
|
||||
"\2\2\2\30\u00f8\3\2\2\2\32\33\5\4\3\2\33\34\7\2\2\3\34\3\3\2\2\2\35\37"+
|
||||
"\5\6\4\2\36\35\3\2\2\2\37 \3\2\2\2 \36\3\2\2\2 !\3\2\2\2!\5\3\2\2\2\""+
|
||||
"$\7\3\2\2#%\5\4\3\2$#\3\2\2\2$%\3\2\2\2%&\3\2\2\2&l\7\4\2\2\'(\5\20\t"+
|
||||
"\2()\79\2\2)+\7\5\2\2*,\5\f\7\2+*\3\2\2\2+,\3\2\2\2,-\3\2\2\2-.\7\6\2"+
|
||||
"\2()\7:\2\2)+\7\5\2\2*,\5\f\7\2+*\3\2\2\2+,\3\2\2\2,-\3\2\2\2-.\7\6\2"+
|
||||
"\2.\60\7\3\2\2/\61\5\4\3\2\60/\3\2\2\2\60\61\3\2\2\2\61\62\3\2\2\2\62"+
|
||||
"\63\7\4\2\2\63l\3\2\2\2\64\66\7\7\2\2\65\64\3\2\2\2\65\66\3\2\2\2\66\67"+
|
||||
"\3\2\2\2\678\5\20\t\28;\79\2\29:\7\b\2\2:<\5\22\n\2;9\3\2\2\2;<\3\2\2"+
|
||||
"\3\2\2\2\678\5\20\t\28;\7:\2\29:\7\b\2\2:<\5\22\n\2;9\3\2\2\2;<\3\2\2"+
|
||||
"\2<=\3\2\2\2=>\7\t\2\2>l\3\2\2\2?@\5\24\13\2@A\7\b\2\2AB\5\26\f\2BC\7"+
|
||||
"\t\2\2Cl\3\2\2\2DE\5\26\f\2EF\7\t\2\2Fl\3\2\2\2GH\7\n\2\2HI\7\5\2\2IJ"+
|
||||
"\5\26\f\2JK\7\6\2\2KN\5\6\4\2LM\7\13\2\2MO\5\6\4\2NL\3\2\2\2NO\3\2\2\2"+
|
||||
@ -2184,14 +2212,14 @@ public class KickCParser extends Parser {
|
||||
"\5\n\6\2cd\7\6\2\2de\5\6\4\2el\3\2\2\2fh\7\17\2\2gi\5\26\f\2hg\3\2\2\2"+
|
||||
"hi\3\2\2\2ij\3\2\2\2jl\7\t\2\2k\"\3\2\2\2k\'\3\2\2\2k\65\3\2\2\2k?\3\2"+
|
||||
"\2\2kD\3\2\2\2kG\3\2\2\2kP\3\2\2\2kV\3\2\2\2k]\3\2\2\2kf\3\2\2\2l\7\3"+
|
||||
"\2\2\2mo\5\20\t\2nm\3\2\2\2no\3\2\2\2op\3\2\2\2ps\79\2\2qr\7\b\2\2rt\5"+
|
||||
"\2\2\2mo\5\20\t\2nm\3\2\2\2no\3\2\2\2op\3\2\2\2ps\7:\2\2qr\7\b\2\2rt\5"+
|
||||
"\22\n\2sq\3\2\2\2st\3\2\2\2t\t\3\2\2\2uv\7\t\2\2vw\5\26\f\2wy\7\t\2\2"+
|
||||
"xz\5\26\f\2yx\3\2\2\2yz\3\2\2\2z\u0081\3\2\2\2{|\7\20\2\2|}\5\26\f\2}"+
|
||||
"~\7\21\2\2~\177\5\26\f\2\177\u0081\3\2\2\2\u0080u\3\2\2\2\u0080{\3\2\2"+
|
||||
"\2\u0081\13\3\2\2\2\u0082\u0087\5\16\b\2\u0083\u0084\7\22\2\2\u0084\u0086"+
|
||||
"\5\16\b\2\u0085\u0083\3\2\2\2\u0086\u0089\3\2\2\2\u0087\u0085\3\2\2\2"+
|
||||
"\u0087\u0088\3\2\2\2\u0088\r\3\2\2\2\u0089\u0087\3\2\2\2\u008a\u008b\5"+
|
||||
"\20\t\2\u008b\u008c\79\2\2\u008c\17\3\2\2\2\u008d\u008e\b\t\1\2\u008e"+
|
||||
"\20\t\2\u008b\u008c\7:\2\2\u008c\17\3\2\2\2\u008d\u008e\b\t\1\2\u008e"+
|
||||
"\u008f\7-\2\2\u008f\u009a\3\2\2\2\u0090\u0091\f\4\2\2\u0091\u0099\7\23"+
|
||||
"\2\2\u0092\u0093\f\3\2\2\u0093\u0095\7\24\2\2\u0094\u0096\5\26\f\2\u0095"+
|
||||
"\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u0099\7\25"+
|
||||
@ -2203,36 +2231,37 @@ public class KickCParser extends Parser {
|
||||
"\u00a4\3\2\2\2\u00a7\u00a8\7\4\2\2\u00a8\u00aa\3\2\2\2\u00a9\u009d\3\2"+
|
||||
"\2\2\u00a9\u009e\3\2\2\2\u00aa\23\3\2\2\2\u00ab\u00ac\b\13\1\2\u00ac\u00ad"+
|
||||
"\7\5\2\2\u00ad\u00ae\5\24\13\2\u00ae\u00af\7\6\2\2\u00af\u00b4\3\2\2\2"+
|
||||
"\u00b0\u00b4\79\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b4\5\24\13\4\u00b3\u00ab"+
|
||||
"\u00b0\u00b4\7:\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b4\5\24\13\4\u00b3\u00ab"+
|
||||
"\3\2\2\2\u00b3\u00b0\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4\u00bc\3\2\2\2\u00b5"+
|
||||
"\u00b6\f\3\2\2\u00b6\u00b7\7\24\2\2\u00b7\u00b8\5\26\f\2\u00b8\u00b9\7"+
|
||||
"\25\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b5\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc"+
|
||||
"\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\25\3\2\2\2\u00be\u00bc\3\2\2"+
|
||||
"\2\u00bf\u00c0\b\f\1\2\u00c0\u00c1\7\5\2\2\u00c1\u00c2\5\26\f\2\u00c2"+
|
||||
"\u00c3\7\6\2\2\u00c3\u00d8\3\2\2\2\u00c4\u00c5\79\2\2\u00c5\u00c7\7\5"+
|
||||
"\u00c3\7\6\2\2\u00c3\u00d9\3\2\2\2\u00c4\u00c5\7:\2\2\u00c5\u00c7\7\5"+
|
||||
"\2\2\u00c6\u00c8\5\30\r\2\u00c7\u00c6\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8"+
|
||||
"\u00c9\3\2\2\2\u00c9\u00d8\7\6\2\2\u00ca\u00cb\7\5\2\2\u00cb\u00cc\5\20"+
|
||||
"\t\2\u00cc\u00cd\7\6\2\2\u00cd\u00ce\5\26\f\21\u00ce\u00d8\3\2\2\2\u00cf"+
|
||||
"\u00d0\t\2\2\2\u00d0\u00d8\5\26\f\17\u00d1\u00d2\t\3\2\2\u00d2\u00d8\5"+
|
||||
"\26\f\r\u00d3\u00d8\79\2\2\u00d4\u00d8\7\60\2\2\u00d5\u00d8\7.\2\2\u00d6"+
|
||||
"\u00d8\7/\2\2\u00d7\u00bf\3\2\2\2\u00d7\u00c4\3\2\2\2\u00d7\u00ca\3\2"+
|
||||
"\2\2\u00d7\u00cf\3\2\2\2\u00d7\u00d1\3\2\2\2\u00d7\u00d3\3\2\2\2\u00d7"+
|
||||
"\u00d4\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d7\u00d6\3\2\2\2\u00d8\u00f4\3\2"+
|
||||
"\2\2\u00d9\u00da\f\f\2\2\u00da\u00db\t\4\2\2\u00db\u00f3\5\26\f\r\u00dc"+
|
||||
"\u00dd\f\13\2\2\u00dd\u00de\t\5\2\2\u00de\u00f3\5\26\f\f\u00df\u00e0\f"+
|
||||
"\n\2\2\u00e0\u00e1\t\6\2\2\u00e1\u00f3\5\26\f\13\u00e2\u00e3\f\t\2\2\u00e3"+
|
||||
"\u00e4\t\7\2\2\u00e4\u00f3\5\26\f\n\u00e5\u00e6\f\b\2\2\u00e6\u00e7\t"+
|
||||
"\b\2\2\u00e7\u00f3\5\26\f\t\u00e8\u00e9\f\7\2\2\u00e9\u00ea\t\t\2\2\u00ea"+
|
||||
"\u00f3\5\26\f\b\u00eb\u00ec\f\20\2\2\u00ec\u00ed\7\24\2\2\u00ed\u00ee"+
|
||||
"\5\26\f\2\u00ee\u00ef\7\25\2\2\u00ef\u00f3\3\2\2\2\u00f0\u00f1\f\16\2"+
|
||||
"\2\u00f1\u00f3\t\2\2\2\u00f2\u00d9\3\2\2\2\u00f2\u00dc\3\2\2\2\u00f2\u00df"+
|
||||
"\3\2\2\2\u00f2\u00e2\3\2\2\2\u00f2\u00e5\3\2\2\2\u00f2\u00e8\3\2\2\2\u00f2"+
|
||||
"\u00eb\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2\3\2"+
|
||||
"\2\2\u00f4\u00f5\3\2\2\2\u00f5\27\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fc"+
|
||||
"\5\26\f\2\u00f8\u00f9\7\22\2\2\u00f9\u00fb\5\26\f\2\u00fa\u00f8\3\2\2"+
|
||||
"\2\u00fb\u00fe\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\31"+
|
||||
"\3\2\2\2\u00fe\u00fc\3\2\2\2\35 $+\60\65;N`hknsy\u0080\u0087\u0095\u0098"+
|
||||
"\u009a\u00a4\u00a9\u00b3\u00bc\u00c7\u00d7\u00f2\u00f4\u00fc";
|
||||
"\u00c9\3\2\2\2\u00c9\u00d9\7\6\2\2\u00ca\u00cb\7\5\2\2\u00cb\u00cc\5\20"+
|
||||
"\t\2\u00cc\u00cd\7\6\2\2\u00cd\u00ce\5\26\f\22\u00ce\u00d9\3\2\2\2\u00cf"+
|
||||
"\u00d0\t\2\2\2\u00d0\u00d9\5\26\f\20\u00d1\u00d2\t\3\2\2\u00d2\u00d9\5"+
|
||||
"\26\f\16\u00d3\u00d9\7:\2\2\u00d4\u00d9\7\61\2\2\u00d5\u00d9\7.\2\2\u00d6"+
|
||||
"\u00d9\7/\2\2\u00d7\u00d9\7\60\2\2\u00d8\u00bf\3\2\2\2\u00d8\u00c4\3\2"+
|
||||
"\2\2\u00d8\u00ca\3\2\2\2\u00d8\u00cf\3\2\2\2\u00d8\u00d1\3\2\2\2\u00d8"+
|
||||
"\u00d3\3\2\2\2\u00d8\u00d4\3\2\2\2\u00d8\u00d5\3\2\2\2\u00d8\u00d6\3\2"+
|
||||
"\2\2\u00d8\u00d7\3\2\2\2\u00d9\u00f5\3\2\2\2\u00da\u00db\f\r\2\2\u00db"+
|
||||
"\u00dc\t\4\2\2\u00dc\u00f4\5\26\f\16\u00dd\u00de\f\f\2\2\u00de\u00df\t"+
|
||||
"\5\2\2\u00df\u00f4\5\26\f\r\u00e0\u00e1\f\13\2\2\u00e1\u00e2\t\6\2\2\u00e2"+
|
||||
"\u00f4\5\26\f\f\u00e3\u00e4\f\n\2\2\u00e4\u00e5\t\7\2\2\u00e5\u00f4\5"+
|
||||
"\26\f\13\u00e6\u00e7\f\t\2\2\u00e7\u00e8\t\b\2\2\u00e8\u00f4\5\26\f\n"+
|
||||
"\u00e9\u00ea\f\b\2\2\u00ea\u00eb\t\t\2\2\u00eb\u00f4\5\26\f\t\u00ec\u00ed"+
|
||||
"\f\21\2\2\u00ed\u00ee\7\24\2\2\u00ee\u00ef\5\26\f\2\u00ef\u00f0\7\25\2"+
|
||||
"\2\u00f0\u00f4\3\2\2\2\u00f1\u00f2\f\17\2\2\u00f2\u00f4\t\2\2\2\u00f3"+
|
||||
"\u00da\3\2\2\2\u00f3\u00dd\3\2\2\2\u00f3\u00e0\3\2\2\2\u00f3\u00e3\3\2"+
|
||||
"\2\2\u00f3\u00e6\3\2\2\2\u00f3\u00e9\3\2\2\2\u00f3\u00ec\3\2\2\2\u00f3"+
|
||||
"\u00f1\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f6\3\2"+
|
||||
"\2\2\u00f6\27\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f8\u00fd\5\26\f\2\u00f9\u00fa"+
|
||||
"\7\22\2\2\u00fa\u00fc\5\26\f\2\u00fb\u00f9\3\2\2\2\u00fc\u00ff\3\2\2\2"+
|
||||
"\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\31\3\2\2\2\u00ff\u00fd"+
|
||||
"\3\2\2\2\35 $+\60\65;N`hknsy\u0080\u0087\u0095\u0098\u009a\u00a4\u00a9"+
|
||||
"\u00b3\u00bc\u00c7\u00d8\u00f3\u00f5\u00fd";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
static {
|
||||
|
@ -188,20 +188,6 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLvaluePar(KickCParser.LvalueParContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprPreMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -216,6 +202,48 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprBinary(KickCParser.ExprBinaryContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprChar}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprChar(KickCParser.ExprCharContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprCast}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprCast(KickCParser.ExprCastContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprCall}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprCall(KickCParser.ExprCallContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprPar}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -237,13 +265,6 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprBool(KickCParser.ExprBoolContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprPostMod}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprPostMod(KickCParser.ExprPostModContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprId}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
@ -251,20 +272,6 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprId(KickCParser.ExprIdContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprUnary}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprUnary(KickCParser.ExprUnaryContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprNumber}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExprNumber(KickCParser.ExprNumberContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code exprArray}
|
||||
* labeled alternative in {@link KickCParser#expr}.
|
||||
|
@ -496,6 +496,11 @@ public class Pass1GenerateStatementSequence extends KickCBaseVisitor<Object> {
|
||||
return new ConstantBool(Boolean.valueOf(bool));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitExprChar(KickCParser.ExprCharContext ctx) {
|
||||
return new ConstantChar(ctx.getText().charAt(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public RValue visitExprBinary(KickCParser.ExprBinaryContext ctx) {
|
||||
RValue left = (RValue) this.visit(ctx.expr(0));
|
||||
|
@ -24,6 +24,10 @@ public class TestCompilationOutput extends TestCase {
|
||||
helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/");
|
||||
}
|
||||
|
||||
public void testLiterals() throws IOException, URISyntaxException {
|
||||
compileAndCompare("literals");
|
||||
}
|
||||
|
||||
public void testIncD020() throws IOException, URISyntaxException {
|
||||
compileAndCompare("incd020");
|
||||
}
|
||||
|
16
src/main/java/dk/camelot64/kickc/test/literals.kc
Normal file
16
src/main/java/dk/camelot64/kickc/test/literals.kc
Normal file
@ -0,0 +1,16 @@
|
||||
byte* SCREEN = $0400;
|
||||
|
||||
byte char = 'a';
|
||||
byte num = 1;
|
||||
byte[] str = "bcd";
|
||||
byte[] nums = { 2, 3, 4};
|
||||
|
||||
main();
|
||||
void main() {
|
||||
SCREEN[0] = char;
|
||||
SCREEN[2] = num;
|
||||
for(byte i : 0..2) {
|
||||
SCREEN[4+i] = str[i];
|
||||
SCREEN[8+i] = nums[i];
|
||||
}
|
||||
}
|
22
src/main/java/dk/camelot64/kickc/test/ref/literals.asm
Normal file
22
src/main/java/dk/camelot64/kickc/test/ref/literals.asm
Normal file
@ -0,0 +1,22 @@
|
||||
.const SCREEN = $400
|
||||
.const char = 'a'
|
||||
.const num = 1
|
||||
str: .text "bcd"
|
||||
nums: .byte 2, 3, 4
|
||||
jsr main
|
||||
main: {
|
||||
lda #char
|
||||
sta SCREEN+0
|
||||
lda #num
|
||||
sta SCREEN+2
|
||||
ldx #0
|
||||
b1:
|
||||
lda str,x
|
||||
sta SCREEN+4,x
|
||||
lda nums,x
|
||||
sta SCREEN+8,x
|
||||
inx
|
||||
cpx #3
|
||||
bne b1
|
||||
rts
|
||||
}
|
20
src/main/java/dk/camelot64/kickc/test/ref/literals.cfg
Normal file
20
src/main/java/dk/camelot64/kickc/test/ref/literals.cfg
Normal file
@ -0,0 +1,20 @@
|
||||
@begin: scope:[] from
|
||||
[0] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @begin
|
||||
main: scope:[main] from @begin
|
||||
[1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ]
|
||||
[2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1
|
||||
[3] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
||||
[5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ]
|
||||
[6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ]
|
||||
[7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ]
|
||||
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[10] return [ ]
|
||||
to:@return
|
1092
src/main/java/dk/camelot64/kickc/test/ref/literals.log
Normal file
1092
src/main/java/dk/camelot64/kickc/test/ref/literals.log
Normal file
File diff suppressed because it is too large
Load Diff
24
src/main/java/dk/camelot64/kickc/test/ref/literals.sym
Normal file
24
src/main/java/dk/camelot64/kickc/test/ref/literals.sym
Normal file
@ -0,0 +1,24 @@
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(byte) char
|
||||
(const byte) char#0 char = (byte) 'a'
|
||||
(void()) main()
|
||||
(byte~) main::$1 reg byte a 22.0
|
||||
(byte~) main::$3 reg byte a 22.0
|
||||
(label) main::@1
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte x 16.5
|
||||
(byte) main::i#2 reg byte x 13.2
|
||||
(byte) num
|
||||
(const byte) num#0 num = (byte) 1
|
||||
(byte[]) nums
|
||||
(const byte[]) nums#0 nums = { (byte) 2, (byte) 3, (byte) 4 }
|
||||
(byte[]) str
|
||||
(const byte[]) str#0 str = (string) "bcd"
|
||||
|
||||
reg byte x [ main::i#2 main::i#1 ]
|
||||
reg byte a [ main::$1 ]
|
||||
reg byte a [ main::$3 ]
|
@ -2,8 +2,7 @@
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
jsr main
|
||||
main: {
|
||||
.const line = SCREEN+$28
|
||||
@ -38,7 +37,7 @@ main: {
|
||||
bne b5
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
cmp #0
|
||||
cmp #'@'
|
||||
bne b6
|
||||
lda #<TEXT
|
||||
sta nxt
|
||||
|
@ -32,7 +32,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
[18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ]
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
[20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ]
|
||||
|
@ -2,8 +2,7 @@ byte* SCREEN = $0400;
|
||||
byte* RASTER = $d012;
|
||||
byte* BGCOL = $d020;
|
||||
byte* SCROLL = $d016;
|
||||
byte* TEXT = "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. ";
|
||||
byte[] STOP = { 0 };
|
||||
byte* TEXT = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @";
|
||||
main();
|
||||
|
||||
void main() {
|
||||
@ -25,7 +24,7 @@ void main() {
|
||||
}
|
||||
// Render next char
|
||||
byte c = *nxt;
|
||||
if(c==0) {
|
||||
if(c=='@') {
|
||||
nxt = TEXT;
|
||||
c = *nxt;
|
||||
}
|
||||
@ -51,8 +50,7 @@ PROGRAM
|
||||
(byte*) RASTER ← (word) 53266
|
||||
(byte*) BGCOL ← (word) 53280
|
||||
(byte*) SCROLL ← (word) 53270
|
||||
(byte*) TEXT ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP ← { (byte) 0 }
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void~) $0 ← call main
|
||||
proc (void()) main()
|
||||
(void~) main::$0 ← call fillscreen (byte*) SCREEN (byte) 32
|
||||
@ -87,7 +85,7 @@ main::@5:
|
||||
if((boolean~) main::$12) goto main::@5
|
||||
(byte~) main::$13 ← * (byte*) main::nxt
|
||||
(byte) main::c ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
(byte*) main::nxt ← (byte*) TEXT
|
||||
@ -123,7 +121,6 @@ SYMBOLS
|
||||
(byte*) RASTER
|
||||
(byte*) SCREEN
|
||||
(byte*) SCROLL
|
||||
(byte[]) STOP
|
||||
(byte*) TEXT
|
||||
(void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill)
|
||||
(byte*~) fillscreen::$0
|
||||
@ -172,8 +169,7 @@ INITIAL CONTROL FLOW GRAPH
|
||||
(byte*) RASTER ← (word) 53266
|
||||
(byte*) BGCOL ← (word) 53280
|
||||
(byte*) SCROLL ← (word) 53270
|
||||
(byte*) TEXT ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP ← { (byte) 0 }
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void~) $0 ← call main
|
||||
to:@1
|
||||
main: scope:[main] from
|
||||
@ -228,7 +224,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte~) main::$13 ← * (byte*) main::nxt
|
||||
(byte) main::c ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -278,8 +274,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER ← (word) 53266
|
||||
(byte*) BGCOL ← (word) 53280
|
||||
(byte*) SCROLL ← (word) 53270
|
||||
(byte*) TEXT ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP ← { (byte) 0 }
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void~) $0 ← call main
|
||||
to:@end
|
||||
main: scope:[main] from
|
||||
@ -332,7 +327,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte~) main::$13 ← * (byte*) main::nxt
|
||||
(byte) main::c ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -371,8 +366,7 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
||||
(byte*) RASTER ← (word) 53266
|
||||
(byte*) BGCOL ← (word) 53280
|
||||
(byte*) SCROLL ← (word) 53270
|
||||
(byte*) TEXT ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP ← { (byte) 0 }
|
||||
(byte*) TEXT ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@3
|
||||
@3: scope:[] from @begin
|
||||
@ -431,7 +425,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte~) main::$13 ← * (byte*) main::nxt
|
||||
(byte) main::c ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -478,8 +472,7 @@ CONTROL FLOW GRAPH SSA
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@3
|
||||
@3: scope:[] from @begin
|
||||
@ -604,7 +597,7 @@ main::@10: scope:[main] from main::@5
|
||||
(byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 )
|
||||
(byte~) main::$13 ← * (byte*) main::nxt#3
|
||||
(byte) main::c#0 ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -660,8 +653,7 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@3
|
||||
@3: scope:[] from @begin
|
||||
@ -786,7 +778,7 @@ main::@10: scope:[main] from main::@5
|
||||
(byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 )
|
||||
(byte~) main::$13 ← * (byte*) main::nxt#3
|
||||
(byte) main::c#0 ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -886,8 +878,6 @@ INITIAL SSA SYMBOL TABLE
|
||||
(byte*) SCROLL#7
|
||||
(byte*) SCROLL#8
|
||||
(byte*) SCROLL#9
|
||||
(byte[]) STOP
|
||||
(byte[]) STOP#0
|
||||
(byte*) TEXT
|
||||
(byte*) TEXT#0
|
||||
(byte*) TEXT#1
|
||||
@ -1005,8 +995,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1129,7 +1118,7 @@ main::@10: scope:[main] from main::@5
|
||||
(byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 )
|
||||
(byte~) main::$13 ← * (byte*) main::nxt#3
|
||||
(byte) main::c#0 ← (byte~) main::$13
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) 0
|
||||
(boolean~) main::$14 ← (byte) main::c#0 == (byte) '@'
|
||||
(boolean~) main::$15 ← ! (boolean~) main::$14
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
@ -1180,7 +1169,7 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1
|
||||
@end: scope:[] from @begin
|
||||
|
||||
Inversing boolean not (boolean~) main::$9 ← (byte) main::scroll#1 != (byte) 255 from (boolean~) main::$8 ← (byte) main::scroll#1 == (byte) 255
|
||||
Inversing boolean not (boolean~) main::$15 ← (byte) main::c#0 != (byte) 0 from (boolean~) main::$14 ← (byte) main::c#0 == (byte) 0
|
||||
Inversing boolean not (boolean~) main::$15 ← (byte) main::c#0 != (byte) '@' from (boolean~) main::$14 ← (byte) main::c#0 == (byte) '@'
|
||||
Succesful SSA optimization Pass2UnaryNotSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
@ -1188,8 +1177,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1311,7 +1299,7 @@ main::@10: scope:[main] from main::@5
|
||||
(byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 )
|
||||
(byte~) main::$13 ← * (byte*) main::nxt#3
|
||||
(byte) main::c#0 ← (byte~) main::$13
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) 0
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) '@'
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
@ -1401,8 +1389,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1485,7 +1472,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) 0
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) '@'
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
@ -1540,8 +1527,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1624,7 +1610,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) 0
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) '@'
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
@ -1687,8 +1673,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1771,7 +1756,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) 0
|
||||
(boolean~) main::$15 ← (byte) main::c#0 != (byte) '@'
|
||||
if((boolean~) main::$15) goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
@ -1808,7 +1793,7 @@ Simple Condition (boolean~) main::$3 if((byte~) main::$2!=(byte) 254) goto main:
|
||||
Simple Condition (boolean~) main::$5 if((byte~) main::$4!=(byte) 255) goto main::@3
|
||||
Simple Condition (boolean~) main::$9 if((byte) main::scroll#1!=(byte) 255) goto main::@4
|
||||
Simple Condition (boolean~) main::$12 if((byte) main::i#1!=(byte) 39) goto main::@5
|
||||
Simple Condition (boolean~) main::$15 if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
Simple Condition (boolean~) main::$15 if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
Simple Condition (boolean~) fillscreen::$1 if((byte*) fillscreen::cursor#1<(byte*~) fillscreen::$0) goto fillscreen::@1
|
||||
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
||||
CONTROL FLOW GRAPH
|
||||
@ -1817,8 +1802,7 @@ CONTROL FLOW GRAPH
|
||||
(byte*) RASTER#0 ← (word) 53266
|
||||
(byte*) BGCOL#0 ← (word) 53280
|
||||
(byte*) SCROLL#0 ← (word) 53270
|
||||
(byte*) TEXT#0 ← (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(byte[]) STOP#0 ← { (byte) 0 }
|
||||
(byte*) TEXT#0 ← (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
call main param-assignment
|
||||
to:@end
|
||||
main: scope:[main] from @begin
|
||||
@ -1897,7 +1881,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -1932,8 +1916,7 @@ Constant (const byte*) SCREEN#0 = 1024
|
||||
Constant (const byte*) RASTER#0 = 53266
|
||||
Constant (const byte*) BGCOL#0 = 53280
|
||||
Constant (const byte*) SCROLL#0 = 53270
|
||||
Constant (const byte*) TEXT#0 = "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
Constant (const byte[]) STOP#0 = { 0 }
|
||||
Constant (const byte*) TEXT#0 = "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
Constant (const byte) fillscreen::fill#0 = 32
|
||||
Constant (const byte) main::scroll#0 = 7
|
||||
Constant (const byte) main::scroll#2 = 7
|
||||
@ -2015,7 +1998,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2124,7 +2107,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2228,7 +2211,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2331,7 +2314,7 @@ main::@5: scope:[main] from main::@5 main::@9
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2430,7 +2413,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2520,7 +2503,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2603,7 +2586,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2685,7 +2668,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2762,7 +2745,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 )
|
||||
@ -2835,7 +2818,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(const byte*) main::nxt#2 )
|
||||
@ -2910,7 +2893,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(const byte*) main::nxt#2 )
|
||||
@ -2982,7 +2965,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(const byte*) main::nxt#2 )
|
||||
@ -3071,7 +3054,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@6
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@6
|
||||
to:main::@11
|
||||
main::@6: scope:[main] from main::@10 main::@11
|
||||
(byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(const byte*) TEXT#0 )
|
||||
@ -3109,10 +3092,8 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) SCREEN#0 = (word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 = (word) 53270
|
||||
(byte[]) STOP
|
||||
(const byte[]) STOP#0 = { (byte) 0 }
|
||||
(byte*) TEXT
|
||||
(const byte*) TEXT#0 = (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(const byte*) TEXT#0 = (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill)
|
||||
(label) fillscreen::@1
|
||||
(label) fillscreen::@return
|
||||
@ -3199,7 +3180,7 @@ main::@5: scope:[main] from main::@15 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
(byte) main::c#0 ← * (byte*) main::nxt#3
|
||||
if((byte) main::c#0!=(byte) 0) goto main::@16
|
||||
if((byte) main::c#0!=(byte) '@') goto main::@16
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
(byte) main::c#1 ← * (const byte*) TEXT#0
|
||||
@ -3307,7 +3288,7 @@ main::@5: scope:[main] from main::@15 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
[18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) 0) goto main::@16 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) '@') goto main::@16 [ main::nxt#3 main::c#0 ]
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
[20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ]
|
||||
@ -3429,7 +3410,7 @@ main::@5: scope:[main] from main::@5 main::@8
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@5
|
||||
[18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ]
|
||||
[19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ]
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
[20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ]
|
||||
@ -3520,7 +3501,6 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) RASTER
|
||||
(byte*) SCREEN
|
||||
(byte*) SCROLL
|
||||
(byte[]) STOP
|
||||
(byte*) TEXT
|
||||
(void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill)
|
||||
(byte*) fillscreen::cursor
|
||||
@ -3598,8 +3578,7 @@ INITIAL ASM
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
bbegin:
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
@ -3718,8 +3697,9 @@ main: {
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
sta c
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- zpby1_neq_0_then_la1
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- zpby1_neq_coby1_then_la1
|
||||
lda c
|
||||
cmp #'@'
|
||||
bne b6_from_b10
|
||||
jmp b11
|
||||
//SEG39 main::@11
|
||||
@ -3888,8 +3868,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
bbegin:
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
@ -3975,8 +3954,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6_from_b10
|
||||
//SEG39 main::@11
|
||||
b11:
|
||||
@ -4092,8 +4071,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
bbegin:
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
@ -4176,8 +4154,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
b11:
|
||||
@ -4291,8 +4269,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
//SEG3 [1] phi from @begin to main
|
||||
@ -4368,8 +4345,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
//SEG40 [20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ] -- aby=_star_cowo1
|
||||
@ -4469,8 +4446,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
//SEG3 [1] phi from @begin to main
|
||||
@ -4544,8 +4520,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
//SEG40 [20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ] -- aby=_star_cowo1
|
||||
@ -4639,8 +4615,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
//SEG3 [1] phi from @begin to main
|
||||
@ -4713,8 +4688,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
//SEG40 [20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ] -- aby=_star_cowo1
|
||||
@ -4807,8 +4782,7 @@ ASSEMBLER
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
//SEG3 [1] phi from @begin to main
|
||||
@ -4880,8 +4854,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
//SEG40 [20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ] -- aby=_star_cowo1
|
||||
@ -4977,10 +4951,8 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = (word) 53270
|
||||
(byte[]) STOP
|
||||
(const byte[]) STOP#0 STOP = { (byte) 0 }
|
||||
(byte*) TEXT
|
||||
(const byte*) TEXT#0 TEXT = (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(const byte*) TEXT#0 TEXT = (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill)
|
||||
(label) fillscreen::@1
|
||||
(label) fillscreen::@return
|
||||
@ -5044,8 +5016,7 @@ FINAL CODE
|
||||
.const RASTER = $d012
|
||||
.const BGCOL = $d020
|
||||
.const SCROLL = $d016
|
||||
TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
STOP: .byte 0
|
||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
//SEG1 @begin
|
||||
//SEG2 [0] call main param-assignment [ ]
|
||||
//SEG3 [1] phi from @begin to main
|
||||
@ -5117,8 +5088,8 @@ main: {
|
||||
//SEG37 [18] (byte) main::c#0 ← * (byte*) main::nxt#3 [ main::nxt#3 main::c#0 ] -- aby=_star_zpptrby1
|
||||
ldy #0
|
||||
lda (nxt),y
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) 0) goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_0_then_la1
|
||||
cmp #0
|
||||
//SEG38 [19] if((byte) main::c#0!=(byte) '@') goto main::@6 [ main::nxt#3 main::c#0 ] -- aby_neq_coby1_then_la1
|
||||
cmp #'@'
|
||||
bne b6
|
||||
//SEG39 main::@11
|
||||
//SEG40 [20] (byte) main::c#1 ← * (const byte*) TEXT#0 [ main::c#1 ] -- aby=_star_cowo1
|
||||
|
@ -8,10 +8,8 @@
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(byte*) SCROLL
|
||||
(const byte*) SCROLL#0 SCROLL = (word) 53270
|
||||
(byte[]) STOP
|
||||
(const byte[]) STOP#0 STOP = { (byte) 0 }
|
||||
(byte*) TEXT
|
||||
(const byte*) TEXT#0 TEXT = (string) "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. "
|
||||
(const byte*) TEXT#0 TEXT = (string) "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||
(void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill)
|
||||
(label) fillscreen::@1
|
||||
(label) fillscreen::@return
|
||||
|
@ -1,44 +1,12 @@
|
||||
.const SCREEN = $400
|
||||
.const COLORS = $d800
|
||||
.const FILL = $e6
|
||||
.const XPOS = $1000
|
||||
.const YPOS = $1100
|
||||
.const COLS = $1200
|
||||
.label numpoints = 8
|
||||
.const numpoints = 6
|
||||
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
||||
YPOS: .byte 5, 8, $e, 2, $11, $16
|
||||
COLS: .byte 1, 2, 3, 4, 5, 7
|
||||
jsr main
|
||||
main: {
|
||||
lda #1
|
||||
sta addpoint.c
|
||||
ldy #5
|
||||
lda #0
|
||||
sta numpoints
|
||||
lda #5
|
||||
jsr addpoint
|
||||
lda #2
|
||||
sta addpoint.c
|
||||
ldy #8
|
||||
lda #$f
|
||||
jsr addpoint
|
||||
lda #3
|
||||
sta addpoint.c
|
||||
ldy #$e
|
||||
lda #6
|
||||
jsr addpoint
|
||||
lda #4
|
||||
sta addpoint.c
|
||||
ldy #2
|
||||
lda #$22
|
||||
jsr addpoint
|
||||
lda #5
|
||||
sta addpoint.c
|
||||
ldy #$11
|
||||
lda #$15
|
||||
jsr addpoint
|
||||
lda #7
|
||||
sta addpoint.c
|
||||
ldy #$16
|
||||
lda #$1f
|
||||
jsr addpoint
|
||||
jsr initscreen
|
||||
b1:
|
||||
jsr render
|
||||
@ -148,10 +116,10 @@ render: {
|
||||
rts
|
||||
}
|
||||
findcol: {
|
||||
.label x = 9
|
||||
.label y = 10
|
||||
.label x = 8
|
||||
.label y = 9
|
||||
.label xp = 7
|
||||
.label yp = 11
|
||||
.label yp = 10
|
||||
.label diff = 7
|
||||
.label mindiff = 6
|
||||
ldy #0
|
||||
@ -195,7 +163,7 @@ findcol: {
|
||||
ldy COLS,x
|
||||
b8:
|
||||
inx
|
||||
cpx numpoints
|
||||
cpx #numpoints
|
||||
bcc b19
|
||||
jmp breturn
|
||||
b19:
|
||||
@ -242,16 +210,3 @@ initscreen: {
|
||||
!:
|
||||
rts
|
||||
}
|
||||
addpoint: {
|
||||
.label c = 2
|
||||
ldx numpoints
|
||||
sta XPOS,x
|
||||
tya
|
||||
ldy numpoints
|
||||
sta YPOS,y
|
||||
lda c
|
||||
ldx numpoints
|
||||
sta COLS,x
|
||||
inc numpoints
|
||||
rts
|
||||
}
|
||||
|
@ -4,208 +4,177 @@
|
||||
@end: scope:[] from @begin
|
||||
main: scope:[main] from @begin
|
||||
[1] phi() [ ]
|
||||
[2] call addpoint param-assignment [ ]
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main
|
||||
[3] call addpoint param-assignment [ numpoints#1 ]
|
||||
[2] call initscreen param-assignment [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[3] call render param-assignment [ ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[4] call addpoint param-assignment [ numpoints#1 ]
|
||||
main::@4: scope:[main] from main::@1
|
||||
[4] call animate param-assignment [ ]
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
[5] call addpoint param-assignment [ numpoints#1 ]
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
[6] call addpoint param-assignment [ numpoints#1 ]
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@6
|
||||
[7] call addpoint param-assignment [ numpoints#1 ]
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@7
|
||||
[8] call initscreen param-assignment [ numpoints#1 ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main::@11 main::@8
|
||||
[9] call render param-assignment [ numpoints#1 ]
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@1
|
||||
[10] call animate param-assignment [ numpoints#1 ]
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
[11] if(true) goto main::@1 [ numpoints#1 ]
|
||||
[5] if(true) goto main::@1 [ ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@11
|
||||
[12] return [ ]
|
||||
main::@return: scope:[main] from main::@5
|
||||
[6] return [ ]
|
||||
to:@return
|
||||
animate: scope:[animate] from main::@10
|
||||
[13] (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$0 ]
|
||||
[14] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ]
|
||||
[15] *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ]
|
||||
[16] (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$2 ]
|
||||
[17] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ]
|
||||
animate: scope:[animate] from main::@4
|
||||
[7] (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$0 ]
|
||||
[8] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ]
|
||||
[9] *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ]
|
||||
[10] (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$2 ]
|
||||
[11] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ]
|
||||
to:animate::@7
|
||||
animate::@7: scope:[animate] from animate
|
||||
[18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ]
|
||||
[12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ]
|
||||
to:animate::@1
|
||||
animate::@1: scope:[animate] from animate animate::@7
|
||||
[19] (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$5 ]
|
||||
[20] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ]
|
||||
[21] *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ]
|
||||
[22] (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$7 ]
|
||||
[23] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ]
|
||||
[13] (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$5 ]
|
||||
[14] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ]
|
||||
[15] *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ]
|
||||
[16] (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$7 ]
|
||||
[17] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ]
|
||||
to:animate::@8
|
||||
animate::@8: scope:[animate] from animate::@1
|
||||
[24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ]
|
||||
[18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ]
|
||||
to:animate::@2
|
||||
animate::@2: scope:[animate] from animate::@1 animate::@8
|
||||
[25] (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$10 ]
|
||||
[26] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ]
|
||||
[27] *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ]
|
||||
[28] (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$12 ]
|
||||
[29] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ]
|
||||
[19] (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$10 ]
|
||||
[20] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ]
|
||||
[21] *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ]
|
||||
[22] (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$12 ]
|
||||
[23] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ]
|
||||
to:animate::@9
|
||||
animate::@9: scope:[animate] from animate::@2
|
||||
[30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ]
|
||||
[24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ]
|
||||
to:animate::@3
|
||||
animate::@3: scope:[animate] from animate::@2 animate::@9
|
||||
[31] (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$15 ]
|
||||
[32] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ]
|
||||
[33] *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ]
|
||||
[34] (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$17 ]
|
||||
[35] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ]
|
||||
[25] (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$15 ]
|
||||
[26] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ]
|
||||
[27] *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ]
|
||||
[28] (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$17 ]
|
||||
[29] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ]
|
||||
to:animate::@10
|
||||
animate::@10: scope:[animate] from animate::@3
|
||||
[36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ]
|
||||
[30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ]
|
||||
to:animate::@4
|
||||
animate::@4: scope:[animate] from animate::@10 animate::@3
|
||||
[37] (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$20 ]
|
||||
[38] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ]
|
||||
[39] *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ]
|
||||
[40] (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$22 ]
|
||||
[41] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ]
|
||||
[31] (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$20 ]
|
||||
[32] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ]
|
||||
[33] *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ]
|
||||
[34] (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$22 ]
|
||||
[35] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ]
|
||||
to:animate::@11
|
||||
animate::@11: scope:[animate] from animate::@4
|
||||
[42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ]
|
||||
[43] (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$25 ]
|
||||
[44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ]
|
||||
[45] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ]
|
||||
[46] (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$27 ]
|
||||
[47] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ]
|
||||
[36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ]
|
||||
[37] (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$25 ]
|
||||
[38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ]
|
||||
[39] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ]
|
||||
[40] (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$27 ]
|
||||
[41] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ]
|
||||
to:animate::@12
|
||||
animate::@12: scope:[animate] from animate::@11
|
||||
[48] (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$30 ]
|
||||
[49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ]
|
||||
[50] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ]
|
||||
[42] (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$30 ]
|
||||
[43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ]
|
||||
[44] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ]
|
||||
to:animate::@return
|
||||
animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4
|
||||
[51] return [ ]
|
||||
[45] return [ ]
|
||||
to:@return
|
||||
render: scope:[render] from main::@1
|
||||
[52] phi() [ numpoints#1 ]
|
||||
[46] phi() [ ]
|
||||
to:render::@1
|
||||
render::@1: scope:[render] from render render::@3
|
||||
[53] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@3/(byte*) render::colline#1 ) [ render::y#2 render::colline#2 numpoints#1 ]
|
||||
[53] (byte) render::y#2 ← phi( render/(byte) 0 render::@3/(byte) render::y#1 ) [ render::y#2 render::colline#2 numpoints#1 ]
|
||||
[47] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@3/(byte*) render::colline#1 ) [ render::y#2 render::colline#2 ]
|
||||
[47] (byte) render::y#2 ← phi( render/(byte) 0 render::@3/(byte) render::y#1 ) [ render::y#2 render::colline#2 ]
|
||||
to:render::@2
|
||||
render::@2: scope:[render] from render::@1 render::@5
|
||||
[54] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@5/(byte) render::x#1 ) [ render::y#2 render::colline#2 render::x#2 numpoints#1 ]
|
||||
[55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ]
|
||||
[56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ]
|
||||
[57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ]
|
||||
[48] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@5/(byte) render::x#1 ) [ render::y#2 render::colline#2 render::x#2 ]
|
||||
[49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ]
|
||||
[50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ]
|
||||
[51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ]
|
||||
to:render::@5
|
||||
render::@5: scope:[render] from render::@2
|
||||
[58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ]
|
||||
[59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ]
|
||||
[60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ]
|
||||
[61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ]
|
||||
[52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ]
|
||||
[53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ]
|
||||
[54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ]
|
||||
[55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ]
|
||||
to:render::@3
|
||||
render::@3: scope:[render] from render::@5
|
||||
[62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ]
|
||||
[63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ]
|
||||
[64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ]
|
||||
[56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ]
|
||||
[57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ]
|
||||
[58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ]
|
||||
to:render::@return
|
||||
render::@return: scope:[render] from render::@3
|
||||
[65] return [ numpoints#1 ]
|
||||
[59] return [ ]
|
||||
to:@return
|
||||
findcol: scope:[findcol] from render::@2
|
||||
[66] phi() [ findcol::x#0 findcol::y#0 numpoints#1 ]
|
||||
[60] phi() [ findcol::x#0 findcol::y#0 ]
|
||||
to:findcol::@1
|
||||
findcol::@1: scope:[findcol] from findcol findcol::@19
|
||||
[67] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::mincol#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ]
|
||||
[67] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ]
|
||||
[67] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::i#1 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ]
|
||||
[68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ]
|
||||
[69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ]
|
||||
[70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ]
|
||||
[61] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::mincol#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ]
|
||||
[61] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ]
|
||||
[61] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::i#1 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ]
|
||||
[62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ]
|
||||
[63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ]
|
||||
[64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ]
|
||||
to:findcol::@9
|
||||
findcol::@9: scope:[findcol] from findcol::@1
|
||||
[71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ]
|
||||
[65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ]
|
||||
to:findcol::@return
|
||||
findcol::@return: scope:[findcol] from findcol::@8 findcol::@9
|
||||
[72] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@8/(byte) findcol::mincol#2 ) [ findcol::return#0 numpoints#1 ]
|
||||
[73] return [ findcol::return#0 numpoints#1 ]
|
||||
[66] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@8/(byte) findcol::mincol#2 ) [ findcol::return#0 ]
|
||||
[67] return [ findcol::return#0 ]
|
||||
to:@return
|
||||
findcol::@2: scope:[findcol] from findcol::@1 findcol::@9
|
||||
[74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ]
|
||||
[68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ]
|
||||
to:findcol::@12
|
||||
findcol::@12: scope:[findcol] from findcol::@2
|
||||
[75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ]
|
||||
[69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ]
|
||||
to:findcol::@5
|
||||
findcol::@5: scope:[findcol] from findcol::@12 findcol::@4
|
||||
[76] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ]
|
||||
[77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ]
|
||||
[70] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ]
|
||||
[71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ]
|
||||
to:findcol::@14
|
||||
findcol::@14: scope:[findcol] from findcol::@5
|
||||
[78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ]
|
||||
[79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ]
|
||||
[72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ]
|
||||
[73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ]
|
||||
to:findcol::@7
|
||||
findcol::@7: scope:[findcol] from findcol::@14 findcol::@6
|
||||
[80] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ]
|
||||
[81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ]
|
||||
[74] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ]
|
||||
[75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ]
|
||||
to:findcol::@16
|
||||
findcol::@16: scope:[findcol] from findcol::@7
|
||||
[82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ]
|
||||
[76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ]
|
||||
to:findcol::@8
|
||||
findcol::@8: scope:[findcol] from findcol::@16 findcol::@21
|
||||
[83] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ]
|
||||
[83] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ]
|
||||
[84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ]
|
||||
[85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ]
|
||||
[77] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ]
|
||||
[77] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ]
|
||||
[78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ]
|
||||
[79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ]
|
||||
to:findcol::@return
|
||||
findcol::@19: scope:[findcol] from findcol::@8
|
||||
[86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ]
|
||||
[80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ]
|
||||
to:findcol::@1
|
||||
findcol::@21: scope:[findcol] from findcol::@7
|
||||
[87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ]
|
||||
[81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ]
|
||||
to:findcol::@8
|
||||
findcol::@6: scope:[findcol] from findcol::@5
|
||||
[88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ]
|
||||
[89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ]
|
||||
[82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ]
|
||||
[83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ]
|
||||
to:findcol::@7
|
||||
findcol::@4: scope:[findcol] from findcol::@2
|
||||
[90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ]
|
||||
[84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ]
|
||||
to:findcol::@5
|
||||
initscreen: scope:[initscreen] from main::@8
|
||||
[91] phi() [ ]
|
||||
initscreen: scope:[initscreen] from main
|
||||
[85] phi() [ ]
|
||||
to:initscreen::@1
|
||||
initscreen::@1: scope:[initscreen] from initscreen initscreen::@1
|
||||
[92] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ]
|
||||
[93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ]
|
||||
[94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ]
|
||||
[95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ]
|
||||
[86] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ]
|
||||
[87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ]
|
||||
[88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ]
|
||||
[89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ]
|
||||
to:initscreen::@return
|
||||
initscreen::@return: scope:[initscreen] from initscreen::@1
|
||||
[96] return [ ]
|
||||
to:@return
|
||||
addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7
|
||||
[97] (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ]
|
||||
[97] (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ]
|
||||
[97] (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ]
|
||||
[97] (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ]
|
||||
[98] *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ]
|
||||
[99] *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 [ numpoints#19 addpoint::c#6 ]
|
||||
[100] *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ]
|
||||
[101] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ numpoints#1 ]
|
||||
to:addpoint::@return
|
||||
addpoint::@return: scope:[addpoint] from addpoint
|
||||
[102] return [ numpoints#1 ]
|
||||
[90] return [ ]
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,24 +2,16 @@
|
||||
(label) @end
|
||||
(byte*) COLORS
|
||||
(const byte*) COLORS#0 COLORS = (word) 55296
|
||||
(byte[256]) COLS
|
||||
(const byte[256]) COLS#0 COLS = (word) 4608
|
||||
(byte[]) COLS
|
||||
(const byte[]) COLS#0 COLS = { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 }
|
||||
(byte) FILL
|
||||
(const byte) FILL#0 FILL = (byte) 230
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(byte[256]) XPOS
|
||||
(const byte[256]) XPOS#0 XPOS = (word) 4096
|
||||
(byte[256]) YPOS
|
||||
(const byte[256]) YPOS#0 YPOS = (word) 4352
|
||||
(void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c)
|
||||
(label) addpoint::@return
|
||||
(byte) addpoint::c
|
||||
(byte) addpoint::c#6 c zp ZP_BYTE:2 0.6666666666666666
|
||||
(byte) addpoint::x
|
||||
(byte) addpoint::x#6 reg byte a 2.0
|
||||
(byte) addpoint::y
|
||||
(byte) addpoint::y#6 reg byte y 1.0
|
||||
(byte[]) XPOS
|
||||
(const byte[]) XPOS#0 XPOS = { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 }
|
||||
(byte[]) YPOS
|
||||
(const byte[]) YPOS#0 YPOS = { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 }
|
||||
(void()) animate()
|
||||
(byte~) animate::$0 reg byte a 4.0
|
||||
(byte~) animate::$1 reg byte a 4.0
|
||||
@ -91,13 +83,13 @@
|
||||
(byte) findcol::return
|
||||
(byte) findcol::return#0 reg byte y 3667.333333333333
|
||||
(byte) findcol::x
|
||||
(byte) findcol::x#0 x zp ZP_BYTE:9 1640.2
|
||||
(byte) findcol::x#0 x zp ZP_BYTE:8 1640.2
|
||||
(byte) findcol::xp
|
||||
(byte) findcol::xp#0 xp zp ZP_BYTE:7 10001.0
|
||||
(byte) findcol::y
|
||||
(byte) findcol::y#0 y zp ZP_BYTE:10 1708.5416666666665
|
||||
(byte) findcol::y#0 y zp ZP_BYTE:9 1708.5416666666665
|
||||
(byte) findcol::yp
|
||||
(byte) findcol::yp#0 yp zp ZP_BYTE:11 6250.625
|
||||
(byte) findcol::yp#0 yp zp ZP_BYTE:10 6250.625
|
||||
(void()) initscreen()
|
||||
(label) initscreen::@1
|
||||
(label) initscreen::@return
|
||||
@ -106,18 +98,11 @@
|
||||
(byte*) initscreen::screen#2 screen zp ZP_PTR_BYTE:3 16.5
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@10
|
||||
(label) main::@11
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(label) main::@6
|
||||
(label) main::@7
|
||||
(label) main::@8
|
||||
(label) main::@return
|
||||
(byte) numpoints
|
||||
(byte) numpoints#1 numpoints zp ZP_BYTE:8 200.25999999999996
|
||||
(byte) numpoints#19 numpoints zp ZP_BYTE:8 4.5
|
||||
(const byte) numpoints#0 numpoints = (byte) 6
|
||||
(void()) render()
|
||||
(label) render::@1
|
||||
(label) render::@2
|
||||
@ -136,7 +121,7 @@
|
||||
(byte) render::y#1 y zp ZP_BYTE:2 151.5
|
||||
(byte) render::y#2 y zp ZP_BYTE:2 120.29999999999998
|
||||
|
||||
zp ZP_BYTE:2 [ render::y#2 render::y#1 addpoint::c#6 ]
|
||||
zp ZP_BYTE:2 [ render::y#2 render::y#1 ]
|
||||
zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 initscreen::screen#2 initscreen::screen#1 ]
|
||||
zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
|
||||
reg byte x [ findcol::i#12 findcol::i#1 ]
|
||||
@ -144,9 +129,6 @@ zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ]
|
||||
reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ]
|
||||
zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ]
|
||||
reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ]
|
||||
reg byte a [ addpoint::x#6 ]
|
||||
zp ZP_BYTE:8 [ numpoints#19 numpoints#1 ]
|
||||
reg byte y [ addpoint::y#6 ]
|
||||
reg byte a [ animate::$0 ]
|
||||
reg byte a [ animate::$1 ]
|
||||
reg byte a [ animate::$2 ]
|
||||
@ -167,9 +149,9 @@ reg byte a [ animate::$26 ]
|
||||
reg byte a [ animate::$27 ]
|
||||
reg byte a [ animate::$30 ]
|
||||
reg byte a [ animate::$31 ]
|
||||
zp ZP_BYTE:9 [ findcol::x#0 ]
|
||||
zp ZP_BYTE:10 [ findcol::y#0 ]
|
||||
zp ZP_BYTE:8 [ findcol::x#0 ]
|
||||
zp ZP_BYTE:9 [ findcol::y#0 ]
|
||||
reg byte a [ render::col#0 ]
|
||||
zp ZP_BYTE:11 [ findcol::yp#0 ]
|
||||
zp ZP_BYTE:10 [ findcol::yp#0 ]
|
||||
reg byte a [ findcol::$12 ]
|
||||
reg byte a [ findcol::$14 ]
|
||||
|
@ -24,7 +24,7 @@ void main() {
|
||||
}
|
||||
// Render next char
|
||||
byte c = *nxt;
|
||||
if(c==0) {
|
||||
if(c=='@') {
|
||||
nxt = TEXT;
|
||||
c = *nxt;
|
||||
}
|
||||
|
@ -5,22 +5,16 @@ byte *COLORS = $D800;
|
||||
byte FILL = 230;
|
||||
|
||||
// The total number of voronoi points
|
||||
byte numpoints = 0;
|
||||
byte numpoints = 6;
|
||||
|
||||
// Points to create the Voronoi from
|
||||
byte[$100] XPOS = $1000;
|
||||
byte[$100] YPOS = $1100;
|
||||
byte[$100] COLS = $1200;
|
||||
byte[] XPOS = {5, 15, 6, 34, 21 ,31};
|
||||
byte[] YPOS = {5, 8, 14, 2, 17, 22};
|
||||
byte[] COLS = {1, 2, 3, 4, 5, 7};
|
||||
|
||||
main();
|
||||
|
||||
void main() {
|
||||
addpoint(5, 5, 1);
|
||||
addpoint(15, 8, 2);
|
||||
addpoint(6, 14, 3);
|
||||
addpoint(34, 2, 4);
|
||||
addpoint(21, 17, 5);
|
||||
addpoint(31, 22, 7);
|
||||
initscreen();
|
||||
do {
|
||||
render();
|
||||
@ -55,13 +49,6 @@ void animate() {
|
||||
}
|
||||
}
|
||||
|
||||
void addpoint(byte x, byte y, byte c) {
|
||||
XPOS[numpoints] = x;
|
||||
YPOS[numpoints] = y;
|
||||
COLS[numpoints] = c;
|
||||
numpoints++;
|
||||
}
|
||||
|
||||
void initscreen() {
|
||||
for( byte* screen = SCREEN; screen<SCREEN+$03e8; ++screen) {
|
||||
*screen = FILL;
|
||||
|
Loading…
Reference in New Issue
Block a user