mingodad 7 лет назад
Родитель
Сommit
aeaf302490

+ 10 - 9
SquiLu/include/sqstdio.h

@@ -8,15 +8,16 @@
 
 struct SQStream {
     virtual ~SQStream() {}
-	ABSTRACT_METHOD(virtual SQInteger Read(void *buffer, SQInteger size), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Gets(char *buffer, SQInteger size), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Write(const void *buffer, SQInteger size), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Flush(), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Tell(), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Len(), {return 0;});
-	ABSTRACT_METHOD(virtual SQInteger Seek(SQInteger offset, SQInteger origin), {return 0;});
-	ABSTRACT_METHOD(virtual bool IsValid(), {return false;});
-	ABSTRACT_METHOD(virtual bool EOS(), {return true;});
+	ABSTRACT_METHOD(virtual SQInteger Read(void *buffer, SQInteger size), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Gets(char *buffer, SQInteger size), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Write(const void *buffer, SQInteger size), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Flush(), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Tell(), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Len(), {return 0;})
+	ABSTRACT_METHOD(virtual SQInteger Seek(SQInteger offset, SQInteger origin), {return 0;})
+	ABSTRACT_METHOD(virtual bool IsValid(), {return false;})
+	ABSTRACT_METHOD(virtual bool EOS(), {return true;})
+	virtual void DummyPinVtable();
 };
 
 extern "C" {

+ 2 - 2
SquiLu/sqstdlib/sqstdblobimpl.h

@@ -7,8 +7,8 @@
 
 struct SQBlob : public SQStream
 {
-	SQBlob() {init(0, 8192);};
-	SQBlob(SQInteger size, SQInteger allocated=0){init(size, allocated);};
+	SQBlob() {init(0, 8192);}
+	SQBlob(SQInteger size, SQInteger allocated=0){init(size, allocated);}
 	virtual ~SQBlob();
 	SQInteger Write(const void *buffer, SQInteger size);
 	SQInteger WriteZstr(const char *zStr);

+ 1 - 0
SquiLu/sqstdlib/sqstdfile.h

@@ -51,6 +51,7 @@ struct SQFile : public SQStream {
 	bool IsValid() { return _handle?true:false; }
 	bool EOS() { return Tell()==Len()?true:false;}
 	SQFILE GetHandle() {return _handle;}
+    void DummyPinVtable();
 protected:
 	SQFILE _handle;
 	bool _owns;

+ 7 - 0
SquiLu/sqstdlib/sqstdio.cpp

@@ -7,6 +7,9 @@
 #include <sqstdfile.h>
 #include "sqstdstream.h"
 
+//only to make the SQFile vtable be generated here
+void SQFile::DummyPinVtable(){}
+
 //#define SQSTD_FILE_TYPE_TAG (SQSTD_STREAM_TYPE_TAG | 0x00000001)
 const SQChar  SQSTD_FILE_TYPE_TAG[] = _SC("std_stream_file");
 const SQChar  SQSTD_FILE_CLASS_TYPE_TAG[] = _SC("std_file");
@@ -87,8 +90,12 @@ struct SQPopen : public SQFile {
 	void Close() {
 	    PClose();
 	}
+	void DummyPinVtable();
 };
 
+//only to make the SQPopen vtable be generated here
+void SQPopen::DummyPinVtable(){}
+
 static SQRESULT _popen__typeof(HSQUIRRELVM v)
 {
 	sq_pushstring(v,_SC("popen"),-1);

+ 3 - 3
SquiLu/sqstdlib/sqstdmath.cpp

@@ -172,14 +172,14 @@ SINGLE_ARG_FUNC(asinh)
 SINGLE_ARG_FUNC(tanh)
 SINGLE_ARG_FUNC(atanh)
 
-BOOL_SINGLE_ARG_FUNC(isnan);
-BOOL_SINGLE_ARG_FUNC(isfinite);
+BOOL_SINGLE_ARG_FUNC(isnan)
+BOOL_SINGLE_ARG_FUNC(isfinite)
 
 //DAD start
 #include <string.h>
 #include <stdio.h>
 #include <ctype.h>
-SQ_OPT_STRING_STRLEN();
+SQ_OPT_STRING_STRLEN()
 
 /* mathB_roundf: rounds real value x to the d-th digit; patched Dec 22, 2007 for negative values */
 static SQRESULT math_roundf (HSQUIRRELVM v) {

+ 1 - 2
SquiLu/sqstdlib/sqstdrex.cpp

@@ -180,7 +180,6 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
 	//else if(!scisprint(*exp->_p)) {
 #ifdef SQ_REXPATTERN_ONLY_PRINTABLE
 	else if(((SQUChar)*exp->_p) < _SC(' ')) {
-
 		sqstd_rex_error(exp,_SC("letter expected"));
 	}
 #endif
@@ -370,6 +369,7 @@ static inline bool isChClassWord(int c)
 {
     return (isalnum(c) || c == _SC('_'));
 }
+
 static SQBool sqstd_rex_matchcclass(SQInteger cclass,SQChar c)
 {
 	switch(cclass) {
@@ -489,7 +489,6 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
 					return asd;
 			}
 			return NULL;
-			break;
 	}
 	case OP_EMPTY: //zero length capture
 	case OP_EXPR:

+ 6 - 3
SquiLu/sqstdlib/sqstdstream.cpp

@@ -9,6 +9,9 @@
 #include "sqstdstream.h"
 #include "sqstdblobimpl.h"
 
+//only to make the SQStream vtable be generated here
+void SQStream::DummyPinVtable(){}
+
 static const SQChar SQSTD_STREAM_TYPE_TAG[] = _SC("std_stream");
 
 #define SETUP_STREAM(v) \
@@ -208,7 +211,7 @@ SQInteger _stream_write_str(HSQUIRRELVM v)
     SQ_OPT_INTEGER(v, 4, len, str_size - start);
     if(len < 0 || len > (str_size-start)) return sq_throwerror(v, _SC("len value out of range (%d)"), len);
 
-    if(self->Write(((SQChar*)str)+start, len) != len)
+    if(self->Write(((const SQChar*)str)+start, len) != len)
             return sq_throwerror(v,_SC("io error"));
 	sq_pushinteger(v,len);
 	return 1;
@@ -225,7 +228,7 @@ SQInteger _stream_write(HSQUIRRELVM v)
             return sq_throwerror(v,_SC("invalid parameter"));
         sq_getstring(v,-1,&str);
         size = sq_getsize(v,-1);
-        if(self->Write((SQChar*)str,size) != size)
+        if(self->Write((const SQChar*)str,size) != size)
             return sq_throwerror(v,_SC("io error"));
         sq_poptop(v); //remove converted string
         total_size += size;
@@ -252,7 +255,7 @@ SQInteger _stream_write_fmt(HSQUIRRELVM v)
 		return sq_throwerror(v,_SC("invalid parameter"));
     sq_getstring(v,-1,&str);
 	size = sq_getsize(v,-1);
-	if(self->Write((SQChar*)str,size) != size)
+	if(self->Write((const SQChar*)str,size) != size)
 		return sq_throwerror(v,_SC("io error"));
     sq_poptop(v); //remove converted string
 	sq_pushinteger(v,size);

+ 7 - 4
SquiLu/sqstdlib/sqstdstring.cpp

@@ -159,7 +159,7 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
                           SQChar buff[10];
                           int iw;
                           iw = scsprintf(buff, sizeof(buff), _SC("\\x%x"), (int)SQUChar(*ts));
-                          for(int i=0; i< iw; ++i) *ts2++ = buff[i];
+                          for(int bi=0; bi< iw; ++bi) *ts2++ = buff[bi];
                         }
                         else
                             *ts2++ = *ts;
@@ -183,7 +183,7 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
 				size_t flen = scstrlen(fmt);
 				SQInteger fpos = flen - 1;
 				SQChar f = fmt[fpos];
-				SQChar *prec = (SQChar *)_PRINT_INT_PREC;
+				const SQChar *prec = _PRINT_INT_PREC;
 				while(*prec != _SC('\0')) {
 					fmt[fpos++] = *prec++;
 				}
@@ -338,6 +338,7 @@ static SQRESULT _rexobj_releasehook(SQUserPointer p, SQInteger /*size*/, void */
     if(subject_str_size < 0) return sq_throwerror(v, _SC("str size - start_offset can't be negative")); \
     const SQChar *subject_str = subject + start_offset; \
     if(max_len && (max_len < subject_str_size)) subject_str_size = max_len;
+
 static SQRESULT _regexp_match(HSQUIRRELVM v)
 {
     SQ_FUNC_VARS(v);
@@ -406,12 +407,14 @@ static SQRESULT _regexp_gsub(HSQUIRRELVM v)
 	const SQChar *begin,*end;
 	SQBlob blob(0,8192);
 	SQObjectType ptype = sq_gettype(v, 3);
-    const SQChar *replacement;
-    SQInteger replacement_size;
+    const SQChar *replacement = NULL;
+    SQInteger replacement_size = 0;
+
     if(ptype == OT_STRING)
     {
         sq_getstr_and_size(v, 3, &replacement, &replacement_size);
     }
+
 	while(sqstd_rex_searchrange(self,subject, subject+subject_size,&begin,&end)){
 	    blob.Write(subject, begin-subject);
 	    SQInteger n = sqstd_rex_getsubexpcount(self);

+ 1 - 2
SquiLu/sqstdlib/sqstdsystem.cpp

@@ -18,8 +18,7 @@
 #include <unistd.h>
 #endif
 
-
-SQ_OPT_STRING_STRLEN();
+SQ_OPT_STRING_STRLEN()
 
 #ifdef WITH_UUID
 

+ 1 - 0
SquiLu/squirrel/lua-regex.c

@@ -79,6 +79,7 @@ static int check_capture (LuaMatchState *ms, int *l_out) {
   l = *l_out;
   return check_capture_is_closed(ms, l);
 }
+
 static int capture_to_close (LuaMatchState *ms, int *level_out) {
   int level = ms->level;
   for (level--; level>=0; level--)

+ 1 - 1
SquiLu/squirrel/lua-regex.h

@@ -46,7 +46,7 @@ extern "C" {
 
 typedef struct lua_char_buffer_st {
     size_t size, used;
-    char buf[1];
+    char buf[1]; //<FIXME> Not taking in account compiler padding
 } lua_char_buffer_st;
 
 typedef struct LuaCapture {

+ 4 - 1
SquiLu/squirrel/sq_lexer.cpp

@@ -14,7 +14,7 @@
 
 static const SQChar SQ_LIBNAME[] = _SC("SQLexer");
 
-SQ_OPT_STRING_STRLEN();
+//SQ_OPT_STRING_STRLEN();
 
 class CustomSQLexer : public SQLexer
 {
@@ -35,8 +35,11 @@ public:
         }
         return SQLexer::GetKeywords();
     }
+    virtual void DummyPinVtable();
 };
 
+void CustomSQLexer::DummyPinVtable(){}
+
 struct sq_lexer_st
 {
     CustomSQLexer *lex;

+ 3 - 5
SquiLu/squirrel/sqapi.cpp

@@ -696,7 +696,6 @@ SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx)
 		case OT_ARRAY: _array(o)->Resize(0); break;
 		default:
 			return sq_throwerror(v, _SC("clear only works on table and array"));
-		break;
 
 	}
 	return SQ_OK;
@@ -1259,12 +1258,12 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
 		_table(self)->NewSlot(key, v->GetUp(-1));
 		v->Pop(2);
 		return SQ_OK;
-	break;
+
 	case OT_CLASS:
 		_class(self)->NewSlot(_ss(v), key, v->GetUp(-1),false);
 		v->Pop(2);
 		return SQ_OK;
-	break;
+
 	case OT_INSTANCE:
 		if(_instance(self)->Set(key, v->GetUp(-1))) {
 			v->Pop(2);
@@ -1338,7 +1337,6 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
 		break;
 	default:
 			return sq_aux_invalidtype(v, type);
-		break;
 	}
 	return SQ_OK;
 }
@@ -1372,7 +1370,7 @@ SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx)
 		}
 		v->Push(SQObjectPtr(_delegable(self)->_delegate));
 		break;
-	default: return sq_throwerror(v,_SC("wrong type")); break;
+	default: return sq_throwerror(v,_SC("wrong type"));
 	}
 	return SQ_OK;
 

+ 13 - 13
SquiLu/squirrel/sqarray.h

@@ -99,7 +99,7 @@ public:
 	ABSTRACT_METHOD(virtual void _copy(SQInteger idx1, SQInteger idx2),{})
 	ABSTRACT_METHOD(virtual bool _set(SQInteger idx1, SQObjectPtr &val),{return false;})
 	ABSTRACT_METHOD(virtual void _get2(SQInteger idx, SQObject& out),{})
-
+    	ABSTRACT_METHOD(virtual void DummyPinVtable(), {})
 private:
     ABSTRACT_METHOD(virtual void _getObjectPtr(const SQInteger nidx,SQObjectPtr &val),{})
     ABSTRACT_METHOD(virtual void _getRealObjectPtr(const SQInteger nidx,SQObjectPtr &val),{})
@@ -121,7 +121,8 @@ private:
 	    if(withData) anew->_vec_values.copy(_vec_values);\
 	    return anew;\
     }\
-	void Release(){sq_delete(this,atype);}
+	void Release(){sq_delete(this,atype);}\
+	void DummyPinVtable();
 
 struct SQArray : public SQArrayBase
 {
@@ -130,13 +131,12 @@ protected:
     SQArray(SQSharedState *ss,SQInteger nsize):SQArrayBase(ss, nsize){
 	    Resize(nsize);
     }
-    ~SQArray(){}
 
 public:
 #ifndef NO_GARBAGE_COLLECTOR
     virtual bool isCollectable(){return true;}
 #endif
-	DECLARE_CLASS_ARRAY_MEMBERS(SQArray);
+	DECLARE_CLASS_ARRAY_MEMBERS(SQArray)
 	SQUnsignedInteger SizeOf() const {return _vec_values.sizeOf();}
 	SQUnsignedInteger Size() const {return _vec_values.size();}
 	void Reserve(SQUnsignedInteger size) { _vec_values.reserve(size); }
@@ -293,12 +293,12 @@ protected:
 	    return true;
     }
 public:
-    void Top(SQObjectPtr& out){out = SQNumericBaseArray<T>::_vec_values.top();}
+    void Top(SQObjectPtr& out){out = (SQFloat)SQNumericBaseArray<T>::_vec_values.top();}
     virtual void _getObjectPtr(const SQInteger nidx,SQObjectPtr &val){
-        val = SQNumericBaseArray<T>::_vec_values[nidx];
+        val = (SQFloat)SQNumericBaseArray<T>::_vec_values[nidx];
     }
     virtual void _getRealObjectPtr(const SQInteger nidx,SQObjectPtr &val){
-        SQObjectPtr o = SQNumericBaseArray<T>::_vec_values[nidx];
+        SQObjectPtr o = (SQFloat)SQNumericBaseArray<T>::_vec_values[nidx];
         val = _realval(o);
     }
 	void _get2(SQInteger idx, SQObject& val)
@@ -314,7 +314,7 @@ protected:
     SQFloat64Array(SQSharedState *ss,SQInteger nsize):SQFloatBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQFloat64Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQFloat64Array)
 };
 
 struct SQFloat32Array : public SQFloatBaseArray<SQFloat32>
@@ -323,7 +323,7 @@ protected:
     SQFloat32Array(SQSharedState *ss,SQInteger nsize):SQFloatBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQFloat32Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQFloat32Array)
 };
 
 template <typename T>
@@ -367,7 +367,7 @@ protected:
     SQInt64Array(SQSharedState *ss,SQInteger nsize):SQIntegerBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQInt64Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQInt64Array)
 };
 
 struct SQInt32Array : public SQIntegerBaseArray<SQInt32>
@@ -376,7 +376,7 @@ protected:
     SQInt32Array(SQSharedState *ss,SQInteger nsize):SQIntegerBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQInt32Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQInt32Array)
 };
 
 struct SQInt16Array : public SQIntegerBaseArray<SQInt16>
@@ -385,7 +385,7 @@ protected:
     SQInt16Array(SQSharedState *ss,SQInteger nsize):SQIntegerBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQInt16Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQInt16Array)
 };
 
 struct SQInt8Array : public SQIntegerBaseArray<SQInt8>
@@ -394,7 +394,7 @@ protected:
     SQInt8Array(SQSharedState *ss,SQInteger nsize):SQIntegerBaseArray(ss, nsize){}
 
 public:
-    DECLARE_CLASS_ARRAY_MEMBERS(SQInt8Array);
+    DECLARE_CLASS_ARRAY_MEMBERS(SQInt8Array)
 };
 
 #endif //_SQARRAY_H_

+ 6 - 6
SquiLu/squirrel/sqbaselib.cpp

@@ -1664,9 +1664,9 @@ static SQRESULT process_string_gmatch_find(LuaMatchState *ms, void *udata, lua_c
     }
     SQObjectType rtype = sq_gettype(v, -1);
     if(rtype == OT_BOOL) {
-        SQBool b;
-        sq_getbool(v, -1, &b);
-        result = b == SQTrue;
+        SQBool bv;
+        sq_getbool(v, -1, &bv);
+        result = bv == SQTrue;
     }
     else result = rtype != OT_NULL;
 
@@ -2054,7 +2054,7 @@ static SQRESULT string_getdelegate(HSQUIRRELVM v)
 static bool isValidUtf8(const unsigned char *s, size_t length)
 {
     for (const unsigned char *e = s + length; s != e; ) {
-        if (s + 4 <= e && ((*(SQUnsignedInteger32 *) s) & 0x80808080) == 0) {
+        if (s + 4 <= e && ((*(const SQUnsignedInteger32 *) s) & 0x80808080) == 0) {
             s += 4;
         } else {
             while (!(*s & 0x80)) {
@@ -2278,7 +2278,7 @@ static SQRESULT string_ushort(HSQUIRRELVM v)
     {
         return sq_throwerror(v, _SC("index out of range"));
     }
-	sq_pushinteger(v, (((SQUnsignedInt16*)str)[char_idx]));
+	sq_pushinteger(v, (((const SQUnsignedInt16*)str)[char_idx]));
 	return 1;
 }
 
@@ -2463,7 +2463,7 @@ static SQRESULT string_iso88959_to_utf8 (HSQUIRRELVM v) {
     SQInteger size = (str_size)+sizeof(SQChar); //'\0' terminator
     SQChar *buf = sq_getscratchpad(v, size*2);
     SQUChar *c = (SQUChar*)buf;
-    SQUChar *s = (SQUChar*)str;
+    const SQUChar *s = (const SQUChar*)str;
     for (; *s; ++s)
     {
         if (*s < 0x80)

+ 1 - 1
SquiLu/squirrel/sqclosure.h

@@ -102,7 +102,7 @@ public:
 	SQObjectPtr *_valptr;  /* pointer to value on stack, or _value below */
 	SQInteger    _idx;     /* idx in stack array, for relocation */
 	SQObjectPtr  _value;   /* value of outer after stack frame is closed */
-	SQOuter     *_next;    /* pointer to next outer when frame is open   */
+	SQOuter     *_next_outer;    /* pointer to next outer when frame is open   */
 };
 
 //////////////////////////////////////////////

+ 19 - 2
SquiLu/squirrel/sqcompiler.cpp

@@ -333,7 +333,7 @@ public:
     SQInteger ExpressionConstant(SQObject id)
     {
         SQObject constant;
-        SQInteger epos;
+        SQInteger epos = 0;
         if(IsConstant(id, constant))
         {
             /* Handle named constant */
@@ -552,6 +552,20 @@ public:
                 Error(_SC("Error: too many nested includes %d %s\n"), nested_count, _stringval(id));
             }
 
+            //C/C++ system includes we do not use it in SquiLu
+            if(_ifdef_exclude && (_token == _SC('<')))
+            {
+                while(_token > 0)
+                {
+                    if(_token == _SC('>'))
+                    {
+                        Lex();
+                        return;
+                    }
+                    Lex();
+                }
+                return;
+            }
             //do not call Lex() since next token can try search for id defined in the include
             //and then go global instead of local, we'll call it after including
             id = Expect(TK_STRING_LITERAL, false);
@@ -2103,16 +2117,19 @@ start_again:
                 else if(_token == TK_PUBLIC)
                 {
                     Lex();
+                    if(_token == _SC(':')) Lex();
                 }
                 else if(_token == TK_PRIVATE)
                 {
                     //isprivate = true;
                     Lex();
+                    if(_token == _SC(':')) Lex();
                 }
                 else if(_token == TK_PROTECTED)
                 {
                     //isprivate = true;
                     Lex();
+                    if(_token == _SC(':')) Lex();
                 }
                 else if(_token == TK_INLINE)
                 {
@@ -2482,7 +2499,7 @@ function_params_decl:
             {
                 if(CheckExternName(varname, true))
                 {
-                    Error(_SC("extern %s already declared"), varname);
+                    Error(_SC("extern %s already declared"), _stringval(varname));
                 }
             }
             else

+ 1 - 1
SquiLu/squirrel/sqfuncstate.cpp

@@ -496,7 +496,7 @@ void SQFuncState::AddInstruction(SQInstruction &i)
 				pi._arg3 = MAX_FUNC_STACKSIZE;
 				return;
 			}
-							  }
+            		}
 			break;
 		case _OP_MOVE:
 			switch(pi.op) {

+ 3 - 4
SquiLu/squirrel/sqlexer.cpp

@@ -313,7 +313,6 @@ SQInteger SQLexer::Lex()
                 continue;
             }
             RETURN_TOKEN(TK_PRAGMA);
-            continue;
 		case _SC('/'):
 			NEXT();
 			switch(CUR_CHAR){
@@ -328,11 +327,9 @@ SQInteger SQLexer::Lex()
 			case _SC('='):
 				NEXT();
 				RETURN_TOKEN(TK_DIVEQ);
-				continue;
 			case _SC('>'):
 				NEXT();
 				RETURN_TOKEN(TK_ATTR_CLOSE);
-				continue;
 			default:
 				RETURN_TOKEN('/');
 			}
@@ -558,6 +555,7 @@ SQInteger SQLexer::ProcessStringHexEscape(SQChar *dest, SQInteger maxdigits)
     dest[n] = 0;
     return n;
 }
+
 SQInteger scisodigit(SQInteger c) { return c >= _SC('0') && c <= _SC('7'); }
 
 SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
@@ -835,7 +833,6 @@ bool LexInteger(const SQChar *s,SQUnsignedInteger *res)
 	return true;
 }
 
-
 bool LexOctal(const SQChar *s,SQUnsignedInteger *res)
 {
 	SQUnsignedInteger a = 0;
@@ -923,7 +920,9 @@ SQInteger SQLexer::ReadNumber()
 		okNumber = LexOctal(&data->longstr[0],&itmp);
 		break;
 	}
+
 	if(!okNumber) Error(_SC("integer overflow %s"), &data->longstr[0]);
+
 	rtype = TK_INTEGER;
 	switch(type) {
 	case TINT:

+ 1 - 1
SquiLu/squirrel/sqlexer.h

@@ -11,7 +11,6 @@ typedef	unsigned char LexChar;
 struct SQLexerData
 {
     SQInteger curtoken;
-    SQBool reached_eof;
     SQInteger prevtoken;
     SQInteger currentline;
     SQInteger currentcolumn;
@@ -22,6 +21,7 @@ struct SQLexerData
     SQInteger nvalue;
     SQFloat fvalue;
     LexChar currdata;
+    SQBool reached_eof;
     SQInteger readcount;
     SQChar lasterror[256];
     SQLexerData()

+ 15 - 5
SquiLu/squirrel/sqobject.cpp

@@ -235,6 +235,16 @@ void SQArrayBase::Extend(SQArrayBase *a){
         }
 }
 
+//Only here to create a unique vtable
+void SQCollectable::Finalize(){}
+void SQArray::DummyPinVtable(){}
+void SQFloat64Array::DummyPinVtable(){}
+void SQFloat32Array::DummyPinVtable(){}
+void SQInt64Array::DummyPinVtable(){}
+void SQInt32Array::DummyPinVtable(){}
+void SQInt16Array::DummyPinVtable(){}
+void SQInt8Array::DummyPinVtable(){}
+
 const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop)
 {
 	SQUnsignedInteger nvars=_nlocalvarinfos;
@@ -929,12 +939,12 @@ bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr
 	_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
 
 	for(i = 0; i < noutervalues; i++){
-		SQUnsignedInteger type;
-		SQObjectPtr name;
-		_CHECK_IO(SafeRead(v,read,up, &type, sizeof(SQUnsignedInteger)));
+		SQUnsignedInteger itype;
+		SQObjectPtr iname;
+		_CHECK_IO(SafeRead(v,read,up, &itype, sizeof(SQUnsignedInteger)));
 		_CHECK_IO(ReadObject(v, up, read, o));
-		_CHECK_IO(ReadObject(v, up, read, name));
-		f->_outervalues[i] = SQOuterVar(name,o, (SQOuterType)type);
+		_CHECK_IO(ReadObject(v, up, read, iname));
+		f->_outervalues[i] = SQOuterVar(iname,o, (SQOuterType)itype);
 	}
 	_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
 

+ 5 - 5
SquiLu/squirrel/sqobject.h

@@ -91,7 +91,7 @@ struct SQRefCounted
 	SQRefCounted(): _uiRef(0), _weakref(NULL) {}
 	virtual ~SQRefCounted();
 	SQWeakRef *GetWeakRef(SQObjectType type);
-	ABSTRACT_METHOD(virtual void Release(), {});
+	ABSTRACT_METHOD(virtual void Release(), {})
 
 };
 
@@ -340,11 +340,11 @@ struct SQCollectable : public SQRefCounted {
 	SQCollectable *_next;
 	SQCollectable *_prev;
 	SQSharedState *_sharedstate;
-	ABSTRACT_METHOD(virtual SQObjectType GetType(), {return OT_NULL;});
-	ABSTRACT_METHOD(virtual void Release(), {});
-	ABSTRACT_METHOD(virtual void Mark(SQCollectable **chain), {});
+	ABSTRACT_METHOD(virtual SQObjectType GetType(), {return OT_NULL;})
+	ABSTRACT_METHOD(virtual void Release(), {})
+	ABSTRACT_METHOD(virtual void Mark(SQCollectable **chain), {})
 	void UnMark();
-	ABSTRACT_METHOD(virtual void Finalize(), {});
+	virtual void Finalize();
 	static void AddToChain(SQCollectable **chain,SQCollectable *c);
 	static void RemoveFromChain(SQCollectable **chain,SQCollectable *c);
 };

+ 1 - 1
SquiLu/squirrel/sqopcodes.h

@@ -118,7 +118,7 @@ struct SQInstructionDesc {
 
 struct SQInstruction
 {
-	SQInstruction(){};
+	SQInstruction(){}
 	SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
         : _arg1((SQInt32)a1),op((unsigned char)_op),_arg0((unsigned char)a0),
 	    _arg2((unsigned char)a2),_arg3((unsigned char)a3)

+ 1 - 0
SquiLu/squirrel/sqstring.h

@@ -24,6 +24,7 @@ public:
 	SQInteger _len;
 	SQHash _hash;
 	SQChar _val[1];
+	//<FIXME> Padding not accounted
 };
 
 

+ 16 - 16
SquiLu/squirrel/sqvm.cpp

@@ -1036,11 +1036,11 @@ exception_restore:
 					case OT_TABLE:
 					case OT_USERDATA:
 					case OT_INSTANCE:{
-						SQObjectPtr closure;
-						if(_delegable(clo)->_delegate && _delegable(clo)->GetMetaMethod(this,MT_CALL,closure)) {
+						SQObjectPtr mclosure;
+						if(_delegable(clo)->_delegate && _delegable(clo)->GetMetaMethod(this,MT_CALL,mclosure)) {
 							Push(clo);
 							for (SQInteger i = 0; i < arg3; i++) Push(STK(arg2 + i));
-							if(!CallMetaMethod(closure, MT_CALL, arg3+1, clo)) SQ_THROW();
+							if(!CallMetaMethod(mclosure, MT_CALL, arg3+1, clo)) SQ_THROW();
 							if(tgt0 != -1) {
 								STK(tgt0) = clo;
 							}
@@ -1337,11 +1337,11 @@ exception_trap:
 
 		while( ci ) {
 			if(ci->_etraps > 0) {
-				SQExceptionTrap &et = _etraps.top();
-				ci->_ip = et._ip;
-				_top = et._stacksize;
-				_stackbase = et._stackbase;
-				_stack._vals[_stackbase + et._extarget] = currerror;
+				SQExceptionTrap &vet = _etraps.top();
+				ci->_ip = vet._ip;
+				_top = vet._stacksize;
+				_stackbase = vet._stackbase;
+				_stack._vals[_stackbase + vet._extarget] = currerror;
 				_etraps.pop_back(); traps--; ci->_etraps--;
 				while(last_top >= _top) _stack._vals[last_top--].Null();
 				goto exception_restore;
@@ -1406,10 +1406,10 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
 		_debughook_native(this,type,src,line,fname);
 	}
 	else {
-		SQObjectPtr temp_reg;
+		SQObjectPtr creg;
 		SQInteger nparams=5;
 		Push(_roottable); Push(type); Push(func->_sourcename); Push(forcedline?forcedline:func->GetLine(ci->_ip)); Push(func->_name);
-		Call(_debughook_closure,nparams,_top-nparams,temp_reg,SQFalse);
+		Call(_debughook_closure,nparams,_top-nparams,creg,SQFalse);
 		Pop(nparams);
 	}
 	_debughook = true;
@@ -1697,7 +1697,7 @@ SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const
 
 bool SQVM::Clone(const SQObjectPtr &self,SQObjectPtr &target)
 {
-	SQObjectPtr temp_reg;
+	SQObjectPtr vtemp_reg;
 	SQObjectPtr newobj;
 	switch(sq_type(self)){
 	case OT_TABLE:
@@ -1710,7 +1710,7 @@ cloned_mt:
 		if(_delegable(newobj)->_delegate && _delegable(newobj)->GetMetaMethod(this,MT_CLONED,closure)) {
 			Push(newobj);
 			Push(self);
-			if(!CallMetaMethod(closure,MT_CLONED,2,temp_reg))
+			if(!CallMetaMethod(closure,MT_CLONED,2,vtemp_reg))
 				return false;
 		}
 		}
@@ -1918,10 +1918,10 @@ void SQVM::FindOuter(SQObjectPtr &target, SQObjectPtr *stackindex)
 			target = SQObjectPtr(p);
 			return;
 		}
-		pp = &p->_next;
+		pp = &p->_next_outer;
 	}
 	otr = SQOuter::Create(_ss(this), stackindex);
-	otr->_next = *pp;
+	otr->_next_outer = *pp;
 	otr->_idx  = (stackindex - _stack._vals);
 	__ObjAddRef(otr);
 	*pp = otr;
@@ -2021,7 +2021,7 @@ void SQVM::RelocateOuters()
 	SQOuter *p = _openouters;
 	while (p) {
 		p->_valptr = _stack._vals + p->_idx;
-		p = p->_next;
+		p = p->_next_outer;
 	}
 }
 
@@ -2030,7 +2030,7 @@ void SQVM::CloseOuters(SQObjectPtr *stackindex) {
   while ((p = _openouters) != NULL && p->_valptr >= stackindex) {
     p->_value = *(p->_valptr);
     p->_valptr = &p->_value;
-    _openouters = p->_next;
+    _openouters = p->_next_outer;
   	__ObjRelease(p);
   }
 }

+ 6 - 6
SquiLu/squirrel/sqvm.h

@@ -164,6 +164,7 @@ public:
 	bool AddDefined(const SQChar *s);
 	void RemoveDefined(const SQChar *s);
 	bool IsDefined(const SQChar *s);
+
 	SQObjectPtrVec _stack;
 
 	SQInteger _top;
@@ -176,13 +177,8 @@ public:
 	SQObjectPtr _errorhandler;
 	SQObjectPtr _atexithandler;
 
-	bool _debughook;
-	SQDEBUGHOOK _debughook_native;
-	SQObjectPtr _debughook_closure;
-
 	SQObjectPtr temp_reg;
 
-
 	CallInfo* _callsstack;
 	SQInteger _callsstacksize;
 	SQInteger _alloccallsstacksize;
@@ -192,7 +188,6 @@ public:
 	CallInfo *ci;
 	SQUserPointer _foreignptr;
 	//VMs sharing the same state
-	SQSharedState *_sharedstate;
 	SQInteger _nnativecalls;
 	SQInteger _nmetamethodscall;
     SQRELEASEHOOK _releasehook;
@@ -209,6 +204,11 @@ public:
 	OpProfileVec _op_profile;
 	HighResolutionTimer _op_profile_timer;
 #endif
+
+	SQDEBUGHOOK _debughook_native;
+	SQObjectPtr _debughook_closure;
+	bool _debughook;
+
 	SQBool _closing;
 };