Inline parses correctly now

This commit is contained in:
Ne_Eo
2024-09-03 13:10:13 +02:00
parent 933c9cb5e3
commit f8e00859cd
2 changed files with 74 additions and 18 deletions
+2 -2
View File
@@ -56,7 +56,7 @@ enum Expr {
#end
EConst( c : Const );
EIdent( v : String );
EVar( n : String, ?t : CType, ?e : Expr, ?isPublic : Bool, ?isStatic : Bool, ?isPrivate : Bool );
EVar( n : String, ?t : CType, ?e : Expr, ?isPublic : Bool, ?isStatic : Bool, ?isPrivate : Bool, ?isFinal : Bool, ?isInline : Bool );
EParent( e : Expr );
EBlock( e : Array<Expr> );
EField( e : Expr, f : String , ?safe : Bool );
@@ -68,7 +68,7 @@ enum Expr {
EFor( v : String, it : Expr, e : Expr, ?ithv: String);
EBreak;
EContinue;
EFunction( args : Array<Argument>, e : Expr, ?name : String, ?ret : CType, ?isPublic : Bool, ?isStatic : Bool, ?isOverride : Bool, ?isPrivate : Bool, ?isFinal : Bool );
EFunction( args : Array<Argument>, e : Expr, ?name : String, ?ret : CType, ?isPublic : Bool, ?isStatic : Bool, ?isOverride : Bool, ?isPrivate : Bool, ?isFinal : Bool, ?isInline : Bool );
EReturn( ?e : Expr );
EArray( e : Expr, index : Expr );
EArrayDecl( e : Array<Expr>, ?wantedType: CType );
+72 -16
View File
@@ -600,6 +600,7 @@ class Parser {
var nextIsPublic:Bool = false;
var nextIsPrivate:Bool = false;
var nextIsFinal:Bool = false;
var nextIsInline:Bool = false;
var nextType:CType = null;
function parseStructure(id, ?oldPos:Int) {
#if hscriptPos
@@ -653,6 +654,10 @@ class Parser {
var str = parseStructure("private"); // override private
nextIsOverride = false;
str;
case TId("inline"):
var str = parseStructure("inline"); // override inline
nextIsOverride = false;
str;
default:
unexpected(nextToken);
nextIsOverride = false;
@@ -686,6 +691,10 @@ class Parser {
var str = parseStructure("private"); // static private
nextIsStatic = false;
str;
case TId("inline"):
var str = parseStructure("inline"); // static inline
nextIsStatic = false;
str;
default:
unexpected(nextToken);
nextIsStatic = false;
@@ -723,6 +732,10 @@ class Parser {
// var str = parseStructure("private"); // public private
// nextIsPublic = false;
// str;
case TId("inline"):
var str = parseStructure("inline"); // public inline
nextIsPublic = false;
str;
default:
unexpected(nextToken);
nextIsPublic = false;
@@ -756,26 +769,69 @@ class Parser {
var str = parseStructure("class"); // private class
nextIsPrivate = false;
str;
case TId("inline"):
var str = parseStructure("inline"); // private inline
nextIsPrivate = false;
str;
default:
unexpected(nextToken);
nextIsPrivate = false;
null;
}
case "var" | "final":
case "inline":
nextIsInline = true;
var nextToken = token();
switch(nextToken) {
case TId("class"):
nextIsFinal = true;
var str = parseStructure("class"); // var class
nextIsFinal = false;
return str;
case TId("static"):
var str = parseStructure("static"); // inline static
nextIsInline = false;
str;
case TId("function"):
nextIsFinal = true;
var str = parseStructure("function"); // var function
nextIsFinal = false;
return str;
var str = parseStructure("function"); // inline function
nextIsInline = false;
str;
case TId("override"):
var str = parseStructure("override"); // inline override
nextIsInline = false;
str;
case TId("var"):
var str = parseStructure("var"); // inline var
nextIsInline = false;
str;
case TId("final"):
var str = parseStructure("final"); // inline final
nextIsInline = false;
str;
case TId("class"):
var str = parseStructure("class"); // inline class
nextIsInline = false;
str;
case TId("private"): // inline private
var str = parseStructure("private"); // inline private
nextIsInline = false;
str;
default:
push(nextToken);
unexpected(nextToken);
nextIsInline = false;
null;
}
case "var" | "final":
if(id == "final") {
var nextToken = token();
switch(nextToken) {
case TId("class"):
nextIsFinal = true;
var str = parseStructure("class"); // final class
nextIsFinal = false;
return str;
case TId("function"):
nextIsFinal = true;
var str = parseStructure("function"); // final function
nextIsFinal = false;
return str;
default:
push(nextToken);
}
}
var ident = getIdent();
var tk = token();
@@ -793,7 +849,7 @@ class Parser {
else
push(tk);
nextType = null;
mk(EVar(ident, t, e, nextIsPublic, nextIsStatic, nextIsPrivate), p1, (e == null) ? tokenMax : pmax(e));
mk(EVar(ident, t, e, nextIsPublic, nextIsStatic, nextIsPrivate, id == "final", nextIsInline), p1, (e == null) ? tokenMax : pmax(e));
case "while":
var econd = parseExpr();
var e = parseExpr();
@@ -828,9 +884,9 @@ class Parser {
case "break": mk(EBreak);
case "continue": mk(EContinue);
case "else": unexpected(TId(id));
case "inline":
if( !maybe(TId("function")) ) unexpected(TId("inline"));
return parseStructure("function");
//case "inline":
// if( !maybe(TId("function")) ) unexpected(TId("inline"));
// return parseStructure("function");
case "function":
var tk = token();
var name = null;
@@ -842,7 +898,7 @@ class Parser {
var tk = token();
push(tk);
mk(EFunction(inf.args, inf.body, name, inf.ret, nextIsPublic, nextIsStatic, nextIsOverride, nextIsPrivate, nextIsFinal),p1,pmax(inf.body));
mk(EFunction(inf.args, inf.body, name, inf.ret, nextIsPublic, nextIsStatic, nextIsOverride, nextIsPrivate, nextIsFinal, nextIsInline),p1,pmax(inf.body));
case "import":
var oldReadPos = readPos;
var tk = token();