diff options
Diffstat (limited to 'tests/lexers/croc/example.txt')
| -rw-r--r-- | tests/lexers/croc/example.txt | 5582 |
1 files changed, 5582 insertions, 0 deletions
diff --git a/tests/lexers/croc/example.txt b/tests/lexers/croc/example.txt new file mode 100644 index 00000000..f1c159c1 --- /dev/null +++ b/tests/lexers/croc/example.txt @@ -0,0 +1,5582 @@ +---input--- +module simple; + +// Importing stuff. +{ + function loadMod(name, ns) + { + assert(name == "mod"); + + ns.x = "I'm x"; + + ns.foo = function foo() + { + writefln("foo"); + }; + + ns.bar = function bar(x) + { + return x[0]; + }; + + ns.baz = function baz() + { + writefln(x); + }; + + foreach(k, v; ns) + if(isFunction(v)) + v.environment(ns); + } + + setModuleLoader("mod", loadMod); + + import mod : foo, bar; + foo(); + writefln(bar([5])); + mod.baz(); + + writefln(); +} + +// Super calls. +{ + class Base + { + function fork() + { + writefln("Base fork."); + } + } + + class Derived : Base + { + function fork() + { + writefln("Derived fork!"); + super.fork(); + } + } + + local d = Derived(); + d.fork(); + + writefln(); +} + +// Coroutines and coroutine iteration. +{ + local countDown = coroutine function countDown(x) + { + yield(); + + while(x > 0) + { + yield(x); + x--; + } + }; + + foreach(v; countDown, 5) + writefln(v); + + writefln(); + + local forEach = coroutine function forEach(t) + { + yield(); + + foreach(k, v; t) + yield(k, v); + }; + + foreach(_, k, v; forEach, {hi = 1, bye = 2}) + writefln("key: ", k, ", value: ", v); + + writefln(); +} + +// Testing tailcalls. +{ + function recurse(x) + { + writefln("recurse: ", x); + + if(x == 0) + return toString(x); + else + return recurse(x - 1); + } + + writefln(recurse(5)); + writefln(); + + class A + { + function f(x) + { + writefln("A.f: ", x); + + if(x == 0) + return toString(x); + else + return this.f(x - 1); // call it as this.f to force a 'method' instruction to be generated + } + } + + local a = A(); + writefln(a.f(5)); + writefln(); +} + +{ + // A function which lets us define properties for a class. + // The varargs should be a bunch of tables, each with a 'name' field, and 'getter' and/or 'setter' fields. + function mixinProperties(classType, vararg) + { + classType.mProps = { }; + + classType.opIndex = function opIndex(key) + { + local prop = mProps[key]; + + if(prop is null) + throw format(classType, ".opIndex() - Property '%s' does not exist", key); + + local getter = prop.getter; + + if(getter is null) + throw format(classType, ".opIndex() - Property '%s' has no getter", key); + + return getter(with this); + }; + + classType.opIndexAssign = function opIndexAssign(key, value) + { + local prop = mProps[key]; + + if(prop is null) + throw format(classType, ".opIndexAssign() - Property '%s' does not exist", key); + + local setter = prop.setter; + + if(setter is null) + throw format(classType, ".opIndexAssign() - Property '%s' has no setter", key); + + setter(with this, value); + }; + + foreach(i, prop; [vararg]) + { + if(!isTable(prop)) + throw format("mixinProperties() - property ", i, " is not a table"); + + if(prop.name is null) + throw format("mixinProperties() - property ", i, " has no name"); + + if(prop.setter is null && prop.getter is null) + throw format("mixinProperties() - property '%s' has no getter or setter", prop.name); + + classType.mProps[prop.name] = prop; + } + } + + // Create a class to test out. + class PropTest + { + mX = 0; + mY = 0; + mName = ""; + + function constructor(name) + { + mName = name; + } + + function toString() + { + return format("name = '", mName, "' x = ", mX, " y = ", mY); + } + } + + // Mix in the properties. + mixinProperties + ( + PropTest, + + { + name = "x", + + function setter(value) + { + mX = value; + } + + function getter() + { + return mX; + } + }, + + { + name = "y", + + function setter(value) + { + mY = value; + } + + function getter() + { + return mY; + } + }, + + { + name = "name", + + function getter() + { + return mName; + } + } + ); + + // Create an instance and try it out. + local p = PropTest("hello"); + + writefln(p); + p.x = 46; + p.y = 123; + p.x = p.x + p.y; + writefln(p); + + // Try to access a nonexistent property. + try + p.name = "crap"; + catch(e) + { + writefln("caught: ", e); + writefln(getTraceback()); + } + + writefln(); +} + +// Some container classes. +{ + class PQ + { + mData; + mLength = 0; + + function constructor() + { + mData = array.new(15); + } + + function insert(data) + { + resizeArray(); + mData[mLength] = data; + + local index = mLength; + local parentIndex = (index - 1) / 2; + + while(index > 0 && mData[parentIndex] > mData[index]) + { + local temp = mData[parentIndex]; + mData[parentIndex] = mData[index]; + mData[index] = temp; + + index = parentIndex; + parentIndex = (index - 1) / 2; + } + + mLength += 1; + } + + function remove() + { + if(mLength == 0) + throw "PQ.remove() - No items to remove"; + + local data = mData[0]; + mLength -= 1; + mData[0] = mData[mLength]; + + local index = 0; + local left = 1; + local right = 2; + + while(index < mLength) + { + local smaller; + + if(left >= mLength) + { + if(right >= mLength) + break; + else + smaller = right; + } + else + { + if(right >= mLength) + smaller = left; + else + { + if(mData[left] < mData[right]) + smaller = left; + else + smaller = right; + } + } + + if(mData[index] > mData[smaller]) + { + local temp = mData[index]; + mData[index] = mData[smaller]; + mData[smaller] = temp; + + index = smaller; + left = (index * 2) + 1; + right = left + 1; + } + else + break; + } + + return data; + } + + function resizeArray() + { + if(mLength >= #mData) + mData.length((#mData + 1) * 2 - 1); + } + + function hasData() + { + return mLength != 0; + } + } + + class Stack + { + mHead = null; + + function push(data) + { + local t = { data = data, next = mHead }; + mHead = t; + } + + function pop() + { + if(mHead is null) + throw "Stack.pop() - No items to pop"; + + local item = mHead; + mHead = mHead.next; + + return item.data; + } + + function hasData() + { + return mHead !is null; + } + } + + class Queue + { + mHead = null; + mTail = null; + + function push(data) + { + local t = { data = data, next = null }; + + if(mTail is null) + { + mHead = t; + mTail = t; + } + else + { + mTail.next = t; + mTail = t; + } + } + + function pop() + { + if(mTail is null) + throw "Queue.pop() - No items to pop"; + + local item = mHead; + mHead = mHead.next; + + if(mHead is null) + mTail = null; + + return item.data; + } + + function hasData() + { + return mHead !is null; + } + } + + writefln("Priority queue (heap)"); + + local prioQ = PQ(); + + for(i : 0 .. 10) + prioQ.insert(math.rand(0, 20)); + + while(prioQ.hasData()) + writefln(prioQ.remove()); + + writefln(); + writefln("Stack"); + + local stack = Stack(); + + for(i : 0 .. 5) + stack.push(i + 1); + + while(stack.hasData()) + writefln(stack.pop()); + + writefln(); + writefln("Queue"); + + local queue = Queue(); + + for(i : 0 .. 5) + queue.push(i + 1); + + while(queue.hasData()) + writefln(queue.pop()); + + writefln(); +} + +// opApply tests. +{ + class Test + { + mData = [4, 5, 6]; + + function opApply(extra) + { + if(isString(extra) && extra == "reverse") + { + local function iterator_reverse(index) + { + index--; + + if(index < 0) + return; + + return index, mData[index]; + } + + return iterator_reverse, this, #mData; + } + else + { + local function iterator(index) + { + index++; + + if(index >= #mData) + return; + + return index, mData[index]; + } + + return iterator, this, -1; + } + } + } + + local test = Test(); + + foreach(k, v; test) + writefln("test[", k, "] = ", v); + + writefln(); + + foreach(k, v; test, "reverse") + writefln("test[", k, "] = ", v); + + writefln(); + + test = + { + fork = 5, + knife = 10, + spoon = "hi" + }; + + foreach(k, v; test) + writefln("test[", k, "] = ", v); + + test = [5, 10, "hi"]; + + writefln(); + + foreach(k, v; test) + writefln("test[", k, "] = ", v); + + writefln(); + + foreach(k, v; test, "reverse") + writefln("test[", k, "] = ", v); + + writefln(); + + foreach(k, v; "hello") + writefln("str[", k, "] = ", v); + + writefln(); + + foreach(k, v; "hello", "reverse") + writefln("str[", k, "] = ", v); + + writefln(); +} + +// Testing upvalues in for loops. +{ + local arr = array.new(10); + + for(i : 0 .. 10) + arr[i] = function() { return i; }; + + writefln("This should be the values 0 through 9:"); + + foreach(func; arr) + writefln(func()); + + writefln(); +} + +// Testing nested functions. +{ + function outer() + { + local x = 3; + + function inner() + { + x++; + writefln("inner x: ", x); + } + + writefln("outer x: ", x); + inner(); + writefln("outer x: ", x); + + return inner; + } + + local func = outer(); + func(); + + writefln(); +} + +// Testing Exceptions. +{ + function thrower(x) + { + if(x >= 3) + throw "Sorry, x is too big for me!"; + } + + function tryCatch(iterations) + { + try + { + for(i : 0 .. iterations) + { + writefln("tryCatch: ", i); + thrower(i); + } + } + catch(e) + { + writefln("tryCatch caught: ", e); + throw e; + } + finally + writefln("tryCatch finally"); + } + + try + { + tryCatch(2); + tryCatch(5); + } + catch(e) + writefln("caught: ", e); + + writefln(); +} + +// Testing arrays. +{ + local array = [7, 9, 2, 3, 6]; + + array.sort(); + + foreach(i, v; array) + writefln("arr[", i, "] = ", v); + + array ~= ["foo", "far"]; + + writefln(); + + foreach(i, v; array) + writefln("arr[", i, "] = ", v); + + writefln(); +} + +// Testing vararg functions. +{ + function vargs(vararg) + { + local args = [vararg]; + + writefln("num varargs: ", #args); + + foreach(i, v; args) + writefln("args[", i, "] = ", v); + } + + vargs(); + + writefln(); + + vargs(2, 3, 5, "foo", "bar"); + + writefln(); +} + +// Testing switches. +{ + foreach(v; ["hi", "bye", "foo"]) + { + switch(v) + { + case "hi": + writefln("switched to hi"); + break; + + case "bye": + writefln("switched to bye"); + break; + + default: + writefln("switched to something else"); + break; + } + } + + writefln(); + + foreach(v; [null, false, 1, 2.3, 'x', "hi"]) + { + switch(v) + { + case null: writefln("null"); break; + case false: writefln("false"); break; + case 1: writefln("1"); break; + case 2.3: writefln("2.3"); break; + case 'x': writefln("x"); break; + case "hi": writefln("hi"); break; + } + } + + writefln(); + + class A + { + mValue; + + this(value) + { + mValue = value; + } + + function opCmp(other) + { + assert(other as A); + return mValue <=> other.mValue; + } + } + + local a1 = A(1); + local a2 = A(2); + local a3 = A(3); + + for(s : 1 .. 4) + { + local ss = A(s); + + switch(ss) + { + case a1: + writefln(1); + break; + + case a2: + writefln(2); + break; + + case a3: + writefln(3); + break; + } + } +} + +---tokens--- +'module' Keyword +' ' Text +'simple' Name +';' Punctuation +'\n' Text + +'\n' Text + +'// Importing stuff.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'function' Keyword +' ' Text +'loadMod' Name +'(' Punctuation +'name' Name +',' Punctuation +' ' Text +'ns' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'assert' Keyword +'(' Punctuation +'name' Name +' ' Text +'==' Punctuation +' ' Text +'"mod"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'ns' Name +'.' Punctuation +'x' Name +' ' Text +'=' Punctuation +' ' Text +'"I\'m x"' Literal.String +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'ns' Name +'.' Punctuation +'foo' Name +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +' ' Text +'foo' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"foo"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'ns' Name +'.' Punctuation +'bar' Name +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +' ' Text +'bar' Name +'(' Punctuation +'x' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'x' Name +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'ns' Name +'.' Punctuation +'baz' Name +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +' ' Text +'baz' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'ns' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'isFunction' Name +'(' Punctuation +'v' Name +')' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'v' Name +'.' Punctuation +'environment' Name +'(' Punctuation +'ns' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'setModuleLoader' Name +'(' Punctuation +'"mod"' Literal.String +',' Punctuation +' ' Text +'loadMod' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'import' Keyword +' ' Text +'mod' Name +' ' Text +':' Punctuation +' ' Text +'foo' Name +',' Punctuation +' ' Text +'bar' Name +';' Punctuation +'\n' Text + +'\t' Text +'foo' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +'bar' Name +'(' Punctuation +'[' Punctuation +'5' Literal.Number.Integer +']' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'mod' Name +'.' Punctuation +'baz' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Super calls.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'class' Keyword +' ' Text +'Base' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'function' Keyword +' ' Text +'fork' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"Base fork."' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\n' Text + +'\t' Text +'class' Keyword +' ' Text +'Derived' Name +' ' Text +':' Punctuation +' ' Text +'Base' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'function' Keyword +' ' Text +'fork' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"Derived fork!"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'super' Keyword +'.' Punctuation +'fork' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'d' Name +' ' Text +'=' Punctuation +' ' Text +'Derived' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'d' Name +'.' Punctuation +'fork' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Coroutines and coroutine iteration.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'local' Keyword +' ' Text +'countDown' Name +' ' Text +'=' Punctuation +' ' Text +'coroutine' Name +' ' Text +'function' Keyword +' ' Text +'countDown' Name +'(' Punctuation +'x' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'yield' Keyword +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'while' Keyword +'(' Punctuation +'x' Name +' ' Text +'>' Punctuation +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'yield' Keyword +'(' Punctuation +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'x' Name +'--' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'v' Name +';' Punctuation +' ' Text +'countDown' Name +',' Punctuation +' ' Text +'5' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'forEach' Name +' ' Text +'=' Punctuation +' ' Text +'coroutine' Name +' ' Text +'function' Keyword +' ' Text +'forEach' Name +'(' Punctuation +'t' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'yield' Keyword +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'t' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'yield' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'_' Name +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'forEach' Name +',' Punctuation +' ' Text +'{' Punctuation +'hi' Name +' ' Text +'=' Punctuation +' ' Text +'1' Literal.Number.Integer +',' Punctuation +' ' Text +'bye' Name +' ' Text +'=' Punctuation +' ' Text +'2' Literal.Number.Integer +'}' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"key: "' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'", value: "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing tailcalls.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'function' Keyword +' ' Text +'recurse' Name +'(' Punctuation +'x' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"recurse: "' Literal.String +',' Punctuation +' ' Text +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'if' Keyword +'(' Punctuation +'x' Name +' ' Text +'==' Punctuation +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'toString' Name +'(' Punctuation +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'recurse' Name +'(' Punctuation +'x' Name +' ' Text +'-' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +'recurse' Name +'(' Punctuation +'5' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'class' Keyword +' ' Text +'A' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'function' Keyword +' ' Text +'f' Name +'(' Punctuation +'x' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"A.f: "' Literal.String +',' Punctuation +' ' Text +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'x' Name +' ' Text +'==' Punctuation +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'return' Keyword +' ' Text +'toString' Name +'(' Punctuation +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t' Text +'return' Keyword +' ' Text +'this' Keyword +'.' Punctuation +'f' Name +'(' Punctuation +'x' Name +' ' Text +'-' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +' ' Text +"// call it as this.f to force a 'method' instruction to be generated\n" Comment.Single + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'a' Name +' ' Text +'=' Punctuation +' ' Text +'A' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +'a' Name +'.' Punctuation +'f' Name +'(' Punctuation +'5' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'{' Punctuation +'\n' Text + +'\t' Text +'// A function which lets us define properties for a class.\n' Comment.Single + +'\t' Text +"// The varargs should be a bunch of tables, each with a 'name' field, and 'getter' and/or 'setter' fields.\n" Comment.Single + +'\t' Text +'function' Keyword +' ' Text +'mixinProperties' Name +'(' Punctuation +'classType' Name +',' Punctuation +' ' Text +'vararg' Keyword +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'classType' Name +'.' Punctuation +'mProps' Name +' ' Text +'=' Punctuation +' ' Text +'{' Punctuation +' ' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'classType' Name +'.' Punctuation +'opIndex' Name +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +' ' Text +'opIndex' Name +'(' Punctuation +'key' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'prop' Name +' ' Text +'=' Punctuation +' ' Text +'mProps' Name +'[' Punctuation +'key' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'prop' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'classType' Name +',' Punctuation +' ' Text +'".opIndex() - Property \'%s\' does not exist"' Literal.String +',' Punctuation +' ' Text +'key' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'local' Keyword +' ' Text +'getter' Name +' ' Text +'=' Punctuation +' ' Text +'prop' Name +'.' Punctuation +'getter' Name +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'getter' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'classType' Name +',' Punctuation +' ' Text +'".opIndex() - Property \'%s\' has no getter"' Literal.String +',' Punctuation +' ' Text +'key' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'return' Keyword +' ' Text +'getter' Name +'(' Punctuation +'with' Keyword +' ' Text +'this' Keyword +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'classType' Name +'.' Punctuation +'opIndexAssign' Name +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +' ' Text +'opIndexAssign' Name +'(' Punctuation +'key' Name +',' Punctuation +' ' Text +'value' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'prop' Name +' ' Text +'=' Punctuation +' ' Text +'mProps' Name +'[' Punctuation +'key' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'prop' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'classType' Name +',' Punctuation +' ' Text +'".opIndexAssign() - Property \'%s\' does not exist"' Literal.String +',' Punctuation +' ' Text +'key' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'local' Keyword +' ' Text +'setter' Name +' ' Text +'=' Punctuation +' ' Text +'prop' Name +'.' Punctuation +'setter' Name +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'setter' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'classType' Name +',' Punctuation +' ' Text +'".opIndexAssign() - Property \'%s\' has no setter"' Literal.String +',' Punctuation +' ' Text +'key' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'setter' Name +'(' Punctuation +'with' Keyword +' ' Text +'this' Keyword +',' Punctuation +' ' Text +'value' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'foreach' Keyword +'(' Punctuation +'i' Name +',' Punctuation +' ' Text +'prop' Name +';' Punctuation +' ' Text +'[' Punctuation +'vararg' Keyword +']' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'!' Punctuation +'isTable' Name +'(' Punctuation +'prop' Name +')' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'"mixinProperties() - property "' Literal.String +',' Punctuation +' ' Text +'i' Name +',' Punctuation +' ' Text +'" is not a table"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'prop' Name +'.' Punctuation +'name' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'"mixinProperties() - property "' Literal.String +',' Punctuation +' ' Text +'i' Name +',' Punctuation +' ' Text +'" has no name"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'prop' Name +'.' Punctuation +'setter' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +' ' Text +'&&' Punctuation +' ' Text +'prop' Name +'.' Punctuation +'getter' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'format' Name +'(' Punctuation +'"mixinProperties() - property \'%s\' has no getter or setter"' Literal.String +',' Punctuation +' ' Text +'prop' Name +'.' Punctuation +'name' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'classType' Name +'.' Punctuation +'mProps' Name +'[' Punctuation +'prop' Name +'.' Punctuation +'name' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'prop' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'// Create a class to test out.\n' Comment.Single + +'\t' Text +'class' Keyword +' ' Text +'PropTest' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mX' Name +' ' Text +'=' Punctuation +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t' Text +'mY' Name +' ' Text +'=' Punctuation +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t' Text +'mName' Name +' ' Text +'=' Punctuation +' ' Text +'""' Literal.String +';' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'constructor' Name +'(' Punctuation +'name' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'mName' Name +' ' Text +'=' Punctuation +' ' Text +'name' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'toString' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'format' Name +'(' Punctuation +'"name = \'"' Literal.String +',' Punctuation +' ' Text +'mName' Name +',' Punctuation +' ' Text +'"\' x = "' Literal.String +',' Punctuation +' ' Text +'mX' Name +',' Punctuation +' ' Text +'" y = "' Literal.String +',' Punctuation +' ' Text +'mY' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'// Mix in the properties.\n' Comment.Single + +'\t' Text +'mixinProperties' Name +'\n' Text + +'\t' Text +'(' Punctuation +'\n' Text + +'\t\t' Text +'PropTest' Name +',' Punctuation +'\n' Text + +'\t\n\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'name' Name +' ' Text +'=' Punctuation +' ' Text +'"x"' Literal.String +',' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'function' Keyword +' ' Text +'setter' Name +'(' Punctuation +'value' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mX' Name +' ' Text +'=' Punctuation +' ' Text +'value' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'function' Keyword +' ' Text +'getter' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'return' Keyword +' ' Text +'mX' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +',' Punctuation +'\n' Text + +'\t\n\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'name' Name +' ' Text +'=' Punctuation +' ' Text +'"y"' Literal.String +',' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'function' Keyword +' ' Text +'setter' Name +'(' Punctuation +'value' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mY' Name +' ' Text +'=' Punctuation +' ' Text +'value' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'function' Keyword +' ' Text +'getter' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'return' Keyword +' ' Text +'mY' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +',' Punctuation +'\n' Text + +'\t\n\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'name' Name +' ' Text +'=' Punctuation +' ' Text +'"name"' Literal.String +',' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'function' Keyword +' ' Text +'getter' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'return' Keyword +' ' Text +'mName' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'// Create an instance and try it out.\n' Comment.Single + +'\t' Text +'local' Keyword +' ' Text +'p' Name +' ' Text +'=' Punctuation +' ' Text +'PropTest' Name +'(' Punctuation +'"hello"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +'p' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'p' Name +'.' Punctuation +'x' Name +' ' Text +'=' Punctuation +' ' Text +'46' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t' Text +'p' Name +'.' Punctuation +'y' Name +' ' Text +'=' Punctuation +' ' Text +'123' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t' Text +'p' Name +'.' Punctuation +'x' Name +' ' Text +'=' Punctuation +' ' Text +'p' Name +'.' Punctuation +'x' Name +' ' Text +'+' Punctuation +' ' Text +'p' Name +'.' Punctuation +'y' Name +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +'p' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'// Try to access a nonexistent property.\n' Comment.Single + +'\t' Text +'try' Keyword +'\n' Text + +'\t\t' Text +'p' Name +'.' Punctuation +'name' Name +' ' Text +'=' Punctuation +' ' Text +'"crap"' Literal.String +';' Punctuation +'\n' Text + +'\t' Text +'catch' Keyword +'(' Punctuation +'e' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"caught: "' Literal.String +',' Punctuation +' ' Text +'e' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'getTraceback' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Some container classes.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'class' Keyword +' ' Text +'PQ' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mData' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'mLength' Name +' ' Text +'=' Punctuation +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'constructor' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'mData' Name +' ' Text +'=' Punctuation +' ' Text +'array' Name +'.' Punctuation +'new' Name +'(' Punctuation +'15' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'insert' Name +'(' Punctuation +'data' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'resizeArray' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mData' Name +'[' Punctuation +'mLength' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'data' Name +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'local' Keyword +' ' Text +'index' Name +' ' Text +'=' Punctuation +' ' Text +'mLength' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'parentIndex' Name +' ' Text +'=' Punctuation +' ' Text +'(' Punctuation +'index' Name +' ' Text +'-' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +' ' Text +'/' Punctuation +' ' Text +'2' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'while' Keyword +'(' Punctuation +'index' Name +' ' Text +'>' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'&&' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'parentIndex' Name +']' Punctuation +' ' Text +'>' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'local' Keyword +' ' Text +'temp' Name +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'parentIndex' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mData' Name +'[' Punctuation +'parentIndex' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'temp' Name +';' Punctuation +'\n' Text + +'\t\n\t\t\t\t' Text +'index' Name +' ' Text +'=' Punctuation +' ' Text +'parentIndex' Name +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'parentIndex' Name +' ' Text +'=' Punctuation +' ' Text +'(' Punctuation +'index' Name +' ' Text +'-' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +' ' Text +'/' Punctuation +' ' Text +'2' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'mLength' Name +' ' Text +'+=' Punctuation +' ' Text +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'remove' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'mLength' Name +' ' Text +'==' Punctuation +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'"PQ.remove() - No items to remove"' Literal.String +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'local' Keyword +' ' Text +'data' Name +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mLength' Name +' ' Text +'-=' Punctuation +' ' Text +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mData' Name +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'mLength' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'local' Keyword +' ' Text +'index' Name +' ' Text +'=' Punctuation +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'left' Name +' ' Text +'=' Punctuation +' ' Text +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'right' Name +' ' Text +'=' Punctuation +' ' Text +'2' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'while' Keyword +'(' Punctuation +'index' Name +' ' Text +'<' Punctuation +' ' Text +'mLength' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'local' Keyword +' ' Text +'smaller' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\n\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'left' Name +' ' Text +'>=' Punctuation +' ' Text +'mLength' Name +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'right' Name +' ' Text +'>=' Punctuation +' ' Text +'mLength' Name +')' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t\t\t' Text +'smaller' Name +' ' Text +'=' Punctuation +' ' Text +'right' Name +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'right' Name +' ' Text +'>=' Punctuation +' ' Text +'mLength' Name +')' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'smaller' Name +' ' Text +'=' Punctuation +' ' Text +'left' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'mData' Name +'[' Punctuation +'left' Name +']' Punctuation +' ' Text +'<' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'right' Name +']' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t\t\t\t\t' Text +'smaller' Name +' ' Text +'=' Punctuation +' ' Text +'left' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t\t\t\t' Text +'smaller' Name +' ' Text +'=' Punctuation +' ' Text +'right' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +' ' Text +'>' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'smaller' Name +']' Punctuation +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'local' Keyword +' ' Text +'temp' Name +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'smaller' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'mData' Name +'[' Punctuation +'smaller' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'temp' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\t\n\t\t\t\t\t' Text +'index' Name +' ' Text +'=' Punctuation +' ' Text +'smaller' Name +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'left' Name +' ' Text +'=' Punctuation +' ' Text +'(' Punctuation +'index' Name +' ' Text +'*' Punctuation +' ' Text +'2' Literal.Number.Integer +')' Punctuation +' ' Text +'+' Punctuation +' ' Text +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'right' Name +' ' Text +'=' Punctuation +' ' Text +'left' Name +' ' Text +'+' Punctuation +' ' Text +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'return' Keyword +' ' Text +'data' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'resizeArray' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'mLength' Name +' ' Text +'>=' Punctuation +' ' Text +'#' Punctuation +'mData' Name +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mData' Name +'.' Punctuation +'length' Name +'(' Punctuation +'(' Punctuation +'#' Punctuation +'mData' Name +' ' Text +'+' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +' ' Text +'*' Punctuation +' ' Text +'2' Literal.Number.Integer +' ' Text +'-' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'hasData' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'mLength' Name +' ' Text +'!=' Punctuation +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'class' Keyword +' ' Text +'Stack' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'push' Name +'(' Punctuation +'data' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'t' Name +' ' Text +'=' Punctuation +' ' Text +'{' Punctuation +' ' Text +'data' Name +' ' Text +'=' Punctuation +' ' Text +'data' Name +',' Punctuation +' ' Text +'next' Name +' ' Text +'=' Punctuation +' ' Text +'mHead' Name +' ' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'t' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'pop' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'mHead' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'"Stack.pop() - No items to pop"' Literal.String +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'local' Keyword +' ' Text +'item' Name +' ' Text +'=' Punctuation +' ' Text +'mHead' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'mHead' Name +'.' Punctuation +'next' Name +';' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'return' Keyword +' ' Text +'item' Name +'.' Punctuation +'data' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'hasData' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'mHead' Name +' ' Text +'!' Punctuation +'is' Keyword +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'class' Keyword +' ' Text +'Queue' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\t' Text +'mTail' Name +' ' Text +'=' Punctuation +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'push' Name +'(' Punctuation +'data' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'local' Keyword +' ' Text +'t' Name +' ' Text +'=' Punctuation +' ' Text +'{' Punctuation +' ' Text +'data' Name +' ' Text +'=' Punctuation +' ' Text +'data' Name +',' Punctuation +' ' Text +'next' Name +' ' Text +'=' Punctuation +' ' Text +'null' Keyword.Constant +' ' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'mTail' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'t' Name +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mTail' Name +' ' Text +'=' Punctuation +' ' Text +'t' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mTail' Name +'.' Punctuation +'next' Name +' ' Text +'=' Punctuation +' ' Text +'t' Name +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mTail' Name +' ' Text +'=' Punctuation +' ' Text +'t' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'pop' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'mTail' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'throw' Keyword +' ' Text +'"Queue.pop() - No items to pop"' Literal.String +';' Punctuation +'\n' Text + +'\t\t\t\t\n\t\t\t' Text +'local' Keyword +' ' Text +'item' Name +' ' Text +'=' Punctuation +' ' Text +'mHead' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'mHead' Name +' ' Text +'=' Punctuation +' ' Text +'mHead' Name +'.' Punctuation +'next' Name +';' Punctuation +'\n' Text + +'\t\t\t\n\t\t\t' Text +'if' Keyword +'(' Punctuation +'mHead' Name +' ' Text +'is' Keyword +' ' Text +'null' Keyword.Constant +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'mTail' Name +' ' Text +'=' Punctuation +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\t\t\t\n\t\t\t' Text +'return' Keyword +' ' Text +'item' Name +'.' Punctuation +'data' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'function' Keyword +' ' Text +'hasData' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'mHead' Name +' ' Text +'!' Punctuation +'is' Keyword +' ' Text +'null' Keyword.Constant +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +'"Priority queue (heap)"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'prioQ' Name +' ' Text +'=' Punctuation +' ' Text +'PQ' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'for' Keyword +'(' Punctuation +'i' Name +' ' Text +':' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'10' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'prioQ' Name +'.' Punctuation +'insert' Name +'(' Punctuation +'math' Name +'.' Punctuation +'rand' Name +'(' Punctuation +'0' Literal.Number.Integer +',' Punctuation +' ' Text +'20' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'while' Keyword +'(' Punctuation +'prioQ' Name +'.' Punctuation +'hasData' Name +'(' Punctuation +')' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'prioQ' Name +'.' Punctuation +'remove' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +'"Stack"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'stack' Name +' ' Text +'=' Punctuation +' ' Text +'Stack' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'for' Keyword +'(' Punctuation +'i' Name +' ' Text +':' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'5' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'stack' Name +'.' Punctuation +'push' Name +'(' Punctuation +'i' Name +' ' Text +'+' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'while' Keyword +'(' Punctuation +'stack' Name +'.' Punctuation +'hasData' Name +'(' Punctuation +')' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'stack' Name +'.' Punctuation +'pop' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'writefln' Name +'(' Punctuation +'"Queue"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'queue' Name +' ' Text +'=' Punctuation +' ' Text +'Queue' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'for' Keyword +'(' Punctuation +'i' Name +' ' Text +':' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'5' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'queue' Name +'.' Punctuation +'push' Name +'(' Punctuation +'i' Name +' ' Text +'+' Punctuation +' ' Text +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'while' Keyword +'(' Punctuation +'queue' Name +'.' Punctuation +'hasData' Name +'(' Punctuation +')' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'queue' Name +'.' Punctuation +'pop' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// opApply tests.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'class' Keyword +' ' Text +'Test' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mData' Name +' ' Text +'=' Punctuation +' ' Text +'[' Punctuation +'4' Literal.Number.Integer +',' Punctuation +' ' Text +'5' Literal.Number.Integer +',' Punctuation +' ' Text +'6' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'opApply' Name +'(' Punctuation +'extra' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'if' Keyword +'(' Punctuation +'isString' Name +'(' Punctuation +'extra' Name +')' Punctuation +' ' Text +'&&' Punctuation +' ' Text +'extra' Name +' ' Text +'==' Punctuation +' ' Text +'"reverse"' Literal.String +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'local' Keyword +' ' Text +'function' Keyword +' ' Text +'iterator_reverse' Name +'(' Punctuation +'index' Name +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'index' Name +'--' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t\t\n\t\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'index' Name +' ' Text +'<' Punctuation +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'return' Keyword +';' Punctuation +'\n' Text + +'\t\t\t\t\t\t\n\t\t\t\t\t' Text +'return' Keyword +' ' Text +'index' Name +',' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t\t\t' Text +'return' Keyword +' ' Text +'iterator_reverse' Name +',' Punctuation +' ' Text +'this' Keyword +',' Punctuation +' ' Text +'#' Punctuation +'mData' Name +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t\t' Text +'else' Keyword +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'local' Keyword +' ' Text +'function' Keyword +' ' Text +'iterator' Name +'(' Punctuation +'index' Name +')' Punctuation +'\n' Text + +'\t\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t\t' Text +'index' Name +'++' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t\t\t\t' Text +'if' Keyword +'(' Punctuation +'index' Name +' ' Text +'>=' Punctuation +' ' Text +'#' Punctuation +'mData' Name +')' Punctuation +'\n' Text + +'\t\t\t\t\t\t' Text +'return' Keyword +';' Punctuation +'\n' Text + +'\t\t\n\t\t\t\t\t' Text +'return' Keyword +' ' Text +'index' Name +',' Punctuation +' ' Text +'mData' Name +'[' Punctuation +'index' Name +']' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t\t\t' Text +'return' Keyword +' ' Text +'iterator' Name +',' Punctuation +' ' Text +'this' Keyword +',' Punctuation +' ' Text +'-' Punctuation +'1' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'test' Name +' ' Text +'=' Punctuation +' ' Text +'Test' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'test' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"test["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'test' Name +',' Punctuation +' ' Text +'"reverse"' Literal.String +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"test["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'test' Name +' ' Text +'=' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'fork' Name +' ' Text +'=' Punctuation +' ' Text +'5' Literal.Number.Integer +',' Punctuation +'\n' Text + +'\t\t' Text +'knife' Name +' ' Text +'=' Punctuation +' ' Text +'10' Literal.Number.Integer +',' Punctuation +'\n' Text + +'\t\t' Text +'spoon' Name +' ' Text +'=' Punctuation +' ' Text +'"hi"' Literal.String +'\n' Text + +'\t' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'test' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"test["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'test' Name +' ' Text +'=' Punctuation +' ' Text +'[' Punctuation +'5' Literal.Number.Integer +',' Punctuation +' ' Text +'10' Literal.Number.Integer +',' Punctuation +' ' Text +'"hi"' Literal.String +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'test' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"test["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'test' Name +',' Punctuation +' ' Text +'"reverse"' Literal.String +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"test["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'"hello"' Literal.String +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"str["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'k' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'"hello"' Literal.String +',' Punctuation +' ' Text +'"reverse"' Literal.String +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"str["' Literal.String +',' Punctuation +' ' Text +'k' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing upvalues in for loops.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'local' Keyword +' ' Text +'arr' Name +' ' Text +'=' Punctuation +' ' Text +'array' Name +'.' Punctuation +'new' Name +'(' Punctuation +'10' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'for' Keyword +'(' Punctuation +'i' Name +' ' Text +':' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'10' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t' Text +'arr' Name +'[' Punctuation +'i' Name +']' Punctuation +' ' Text +'=' Punctuation +' ' Text +'function' Keyword +'(' Punctuation +')' Punctuation +' ' Text +'{' Punctuation +' ' Text +'return' Keyword +' ' Text +'i' Name +';' Punctuation +' ' Text +'}' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +'"This should be the values 0 through 9:"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'func' Name +';' Punctuation +' ' Text +'arr' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'func' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing nested functions.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'function' Keyword +' ' Text +'outer' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'local' Keyword +' ' Text +'x' Name +' ' Text +'=' Punctuation +' ' Text +'3' Literal.Number.Integer +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'inner' Name +'(' Punctuation +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'x' Name +'++' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"inner x: "' Literal.String +',' Punctuation +' ' Text +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'writefln' Name +'(' Punctuation +'"outer x: "' Literal.String +',' Punctuation +' ' Text +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'inner' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"outer x: "' Literal.String +',' Punctuation +' ' Text +'x' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'return' Keyword +' ' Text +'inner' Name +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'func' Name +' ' Text +'=' Punctuation +' ' Text +'outer' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'func' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing Exceptions.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'function' Keyword +' ' Text +'thrower' Name +'(' Punctuation +'x' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'if' Keyword +'(' Punctuation +'x' Name +' ' Text +'>=' Punctuation +' ' Text +'3' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t\t\t' Text +'throw' Keyword +' ' Text +'"Sorry, x is too big for me!"' Literal.String +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'function' Keyword +' ' Text +'tryCatch' Name +'(' Punctuation +'iterations' Name +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'try' Keyword +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'for' Keyword +'(' Punctuation +'i' Name +' ' Text +':' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'iterations' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'"tryCatch: "' Literal.String +',' Punctuation +' ' Text +'i' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'thrower' Name +'(' Punctuation +'i' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'catch' Keyword +'(' Punctuation +'e' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"tryCatch caught: "' Literal.String +',' Punctuation +' ' Text +'e' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'throw' Keyword +' ' Text +'e' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\t' Text +'finally' Keyword +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"tryCatch finally"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'try' Keyword +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'tryCatch' Name +'(' Punctuation +'2' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t' Text +'tryCatch' Name +'(' Punctuation +'5' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'catch' Keyword +'(' Punctuation +'e' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"caught: "' Literal.String +',' Punctuation +' ' Text +'e' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing arrays.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'local' Keyword +' ' Text +'array' Name +' ' Text +'=' Punctuation +' ' Text +'[' Punctuation +'7' Literal.Number.Integer +',' Punctuation +' ' Text +'9' Literal.Number.Integer +',' Punctuation +' ' Text +'2' Literal.Number.Integer +',' Punctuation +' ' Text +'3' Literal.Number.Integer +',' Punctuation +' ' Text +'6' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'array' Name +'.' Punctuation +'sort' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'i' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'array' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"arr["' Literal.String +',' Punctuation +' ' Text +'i' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'array' Name +' ' Text +'~=' Punctuation +' ' Text +'[' Punctuation +'"foo"' Literal.String +',' Punctuation +' ' Text +'"far"' Literal.String +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'i' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'array' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'writefln' Name +'(' Punctuation +'"arr["' Literal.String +',' Punctuation +' ' Text +'i' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing vararg functions.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'function' Keyword +' ' Text +'vargs' Name +'(' Punctuation +'vararg' Keyword +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'local' Keyword +' ' Text +'args' Name +' ' Text +'=' Punctuation +' ' Text +'[' Punctuation +'vararg' Keyword +']' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'writefln' Name +'(' Punctuation +'"num varargs: "' Literal.String +',' Punctuation +' ' Text +'#' Punctuation +'args' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'foreach' Keyword +'(' Punctuation +'i' Name +',' Punctuation +' ' Text +'v' Name +';' Punctuation +' ' Text +'args' Name +')' Punctuation +'\n' Text + +'\t\t\t' Text +'writefln' Name +'(' Punctuation +'"args["' Literal.String +',' Punctuation +' ' Text +'i' Name +',' Punctuation +' ' Text +'"] = "' Literal.String +',' Punctuation +' ' Text +'v' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'vargs' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'vargs' Name +'(' Punctuation +'2' Literal.Number.Integer +',' Punctuation +' ' Text +'3' Literal.Number.Integer +',' Punctuation +' ' Text +'5' Literal.Number.Integer +',' Punctuation +' ' Text +'"foo"' Literal.String +',' Punctuation +' ' Text +'"bar"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text + +'\n' Text + +'// Testing switches.\n' Comment.Single + +'{' Punctuation +'\n' Text + +'\t' Text +'foreach' Keyword +'(' Punctuation +'v' Name +';' Punctuation +' ' Text +'[' Punctuation +'"hi"' Literal.String +',' Punctuation +' ' Text +'"bye"' Literal.String +',' Punctuation +' ' Text +'"foo"' Literal.String +']' Punctuation +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'switch' Keyword +'(' Punctuation +'v' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'"hi"' Literal.String +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'"switched to hi"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t\t\n\t\t\t' Text +'case' Keyword +' ' Text +'"bye"' Literal.String +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'"switched to bye"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t\t\n\t\t\t' Text +'default' Keyword +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'"switched to something else"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'foreach' Keyword +'(' Punctuation +'v' Name +';' Punctuation +' ' Text +'[' Punctuation +'null' Keyword.Constant +',' Punctuation +' ' Text +'false' Keyword.Constant +',' Punctuation +' ' Text +'1' Literal.Number.Integer +',' Punctuation +' ' Text +'2.3' Literal.Number.Float +',' Punctuation +' ' Text +"'x'" Literal.String.Char +',' Punctuation +' ' Text +'"hi"' Literal.String +']' Punctuation +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'switch' Keyword +'(' Punctuation +'v' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'null' Keyword.Constant +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"null"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'false' Keyword.Constant +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"false"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'1' Literal.Number.Integer +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"1"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'2.3' Literal.Number.Float +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"2.3"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +"'x'" Literal.String.Char +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"x"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'"hi"' Literal.String +':' Punctuation +' ' Text +'writefln' Name +'(' Punctuation +'"hi"' Literal.String +')' Punctuation +';' Punctuation +' ' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'writefln' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'class' Keyword +' ' Text +'A' Name +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'mValue' Name +';' Punctuation +'\n' Text + +'\t\t\n\t\t' Text +'this' Keyword +'(' Punctuation +'value' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'mValue' Name +' ' Text +'=' Punctuation +' ' Text +'value' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t\t' Text +'function' Keyword +' ' Text +'opCmp' Name +'(' Punctuation +'other' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'assert' Keyword +'(' Punctuation +'other' Name +' ' Text +'as' Keyword +' ' Text +'A' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t' Text +'return' Keyword +' ' Text +'mValue' Name +' ' Text +'<=>' Punctuation +' ' Text +'other' Name +'.' Punctuation +'mValue' Name +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'\t\n\t' Text +'local' Keyword +' ' Text +'a1' Name +' ' Text +'=' Punctuation +' ' Text +'A' Name +'(' Punctuation +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'local' Keyword +' ' Text +'a2' Name +' ' Text +'=' Punctuation +' ' Text +'A' Name +'(' Punctuation +'2' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t' Text +'local' Keyword +' ' Text +'a3' Name +' ' Text +'=' Punctuation +' ' Text +'A' Name +'(' Punctuation +'3' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t' Text +'for' Keyword +'(' Punctuation +'s' Name +' ' Text +':' Punctuation +' ' Text +'1' Literal.Number.Integer +' ' Text +'..' Punctuation +' ' Text +'4' Literal.Number.Integer +')' Punctuation +'\n' Text + +'\t' Text +'{' Punctuation +'\n' Text + +'\t\t' Text +'local' Keyword +' ' Text +'ss' Name +' ' Text +'=' Punctuation +' ' Text +'A' Name +'(' Punctuation +'s' Name +')' Punctuation +';' Punctuation +'\n' Text + +'\t\n\t\t' Text +'switch' Keyword +'(' Punctuation +'ss' Name +')' Punctuation +'\n' Text + +'\t\t' Text +'{' Punctuation +'\n' Text + +'\t\t\t' Text +'case' Keyword +' ' Text +'a1' Name +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'1' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'case' Keyword +' ' Text +'a2' Name +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'2' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\n\t\t\t' Text +'case' Keyword +' ' Text +'a3' Name +':' Punctuation +'\n' Text + +'\t\t\t\t' Text +'writefln' Name +'(' Punctuation +'3' Literal.Number.Integer +')' Punctuation +';' Punctuation +'\n' Text + +'\t\t\t\t' Text +'break' Keyword +';' Punctuation +'\n' Text + +'\t\t' Text +'}' Punctuation +'\n' Text + +'\t' Text +'}' Punctuation +'\n' Text + +'}' Punctuation +'\n' Text |
