var cache = {};
var _gen = function(name)
{
if(cache.hasOwnProperty(name))
return cache[name];
// ...
| (function($G) | |
| { | |
| var OldRegExp = $G.RegExp; | |
| var _createHashTable = | |
| Object.create && function() | |
| { | |
| return Object.create(null); | |
| } || | |
| {}.__proto__ && function() |
| (function($G) | |
| { | |
| var _extend = | |
| Object.getOwnPropertyNames && function(from, to) | |
| { | |
| var keys = Object.getOwnPropertyNames(from); | |
| var i = keys.length; while(i--) | |
| { | |
| var key = keys[i]; |
| var a = new MutableValue( | |
| { | |
| __call__: function(b) | |
| { | |
| this = b; | |
| }; | |
| } | |
| ); | |
| a(1); // really a = 1 |
| (function($G) | |
| { | |
| var defaultThis = (function(){ return this; })(); | |
| var Vector = function(x, y, z) | |
| { | |
| // cast | |
| if(this === defaultThis) | |
| { | |
| return Vector.prototype._calc(x); |
| Object.prototype.__defineGetter__ = function(name, _fn) | |
| { | |
| var self = this; | |
| var _wrapper = function() | |
| { | |
| return _fn.call(self); | |
| }; | |
| this[name] = | |
| { |
| struct HashTable // Open addressing Hash Table with linear probing | |
| { | |
| int entriesCount; | |
| int id; | |
| HashTableEntry entries[0]; | |
| }; | |
| void HashTable::_set(Const String key, Value& value) | |
| { | |
| // if key is new |
| Const Value& HashTable::_lookup(Const String& key) | |
| { | |
| int hash = _hash(key); | |
| int p = hash%entriesCount; | |
| while(entries[p].hash == hash && p < entriesCount) | |
| { | |
| if(_stringCompare(entries[p].key, key)) | |
| return entries[p].value; | |
| String String::slice(Int begin, Int end) | |
| { | |
| String a; | |
| // calculate real begin and end | |
| a.begin = buffer->begin + begin; | |
| a.length = end - begin; | |
| a.buffer = buffer; | |
| buffer->refCount++; |