Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48ec0f4b01 | ||
|
|
49c90e6434 | ||
|
|
bb46d45d56 | ||
|
|
3a5c4f2164 | ||
|
|
f18c7a2210 | ||
|
|
123a7de64a | ||
|
|
e0e1436930 |
@@ -1,2 +1,4 @@
|
||||
/hscript.swf
|
||||
/release.zip
|
||||
|
||||
tests/bin/*
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "hscript",
|
||||
"name": "hscript-improved",
|
||||
"url": "https://github.com/HaxeFoundation/hscript",
|
||||
"license": "MIT",
|
||||
"description": "Haxe Script is a scripting engine for a subset of the Haxe language",
|
||||
|
||||
+20
-1
@@ -183,7 +183,7 @@ class Interp {
|
||||
assignOp("<<=", function(v1, v2) return v1 << v2);
|
||||
assignOp(">>=", function(v1, v2) return v1 >> v2);
|
||||
assignOp(">>>=", function(v1, v2) return v1 >>> v2);
|
||||
assignOp("??=", function(v1, v2) return v1 == null ? v2 : v1);
|
||||
assignOp("??" + "=", function(v1, v2) return v1 == null ? v2 : v1);
|
||||
}
|
||||
|
||||
function checkIsType(e1,e2): Bool {
|
||||
@@ -473,6 +473,21 @@ class Interp {
|
||||
return v;
|
||||
}
|
||||
|
||||
public static var importRedirects:Map<String, String> = new Map();
|
||||
public static function getImportRedirect(className:String):String {
|
||||
return importRedirects.exists(className) ? importRedirects.get(className) : className;
|
||||
}
|
||||
|
||||
public var localImportRedirects:Map<String, String> = new Map();
|
||||
public function getLocalImportRedirect(className:String):String {
|
||||
var className = className;
|
||||
if (importRedirects.exists(className))
|
||||
className = importRedirects.get(className);
|
||||
if (localImportRedirects.exists(className))
|
||||
className = localImportRedirects.get(className);
|
||||
return className;
|
||||
}
|
||||
|
||||
public function expr(e:Expr):Dynamic {
|
||||
#if hscriptPos
|
||||
curExpr = e;
|
||||
@@ -503,6 +518,8 @@ class Interp {
|
||||
if (variables.exists(toSetName)) // class is already imported
|
||||
return null;
|
||||
|
||||
var realClassName = getLocalImportRedirect(realClassName);
|
||||
|
||||
if (importBlocklist.contains(realClassName))
|
||||
return null;
|
||||
var cl = Type.resolveClass(realClassName);
|
||||
@@ -519,6 +536,8 @@ class Interp {
|
||||
splitClassName.splice(-2, 1); // Remove the last last item
|
||||
realClassName = splitClassName.join(".");
|
||||
|
||||
var realClassName = getLocalImportRedirect(realClassName);
|
||||
|
||||
if (importBlocklist.contains(realClassName))
|
||||
return null;
|
||||
|
||||
|
||||
+15
-7
@@ -60,10 +60,10 @@ class Parser {
|
||||
/**
|
||||
allows to check for #if / #else in code
|
||||
**/
|
||||
public var preprocesorValues : Map<String,Dynamic> = new Map();
|
||||
public var preprocessorValues : Map<String,Dynamic> = new Map();
|
||||
|
||||
/**
|
||||
activate JSON compatiblity
|
||||
activate JSON compatibility
|
||||
**/
|
||||
public var allowJSON : Bool;
|
||||
|
||||
@@ -126,7 +126,7 @@ class Parser {
|
||||
["..."],
|
||||
["&&"],
|
||||
["||"],
|
||||
["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","&=","^=","=>","??="],
|
||||
["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","&=","^=","=>","??" + "="],
|
||||
["->", "??"],
|
||||
["is"]
|
||||
];
|
||||
@@ -1815,7 +1815,7 @@ class Parser {
|
||||
case '?'.code:
|
||||
var orp = readPos;
|
||||
if (readChar() == '='.code)
|
||||
return TOp("??=");
|
||||
return TOp("??" + "=");
|
||||
|
||||
this.readPos = orp;
|
||||
return TOp("??");
|
||||
@@ -2003,9 +2003,14 @@ class Parser {
|
||||
var pos = readPos;
|
||||
while( true ) {
|
||||
var tk = token();
|
||||
// TODO: Fix ending in with #end in the file
|
||||
if( tk == TEof )
|
||||
error(EInvalidPreprocessor("Unclosed"), pos, pos);
|
||||
|
||||
if( tk == TEof ) {
|
||||
if (preprocStack.length != 0) {
|
||||
error(EInvalidPreprocessor("Unclosed"), pos, pos);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( preprocStack[spos] != obj ) {
|
||||
push(tk);
|
||||
break;
|
||||
@@ -2089,4 +2094,7 @@ class Parser {
|
||||
}
|
||||
}
|
||||
|
||||
@:noCompletion public var preprocesorValues(get,set) : Map<String,Dynamic>;
|
||||
inline function get_preprocesorValues() return this.preprocessorValues;
|
||||
inline function set_preprocesorValues(v) return this.preprocessorValues = v;
|
||||
}
|
||||
|
||||
@@ -144,12 +144,16 @@ class ClassExtendMacro {
|
||||
|
||||
//trace(getModuleName(cl));
|
||||
|
||||
var hasNew = false;
|
||||
|
||||
for(_field in [fields.copy(), superFields.copy()])
|
||||
for(f in _field) {
|
||||
if (f == null)
|
||||
continue;
|
||||
if (f.name == "new")
|
||||
if (f.name == "new") {
|
||||
hasNew = true;
|
||||
continue;
|
||||
}
|
||||
if (f.name.startsWith(FUNC_PREFIX))
|
||||
continue;
|
||||
if (f.access.contains(ADynamic) || f.access.contains(AStatic) || f.access.contains(AExtern) || f.access.contains(AInline))
|
||||
@@ -253,6 +257,13 @@ class ClassExtendMacro {
|
||||
}
|
||||
}
|
||||
|
||||
var totalFields = definedFields.length;
|
||||
|
||||
if(totalFields == 0 && !hasNew) {
|
||||
//Sys.println(cl.pack.join(".") + "." + cl.name + ", " + totalFields);
|
||||
return fields;
|
||||
}
|
||||
|
||||
shadowClass.kind = TDClass({
|
||||
pack: cl.pack.copy(),
|
||||
name: cl.name
|
||||
@@ -341,7 +352,7 @@ class ClassExtendMacro {
|
||||
this.__interp.variables.set(name, val);
|
||||
return val;
|
||||
}
|
||||
return super.hset(this, name);
|
||||
return super.hset(name, val);
|
||||
}
|
||||
} else {
|
||||
macro {
|
||||
|
||||
Reference in New Issue
Block a user