hscriptPos changes

This commit is contained in:
ncannasse
2018-09-21 10:47:20 +02:00
parent 56ddc3c24e
commit 5bc357b4b3
3 changed files with 23 additions and 20 deletions
+1
View File
@@ -40,6 +40,7 @@ typedef Expr = {
}
enum ExprDef {
#else
typedef ExprDef = Expr;
enum Expr {
#end
EConst( c : Const );
+5 -13
View File
@@ -122,7 +122,7 @@ class Interp {
function assign( e1 : Expr, e2 : Expr ) : Dynamic {
var v = expr(e2);
switch( edef(e1) ) {
switch( Tools.expr(e1) ) {
case EIdent(id):
var l = locals.get(id);
if( l == null )
@@ -154,7 +154,7 @@ class Interp {
function evalAssignOp(op,fop,e1,e2) : Dynamic {
var v;
switch( edef(e1) ) {
switch( Tools.expr(e1) ) {
case EIdent(id):
var l = locals.get(id);
v = fop(expr(e1),expr(e2));
@@ -280,14 +280,6 @@ class Interp {
}
}
inline function edef( e : Expr ) {
#if hscriptPos
return e.e;
#else
return e;
#end
}
inline function error(e : #if hscriptPos ErrorDef #else Error #end, rethrow=false ) : Dynamic {
#if hscriptPos var e = new Error(e, curExpr.pmin, curExpr.pmax, curExpr.origin, curExpr.line); #end
if( rethrow ) this.rethrow(e) else throw e;
@@ -372,7 +364,7 @@ class Interp {
for( p in params )
args.push(expr(p));
switch( edef(e) ) {
switch( Tools.expr(e) ) {
case EField(e,f):
var obj = expr(e);
if( obj == null ) error(EInvalidAccess(f));
@@ -468,7 +460,7 @@ class Interp {
}
return f;
case EArrayDecl(arr):
if (arr.length > 0 && edef(arr[0]).match(EBinop("=>", _))) {
if (arr.length > 0 && Tools.expr(arr[0]).match(EBinop("=>", _))) {
var isAllString:Bool = true;
var isAllInt:Bool = true;
var isAllObject:Bool = true;
@@ -476,7 +468,7 @@ class Interp {
var keys:Array<Dynamic> = [];
var values:Array<Dynamic> = [];
for (e in arr) {
switch(edef(e)) {
switch(Tools.expr(e)) {
case EBinop("=>", eKey, eValue): {
var key:Dynamic = expr(eKey);
var value:Dynamic = expr(eValue);
+17 -7
View File
@@ -25,7 +25,7 @@ import hscript.Expr;
class Tools {
public static function iter( e : Expr, f : Expr -> Void ) {
switch( #if hscriptPos e.e #else e #end ) {
switch( expr(e) ) {
case EConst(_), EIdent(_):
case EVar(_, _, e): if( e != null ) f(e);
case EParent(e): f(e);
@@ -61,12 +61,8 @@ class Tools {
}
public static function map( e : Expr, f : Expr -> Expr ) {
#if hscriptPos
var edef = switch( e.e ) {
#else
return switch( e ) {
#end
case EConst(_), EIdent(_), EBreak, EContinue: #if hscriptPos e.e #else e #end;
case EConst(_), EIdent(_), EBreak, EContinue: expr(e);
case EVar(n, t, e): EVar(n, t, if( e != null ) f(e) else null);
case EParent(e): EParent(f(e));
case EBlock(el): EBlock([for( e in el ) f(e)]);
@@ -91,8 +87,22 @@ class Tools {
case EMeta(name, args, e): EMeta(name, args == null ? null : [for( a in args ) f(a)], f(e));
case ECheckType(e,t): ECheckType(f(e), t);
}
return mk(edef, e);
}
public static inline function expr( e : Expr ) : ExprDef {
#if hscriptPos
return { e : edef, pmin : e.pmin, pmax : e.pmax, origin : e.origin, line : e.line };
return e.e;
#else
return e;
#end
}
public static inline function mk( e : ExprDef, p : Expr ) {
#if hscriptPos
return { e : e, pmin : p.pmin, pmax : p.pmax, origin : p.origin, line : p.line };
#else
return e;
#end
}