Added private syntax sugar, custom class fix
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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)]);
|
||||
|
||||
Reference in New Issue
Block a user