]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/code.c
Merge branch 'fredb/effect-stuff'
[simgear.git] / simgear / nasal / code.c
index 44ff2a0e099e68ea0739d51a1500aa18e35abbe8..e58f7ecb96cc101ebef61d1e621a437e17e851bc 100644 (file)
@@ -20,10 +20,6 @@ void printOpDEBUG(int ip, int op);
 void printStackDEBUG(naContext ctx);
 ////////////////////////////////////////////////////////////////////////
 
-#ifdef _MSC_VER
-#define vsnprintf _vsnprintf
-#endif
-
 struct Globals* globals = 0;
 
 static naRef bindFunction(naContext ctx, struct Frame* f, naRef code);
@@ -491,18 +487,19 @@ static void evalUnpack(naContext ctx, int count)
 // FIXME: unify with almost identical checkVec() above
 static int vbound(naContext ctx, naRef v, naRef ir, int end)
 {
-    int i = IS_NIL(ir) ? (end ? -1 : 0) : numify(ctx, ir);
-    if(i < 0) i += naVec_size(v);
-    if(i < 0 || i >= naVec_size(v))
+    int sz=naVec_size(v), i = IS_NIL(ir) ? (end ? -1 : 0) : numify(ctx, ir);
+    if(IS_NIL(ir) && !sz) return i;
+    if(i < 0) i += sz;
+    if(i < 0 || i >= sz)
         naRuntimeError(ctx, "slice index %d out of bounds (size: %d)",
-                       i, naVec_size(v));
+                       i, sz);
     return i;
 }
 
 static void evalSlice(naContext ctx, naRef src, naRef dst, naRef idx)
 {
     if(!IS_VEC(src)) ERR(ctx, "cannot slice non-vector");
-    naVec_append(dst, naVec_get(src, vbound(ctx, src, idx, 0)));
+    naVec_append(dst, naVec_get(src, checkVec(ctx, src, idx)));
 }
  
 static void evalSlice2(naContext ctx, naRef src, naRef dst,