"cast" syntax support
- Now it parses unsafe/safe cast. For now it's just sugar syntax.
This commit is contained in:
@@ -130,6 +130,8 @@ class Bytes {
|
|||||||
// TODO
|
// TODO
|
||||||
case EEnum(en):
|
case EEnum(en):
|
||||||
// TODO
|
// TODO
|
||||||
|
case ECast(e, _):
|
||||||
|
// TODO
|
||||||
case EConst(c):
|
case EConst(c):
|
||||||
doEncodeConst(c);
|
doEncodeConst(c);
|
||||||
case EIdent(v):
|
case EIdent(v):
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ enum Expr {
|
|||||||
EImport( c : String, ?asname:String, ?isUsing:Bool );
|
EImport( c : String, ?asname:String, ?isUsing:Bool );
|
||||||
EClass( name:String, fields:Array<Expr>, ?extend:String, interfaces:Array<String>, ?isFinal:Bool, ?isPrivate:Bool );
|
EClass( name:String, fields:Array<Expr>, ?extend:String, interfaces:Array<String>, ?isFinal:Bool, ?isPrivate:Bool );
|
||||||
EEnum( en:EnumDecl, ?isAbstract:Bool );
|
EEnum( en:EnumDecl, ?isAbstract:Bool );
|
||||||
|
ECast(e:Expr, ?t:CType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@:structInit
|
@:structInit
|
||||||
|
|||||||
@@ -882,6 +882,8 @@ class Interp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
variables.set(en.name, enumThingy);
|
variables.set(en.name, enumThingy);
|
||||||
|
case ECast(e, _): // TODO
|
||||||
|
return expr(e);
|
||||||
case EConst(c):
|
case EConst(c):
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case CInt(v): return v;
|
case CInt(v): return v;
|
||||||
|
|||||||
+16
-1
@@ -1146,7 +1146,22 @@ class Parser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mk(EEnum({ name: name, fields: fields }, false), p1);
|
mk(EEnum({ name: name, fields: fields }, false), p1);
|
||||||
|
case "cast":
|
||||||
|
var tk = token();
|
||||||
|
var e:Expr = null;
|
||||||
|
var t:CType = null; // null if is unsafe cast
|
||||||
|
switch(tk) {
|
||||||
|
case TPOpen:
|
||||||
|
e = parseExpr();
|
||||||
|
ensure(TComma);
|
||||||
|
t = parseType();
|
||||||
|
ensure(TPClose);
|
||||||
|
default:
|
||||||
|
push(tk);
|
||||||
|
e = parseExpr();
|
||||||
|
}
|
||||||
|
|
||||||
|
mk(ECast(e, t));
|
||||||
case "return":
|
case "return":
|
||||||
var tk = token();
|
var tk = token();
|
||||||
push(tk);
|
push(tk);
|
||||||
|
|||||||
@@ -171,6 +171,16 @@ class Printer {
|
|||||||
|
|
||||||
tabs = tabs.substr(1);
|
tabs = tabs.substr(1);
|
||||||
add("}");
|
add("}");
|
||||||
|
case ECast(e, t):
|
||||||
|
var safe = t != null;
|
||||||
|
add("cast ");
|
||||||
|
if(safe) add("(");
|
||||||
|
expr(e);
|
||||||
|
if(safe) {
|
||||||
|
add(", ");
|
||||||
|
addType(t);
|
||||||
|
add(")");
|
||||||
|
}
|
||||||
case EConst(c):
|
case EConst(c):
|
||||||
switch( c ) {
|
switch( c ) {
|
||||||
case CInt(i): add(i);
|
case CInt(i): add(i);
|
||||||
|
|||||||
Reference in New Issue
Block a user