diff --git a/uppsrc/Skylark/Compile.cpp b/uppsrc/Skylark/Compile.cpp index c00bd7531..3ca755464 100644 --- a/uppsrc/Skylark/Compile.cpp +++ b/uppsrc/Skylark/Compile.cpp @@ -50,9 +50,9 @@ void Compiler::DoExeField(One& result) { One r; ExeField& f = r.Create(); - f.value = result; + f.value = pick(result); f.id = p.ReadId(); - result = r; + result = pick(r); } void Compiler::DoIndicies(One& result) @@ -64,9 +64,9 @@ void Compiler::DoIndicies(One& result) if(p.Char('[')) { One r; ExeBracket& f = r.Create(); - f.value = result; + f.value = pick(result); f.index = Exp(); - result = r; + result = pick(r); p.PassChar(']'); } else @@ -209,13 +209,13 @@ One Compiler::Mul() One result = Prim(); for(;;) if(p.Char('*')) - result = Create(result, Prim()); + result = Create(pick(result), Prim()); else if(p.Char('/')) - result = Create(result, Prim()); + result = Create(pick(result), Prim()); else if(p.Char('%')) - result = Create(result, Prim()); + result = Create(pick(result), Prim()); else return result; } @@ -225,10 +225,10 @@ One Compiler::Add() One result = Mul(); for(;;) if(p.Char('+')) - result = Create(result, Mul()); + result = Create(pick(result), Mul()); else if(p.Char('-')) - result = Create(result, Mul()); + result = Create(pick(result), Mul()); else return result; } @@ -238,13 +238,13 @@ One Compiler::Shift() One result = Add(); for(;;) if(p.Char3('>', '>', '>')) - result = Create(result, Add()); + result = Create(pick(result), Add()); else if(p.Char2('>', '>')) - result = Create(result, Add()); + result = Create(pick(result), Add()); else if(p.Char2('<', '<')) - result = Create(result, Add()); + result = Create(pick(result), Add()); else return result; } @@ -254,16 +254,16 @@ One Compiler::Rel() One result = Shift(); for(;;) if(p.Char2('<', '=')) - result = Create(result, Shift()); + result = Create(pick(result), Shift()); else if(p.Char2('>', '=')) - result = Create(Shift(), result); + result = Create(Shift(), pick(result)); else if(p.Char('<')) - result = Create(result, Shift()); + result = Create(pick(result), Shift()); else if(p.Char('>')) - result = Create(Shift(), result); + result = Create(Shift(), pick(result)); else return result; } @@ -273,10 +273,10 @@ One Compiler::Eq() One result = Rel(); for(;;) if(p.Char2('=', '=')) - result = Create(result, Rel()); + result = Create(pick(result), Rel()); else if(p.Char2('!', '=')) - result = Create(Rel(), result); + result = Create(Rel(), pick(result)); else return result; } @@ -285,7 +285,7 @@ One Compiler::And() { One result = Eq(); while(!p.IsChar2('&', '&') && p.Char('&')) - result = Create(result, Eq()); + result = Create(pick(result), Eq()); return result; } @@ -293,7 +293,7 @@ One Compiler::Xor() { One result = And(); while(p.Char('^')) - result = Create(result, And()); + result = Create(pick(result), And()); return result; } @@ -301,7 +301,7 @@ One Compiler::Or() { One result = Xor(); while(!p.IsChar2('|', '|') && p.Char('|')) - result = Create(result, Xor()); + result = Create(pick(result), Xor()); return result; } @@ -309,7 +309,7 @@ One Compiler::LogAnd() { One result = Or(); while(p.Char2('&', '&')) - result = Create(result, Or()); + result = Create(pick(result), Or()); return result; } @@ -317,7 +317,7 @@ One Compiler::LogOr() { One result = LogAnd(); while(p.Char2('|', '|')) - result = Create(result, LogAnd()); + result = Create(pick(result), LogAnd()); return result; } @@ -327,11 +327,11 @@ One Compiler::Conditional() if(p.Char('?')) { One r; ExeCond& c = r.Create(); - c.cond = result; + c.cond = pick(result); c.ontrue = LogOr(); p.PassChar(':'); c.onfalse = LogOr(); - result = r; + result = pick(r); } return result; } diff --git a/uppsrc/Skylark/Dispatch.cpp b/uppsrc/Skylark/Dispatch.cpp index fab5a806f..8e351a5c1 100644 --- a/uppsrc/Skylark/Dispatch.cpp +++ b/uppsrc/Skylark/Dispatch.cpp @@ -29,6 +29,8 @@ struct DispatchNode : Moveable { // Single node in url hierarchy t int (*progress)(int, Http&, int); enum { GET, POST }; + + rval_default(DispatchNode); DispatchNode() { argpos = Null; method = GET; post_raw = false; progress = NULL;} }; diff --git a/uppsrc/Skylark/Optimize.cpp b/uppsrc/Skylark/Optimize.cpp index a9ce15144..72ac9ba83 100644 --- a/uppsrc/Skylark/Optimize.cpp +++ b/uppsrc/Skylark/Optimize.cpp @@ -17,7 +17,7 @@ void Compiler::OptimizeConst(One& exe) ExeContext x(stack); oxe.Create().value = exe->Eval(x); LLOG("OPTIMIZED constant: " << exe->Eval(stack, out)); - exe = oxe; + exe = pick(oxe); optimized = true; } @@ -102,7 +102,7 @@ void Compiler::Optimize(One& exe) ExeVarField& vf = oxe.Create(); vf.id = e->id; vf.var_index = e1->var_index; - exe = oxe; + exe = pick(oxe); optimized = true; LLOG("OPTIMIZED ExeVarField"); } @@ -115,7 +115,7 @@ void Compiler::Optimize(One& exe) o.id = e1->id; o.var_index = e1->var_index; o.part = e->part; - exe = oxe; + exe = pick(oxe); optimized = true; LLOG("OPTIMIZED ExeLinkVarField1"); } @@ -131,7 +131,7 @@ void Compiler::Optimize(One& exe) t.text = ValueTo(e1->value).text + ValueTo(e2->value).text; One oxe; oxe.Create().value = RawToValue(t); - m[i] = oxe; + m[i] = pick(oxe); m.Remove(i + 1); optimized = true; LLOG("OPTIMIZED ExeBlock constant folding"); diff --git a/uppsrc/Skylark/Witz.h b/uppsrc/Skylark/Witz.h index 60fdca488..3a8b74c7b 100644 --- a/uppsrc/Skylark/Witz.h +++ b/uppsrc/Skylark/Witz.h @@ -34,7 +34,7 @@ struct Compiler { static One Create(One a) { One rr; T& m = rr.Create(); - m.a = a; + m.a = pick(a); return rr; } @@ -47,8 +47,8 @@ struct Compiler { static One Create(One a, One b) { One rr; T& m = rr.Create(); - m.a = a; - m.b = b; + m.a = pick(a); + m.b = pick(b); return rr; } diff --git a/uppsrc/Skylark/init b/uppsrc/Skylark/init index 4681dd209..e13b3e6ca 100644 --- a/uppsrc/Skylark/init +++ b/uppsrc/Skylark/init @@ -1,10 +1,10 @@ #ifndef _Skylark_icpp_init_stub #define _Skylark_icpp_init_stub #include "Sql/init" -#define BLITZ_INDEX__ Fdc34a156e19f70e79e3af4bc5aee3879 +#define BLITZ_INDEX__ F99b1b565e5194ee2f9bb1998be2e6f71 #include "StdLib.icpp" #undef BLITZ_INDEX__ -#define BLITZ_INDEX__ F4f56e545eab9f60b3cd674a218cc0915 +#define BLITZ_INDEX__ Fadc563b9c69ab7173de2094508da8708 #include "Static.icpp" #undef BLITZ_INDEX__ #endif