diff options
| -rw-r--r-- | sys/src/libaml/aml.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/src/libaml/aml.c b/sys/src/libaml/aml.c index 9d1298eb7..e90e711f7 100644 --- a/sys/src/libaml/aml.c +++ b/sys/src/libaml/aml.c @@ -460,6 +460,7 @@ getle(uchar *p, int len) uvlong v; int i; + v = 0ULL; for(i=0; i<len; i++) v |= ((uvlong)p[i]) << i*8; return v; @@ -1504,7 +1505,7 @@ evalcall(void) FP->env = e; FP->narg = 0; FP->dot = m->name; - if(m->eval){ + if(m->eval != nil){ FP->op = nil; FP->end = PC; return (*m->eval)(); @@ -2187,7 +2188,15 @@ amleval(void *dot, char *fmt, ...) m = dot; if(i != m->narg) return -1; - return xec(m->start, m->end, forkname(m->name), e, r); + if(m->eval == nil) + return xec(m->start, m->end, forkname(m->name), e, r); + FP = FB; + FP->op = nil; + FP->env = e; + FP->narg = 0; + FP->dot = m->name; + FP->ref = FP->aux = nil; + dot = (*m->eval)(); } if(r != nil) *r = dot; |
