Added private syntax sugar, custom class fix

This commit is contained in:
Ne_Eo
2024-09-03 02:03:31 +02:00
parent a565cb7b2a
commit 644c75094e
4 changed files with 74 additions and 8 deletions
+5
View File
@@ -57,6 +57,11 @@ class CustomClassHandler implements IHScriptCustomConstructor {
interp.variables.set(key, value);
}
}
for(key => value in ogInterp.customClasses) {
if(!disallowCopy.contains(key)) {
interp.customClasses.set(key, value);
}
}
//trace("Before: " + [for(key => value in interp.variables) key]);
+3 -3
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 );
EVar( n : String, ?t : CType, ?e : Expr, ?isPublic : Bool, ?isStatic : Bool, ?isPrivate : 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 );
EFunction( args : Array<Argument>, e : Expr, ?name : String, ?ret : CType, ?isPublic : Bool, ?isStatic : Bool, ?isOverride : Bool, ?isPrivate : Bool );
EReturn( ?e : Expr );
EArray( e : Expr, index : Expr );
EArrayDecl( e : Array<Expr>, ?wantedType: CType );
@@ -83,7 +83,7 @@ enum Expr {
ECheckType( e : Expr, t : CType );
EImport( c : String, ?asname:String );
EClass( name:String, fields:Array<Expr>, ?extend:String, interfaces:Array<String> );
EClass( name:String, fields:Array<Expr>, ?extend:String, interfaces:Array<String>, ?isFinal:Bool, ?isPrivate:Bool );
}
@:structInit
+64 -3
View File
@@ -598,6 +598,8 @@ class Parser {
var nextIsOverride:Bool = false;
var nextIsStatic:Bool = false;
var nextIsPublic:Bool = false;
var nextIsPrivate:Bool = false;
var nextIsFinal:Bool = false;
var nextType:CType = null;
function parseStructure(id, ?oldPos:Int) {
#if hscriptPos
@@ -647,6 +649,10 @@ class Parser {
var str = parseStructure("final"); // override final
nextIsOverride = false;
str;
case TId("private"):
var str = parseStructure("private"); // override private
nextIsOverride = false;
str;
default:
unexpected(nextToken);
nextIsOverride = false;
@@ -676,6 +682,10 @@ class Parser {
var str = parseStructure("final"); // static final
nextIsStatic = false;
str;
case TId("private"):
var str = parseStructure("private"); // static private
nextIsStatic = false;
str;
default:
unexpected(nextToken);
nextIsStatic = false;
@@ -705,12 +715,63 @@ class Parser {
var str = parseStructure("final"); // public final
nextIsPublic = false;
str;
case TId("class"):
var str = parseStructure("class"); // public class
nextIsPublic = false;
str;
//case TId("private"):
// var str = parseStructure("private"); // public private
// nextIsPublic = false;
// str;
default:
unexpected(nextToken);
nextIsPublic = false;
null;
}
case "private":
nextIsPrivate = true;
var nextToken = token();
switch(nextToken) {
case TId("static"):
var str = parseStructure("static"); // private static
nextIsPrivate = false;
str;
case TId("function"):
var str = parseStructure("function"); // private function
nextIsPrivate = false;
str;
case TId("override"):
var str = parseStructure("override"); // private override
nextIsPrivate = false;
str;
case TId("var"):
var str = parseStructure("var"); // private var
nextIsPrivate = false;
str;
case TId("final"):
var str = parseStructure("final"); // private final
nextIsPrivate = false;
str;
case TId("class"):
var str = parseStructure("class"); // private class
nextIsPrivate = false;
str;
default:
unexpected(nextToken);
nextIsPrivate = false;
null;
}
case "var" | "final":
var nextToken = token();
switch(nextToken) {
case TId("class"):
nextIsFinal = true;
var str = parseStructure("class"); // var class
nextIsFinal = false;
return str;
default:
push(nextToken);
}
var ident = getIdent();
var tk = token();
var t = null;
@@ -727,7 +788,7 @@ class Parser {
else
push(tk);
nextType = null;
mk(EVar(ident, t, e, nextIsPublic, nextIsStatic), p1, (e == null) ? tokenMax : pmax(e));
mk(EVar(ident, t, e, nextIsPublic, nextIsStatic, nextIsPrivate), p1, (e == null) ? tokenMax : pmax(e));
case "while":
var econd = parseExpr();
var e = parseExpr();
@@ -776,7 +837,7 @@ class Parser {
var tk = token();
push(tk);
mk(EFunction(inf.args, inf.body, name, inf.ret, nextIsPublic, nextIsStatic, nextIsOverride),p1,pmax(inf.body));
mk(EFunction(inf.args, inf.body, name, inf.ret, nextIsPublic, nextIsStatic, nextIsOverride, nextIsPrivate),p1,pmax(inf.body));
case "import":
var oldReadPos = readPos;
var tk = token();
@@ -917,7 +978,7 @@ class Parser {
var tk = token();
push(tk);
mk(EClass(name, fields, extend, interfaces), p1);
mk(EClass(name, fields, extend, interfaces, nextIsFinal, nextIsPrivate), p1);
case "return":
var tk = token();
+2 -2
View File
@@ -66,7 +66,7 @@ class Tools {
public static function map( e : Expr, f : Expr -> Expr ) {
var edef = switch( expr(e) ) {
case EConst(_), EIdent(_), EBreak, EContinue: expr(e);
case EVar(n, t, e): EVar(n, t, if( e != null ) f(e) else null);
case EVar(n, t, e, isPublic, isStatic, isPrivate): EVar(n, t, if( e != null ) f(e) else null, isPublic, isStatic, isPrivate);
case EParent(e): EParent(f(e));
case EBlock(el): EBlock([for( e in el ) f(e)]);
case EField(e, fi): EField(f(e),fi);
@@ -77,7 +77,7 @@ class Tools {
case EWhile(c, e): EWhile(f(c),f(e));
case EDoWhile(c, e): EDoWhile(f(c),f(e));
case EFor(v, it, e): EFor(v, f(it), f(e));
case EFunction(args, e, name, t): EFunction(args, f(e), name, t);
case EFunction(args, e, name, t, isPublic, isStatic, isOverride, isPrivate): EFunction(args, f(e), name, t, isPublic, isStatic, isOverride, isPrivate);
case EReturn(e): EReturn(if( e != null ) f(e) else null);
case EArray(e, i): EArray(f(e),f(i));
case EArrayDecl(el): EArrayDecl([for( e in el ) f(e)]);