Here are my notes on Squirrel and JavaScript.
- JS: Number, String, Array, Object (Table), Function, Null (object named null), Undefined
- SQ: Integer, Float, String, Array, Table (Object), Function, Null (null), Class, ClassInstance, Generator, Thread, Weak Reference, UserData, UserPointer
- JS: false, undefined, null, 0, NaN, “” SQ: false, null, 0, 0.0 (“” untested)
- JS: var MyVariable = Value; /*Global*/ SQ: MyVariable <- Value; /*Root Table*/
- JS: {var MyVariable;} /* Undefined, Local */ SQ: {local MyVariable;}
- Squirrel has Integers AND Floats! JavaScript is only Numbers (Doubles).
- JS: Use JQuery or MooTools SQ: local MyCopy = clone Original;
- SQ: The .weakref() method of Integers, Floats, Booleans does not return a reference, but instead just returns the values (native). Using it on Tables, Arrays, Strings and Functions does return a weak reference.
- JS: alert( typeof(MyString) ) /* “String” */ SQ: print( typeof MyString ) /* “String” */
- JS: var Code = eval(“/*code*/”); SQ: local Code = compilestring(“/*code*/”);
- JS: console.log(“Hey”); SQ: error(“Hey”);
- JS: arguments.callee (deprecated) SQ: print( callee() ); /*currently running closure*/
- JS: complicated SQ: print( _version_ + ” (” + _versionnumber_ + “)” ); /* 304 for 3.04 */
- SQ: print( “char: ” + _charsize_ + ” int: ” + _intsize + ” float: ” + _floatsize_ );
- JS: var MyString = “Hello”; SQ: local MyString = “Hello”;
- JS: MyString.toString() SQ: MyString.tostring()
- JS: var Num=”5″; Num = +Num; SQ: local Num=”5″; Num = Num.tointeger(); or Num.tofloat();
- JS: MyString.toLowerCase().toUpperCase(); SQ: MyString.tolower().toupper();
- JS: MyString.length; SQ: MyString.len()
- JS: MyString.slice( StartPos [, Count] ); or substr or substring SQ: MyString.slice( StartPos [, Count] );
- JS: if ( MyString.indexOf(“Hey”[,StartPos]) != -1 ) {} SQ: if ( MyString.find(“Hey”[,StartPos]) != null ) {}
- JS: if ( MyString.lastIndexOf(“Hey”[,StartPos]) != -1 ) {} SQ: ???
- JS: MyString.search(…) has no optional StartPos parameter.
- JS: MyString.replace( “Hello”, “Halo” ); SQ: ???
- JS: var FirstLetter = MyString[0]; SQ: local FirstLetter = MyString[0]
- JS: var Str = “Hello” + “World”; SQ: local Str = “Hello” + “World”;
- JS: var MyStr = String.fromCharCode(65); /*A*/ SQ: local MyStr = (65).tochar(); /*Ints or Floats*/
- SQ: foreach can be used on strings to iterate over all characters
- JS: var MyArray = []; SQ: local MyArray <- [];
- JS: var MyArray = [1,”hello”,3]; SQ: local MyArray <- [1,"hello",3];
- JS: var MyArray = Array(10); /*10 elements*/ SQ: local MyArray = array(10 [,fill]);
- JS: MyArray.push(value); SQ: MyArray.push(value) or append /*push_back*/
- JS: var Value = MyArray.pop(); SQ: local Value = MyArray.pop() /*pop_back*/
- JS: var Value = MyArray.shift(); SQ: local Value = MyArray[0]; MyArray.remove(0); /*pop_front*/
- JS: var Val = MyArray[MyArray.length-1]; SQ: local Val = MyArray.top() /*pop_back w/o pop*/
- JS: MyArray = Array.concat(MyArray,Array2); SQ: MyArray.extend( Array2 ) /*push_back an array*/
- JS: MyArray.splice(Index,0,Value[,Value2,…]); SQ: MyArray.insert( Index, Value );
- JS: MyArray.splice(Index,1); /* How Many */ SQ: MyArray.remove( Index );
- JS: MyArray.length = Size; (unconfirmed) SQ: MyArray.resize( Size [,Fill] );
- JS: MyArray.length = 0; (unconfirmed) SQ: MyArray.clear();
- JS: MyArray.sort() SQ: MyArray.Array.sort( [CompareFunction] );
- JS: MyArray.reverse(); SQ: MyArray.reverse();
- JS: var MySlice = MyArray.slice(Start [,End]); SQ: local MySlice = MyArray.slice(Start [,End]);
- JS: for(var idx=0;idx
SQ: MyArray.apply( MyFunction ); - SQ: MyArray.reduce( … ) /* leave All but one, call function on removed */
- SQ: MyArray.filter( ) /* make new list based on all that match pattern */
- JS: var MyObject = {}; SQ: local MyTable = {};
- JS: var MyObject = {}; SQ: MyTable <- {};
- JS: var MyObject.Member = Value; SQ: MyTable.Member <- Value; /* Create Only. Can use = after */
- JS: delete MyObject.Member; SQ: delete MyTable.Member; /* returns old value */
- JS: if ( (typeof MyTable.Member) != “undefined” ) Has(); SQ: if ( “Member” in MyTable ) Has();
- JS: alert( MyObject.join() ); /* output contents to string */ SQ: ??? (do a loop)
- JS: no but you can make a function SQ: print( MyTable.len() );
- JS: nope SQ: MyTable.clear();
- SQ: MyTable.rawget(key) /* Get w/o delegation */
- SQ: MyTable.rawset(key,value) /* Set w/o delegation. Creates if doesn’t exist */
- SQ: MyTable.rawdelete() /* Deletes and returns value w/o delegation. null if doesn’t exist */
- SQ: MyTable.rawin(key) /* true if exists (same as in operator) w/o delegation */
- SQ: MyTable.setdelegate( MyDelegate ) /* null clears */
- SQ: MyTable.getdelegate() /* returns delegate, or null if none */
- JS: function MyFunc() { } SQ: function MyFunc() { }
- JS: function MyFunc(arg1,arg2) { } SQ: function MyFunc(arg1,arg2) { }
- JS: var MyFunc = function() { } SQ: local MyFunc = function() { }
- JS: none SQ: if ( (@(arg1,arg2) arg1 + arg2) > 0 ) {…}
- JS: MyFunc.call(MyThis [,args,…]); SQ: MyFunc.call(MyThis [,args,…]);
- SQ: pcall(…) ignores error callback. acall(…) takes an array; arg[0] is this. pacall is array pcall.
- SQ: local BoundFunc = MyFunc.bindenv(OtherEnv); /* replaces .this with OtherEnv (Table) */
- SQ: MyFunc.getinfos() returns an object containing information about a function.
- SQ: if ( MyInstance instanceof MyClass ) {…}
- SQ: Metamethods: _add, _sub, _mul, _div, _unm, _modulo, _set, _get, _typeof, _nexti, _cmp, _call, _delslot, _tostring, _newmember, _inherited
Strings and Numbers (mostly Strings)
Arrays
Objects (JS) and Tables (SQ)
Functions
TODO: Class Inheritance
TODO: Generators
yield, resume
TODO: Coroutines (i.e. N/A JS, but sort of. TODO C++ Coroutine)
TODO: Try Catch