"null" access handling + get/set for variables

- It handles "null" allowing access only inside of the class.

- "final" variables can be initialized in the constructor if they doesn't have a default value.

- "var a(get, set):Int" is parsed outside of Custom Class, but for now it doesn't call their accessors.

almost finished :3
This commit is contained in:
Jaime Humberto Macias Bustamante
2025-05-13 00:38:11 -07:00
parent 19b5b2b049
commit 8dce40354a
5 changed files with 158 additions and 54 deletions
+30 -4
View File
@@ -275,7 +275,9 @@ class Interp {
public function setVar(name:String, v:Dynamic):Void {
if (_inCustomClass && _proxy.superClass != null) {
if (_proxy.superIsCustomClass) {
_proxy.__allowInnerAccess = true;
cast(_proxy.superClass, CustomClass).hset(name, v);
_proxy.__allowInnerAccess = false;
}
else if (_proxy.superHasField(name)) {
Reflect.setProperty(_proxy.superClass, name, v);
@@ -299,7 +301,9 @@ class Interp {
if (_inCustomClass) {
if (_proxy.__class.hasField(id)) {
var v = expr(e2);
_proxy.__class.__allowInnerAccess = true;
_proxy.__class.hset(id, v);
_proxy.__class.__allowInnerAccess = false;
return v;
}
/*
@@ -324,7 +328,9 @@ class Interp {
else {
try {
var v = expr(e2);
_proxy.__allowInnerAccess = true;
_proxy.hset(id, v); // superClass check already handled in Custom Class
_proxy.__allowInnerAccess = false;
return v;
}
catch(e) {}
@@ -405,7 +411,9 @@ class Interp {
else {
try {
var v = expr(e2);
_proxy.__allowInnerAccess = true;
_proxy.hset(f, v);
_proxy.__allowInnerAccess = false;
return v;
}
catch(e){}
@@ -448,7 +456,9 @@ class Interp {
// Also ensures property functions are accounted for.
if(_inCustomClass) {
if (_proxy.__class.hasField(id)) {
_proxy.__class.__allowInnerAccess = true;
_proxy.__class.hset(id, v);
_proxy.__class.__allowInnerAccess = false;
return v;
}
/*
@@ -467,7 +477,9 @@ class Interp {
}
else {
try {
_proxy.__allowInnerAccess = true;
_proxy.hset(id, v); // superClass check already handled in Custom Class
_proxy.__allowInnerAccess = false;
return v;
}
catch(e) {}
@@ -552,7 +564,9 @@ class Interp {
else {
try {
v = fop(get(obj, f), expr(e2));
_proxy.__allowInnerAccess = true;
_proxy.hset(f, v); // superClass check already handled in Custom Class
_proxy.__allowInnerAccess = false;
return v;
}
catch(e) {}
@@ -762,11 +776,20 @@ class Interp {
// Custom Class
if (_inCustomClass) {
// Static access
if (_proxy.__class.hasField(id))
return _proxy.__class.hget(id);
if (_proxy.__class.hasField(id)) {
_proxy.__class.__allowInnerAccess = true;
var r = _proxy.__class.hget(id);
_proxy.__class.__allowInnerAccess = false;
return r;
}
if (_proxy.hasVar(id))
return _proxy.hget(id);
if (_proxy.hasVar(id)) {
_proxy.__allowInnerAccess = true;
var r = _proxy.hget(id);
_proxy.__allowInnerAccess = false;
return r;
}
// We are calling a LOCAL function from the same module.
if (_proxy.hasFunction(id)) {
_nextCallObject = _proxy;
@@ -777,12 +800,15 @@ class Interp {
return Reflect.getProperty(_proxy.superClass, id);
} else {
try {
_proxy.__allowInnerAccess = true;
var r = _proxy.hget(id);
_nextCallObject = _proxy;
_proxy.__allowInnerAccess = false;
return r;
} catch (e:Dynamic) {
if(doException)
error(EUnknownVariable(id));
_proxy.__allowInnerAccess = false;
}
}
}