Mark McGranaghan 8d31ec147c move to vendor
2012-11-17 08:21:42 -08:00

549 lines
8.5 KiB
Plaintext

// This is a one line comment.
/* an inner comment */
/* nested /* comments */ */
/*
/*
Multi-line.
*/
*/
// Binary blob escape.
//"some text \B(3)("\") ouhyeah" == "\"\\\"";
"some text \B(3)("\") ouhyeah" == "\"\\\"";
'some text \B(3)('\') ouhyeah' == '\'\\\'';
//"\B(4)()"'()";
"\B(4)()"'()";
'\B(4)()'"()';
//blob size limits
"hey ! \B(0)() oh !"
//blob format is wrong
"hey ! \B(2)(aaa) oh !"
"hey ! \B(100)(aaa) oh !"
//multiple blob in a string
"hey ! \B(3)(aaa) hey ! \B(3)(aaa) oh !"
// multiple digits blob size
"hey ! \B(10)(aaaaaaaaaa) !"
"hey ! \B(10)(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) !"
"hey ! \B(100)(a) !"
// multiple digits blob size
"hey ! \B(007)(aaaaaaa) !"
"hey ! \B(007)(aa) !"
"hey ! \B(007)(aaaaaaaaaaaaaaaaaa) !"
// deprecated and restricted keyworks
emit Event.new;
static int main();
loopn (2) {echo("a");};
foreach (var i : [1,2,3,4]) {
echo(i);
};
function() {};
var 'if';
var this.'else';
var '%x';
var '1 2 3';
var this.'[]';
// angles
pi == 180deg;
pi == 200grad;
// Dictionary
[ => ]; // The empty dictionary
// duration
1d == 24h;
0.5d == 12h;
1h == 60min;
1min == 60s;
1s == 1000ms;
1s == 1;
1s 2s 3s == 6;
1s 1ms == 1.001;
1ms 1s == 1.001;
1 == 1;
1 == 1.0;
1.2 == 1.2000;
1.234e6 == 1234000;
1e+11 == 1E+11;
1e10 == 10000000000;
1e30 == 1e10 * 1e10 * 1e10;
0.000001;
0.0000001;
0.00000000001;
1e+3;
1E-5;
1.;
// [00004701:error] !!! syntax error: unexpected ;
0x2a == 42;
0x2A == 42;
0xabcdef == 11259375;
0xABCDEF == 11259375;
0xFFFFFFFF == 4294967295;
//123foo;
//[00005658:error] !!! syntax error: invalid token: '123foo'
//12.3foo;
//[00018827:error] !!! syntax error: invalid token: '12.3foo'
0xabcdef;
//[00060432] 11259375
//0xabcdefg;
//[00061848:error] !!! syntax error: invalid token: '0xabcdefg'
[]; // The empty list
[1, 2, 3];
// Special characters.
"\"" == "\"";
"\\" == "\\";
// ASCII characters.
"\a" == "\007"; "\a" == "\x07";
"\b" == "\010"; "\b" == "\x08";
"\f" == "\014"; "\f" == "\x0c";
"\n" == "\012"; "\n" == "\x0a";
"\r" == "\015"; "\r" == "\x0d";
"\t" == "\011"; "\t" == "\x09";
"\v" == "\013"; "\v" == "\x0b";
// Octal escapes.
"\0" == "\00"; "\0" == "\000";
"\0000" == "\0""0";
"\062\063" == "23";
// Hexadecimal escapes.
"\x00" == "\0";
"\x32\x33" == "23";
"foo" "bar" "baz" == "foobarbaz";
// Tuples
();
[00000000] ()
(1,);
[00000000] (1,)
(1, 2);
[00000000] (1, 2)
(1, 2, 3, 4,);
[00000000] (1, 2, 3, 4)
function Global.verboseId(var x)
{
echo(x) | x
}|;
class verboseId(Global).math : verboseId(Math)
{
};
{
for (3)
{
sleep(1s);
echo("ping");
},
sleep(0.5s);
for (3)
{
sleep(1s);
echo("pong");
},
};
1 + 1 == 2;
1 - 2 == -1;
2 * 3 == 6;
10 / 2 == 5;
2 ** 10 == 1024;
-(1 + 2) == -3;
1 + 2 * 3 == 7;
(1 + 2) * 3 == 9;
-2 ** 2 == -4;
- - - - 1 == 1;
a = b
a += b
a -= b
a *= b
a /= b
a %= b
a ^= b
var value = 0|;
var valueAlias = value|;
value += 10;
valueAlias;
var myList = []|;
var myList.specialFeature = 42|;
myList += [1, 2, 3];
myList.specialFeature;
var myOtherList = myList + [4, 5];
myOtherList.specialFeature;
var something = []|;
var somethingElse = something|;
something += [1, 2];
somethingElse += [3, 4];
something;
class Counter
{
var count = 0;
function init (n) { var this.count = n };
// Display the value, and the identity.
function asString() { "%s @ %s" % [count, uid ] };
function '+'(var n) { new(count + n) };
function '-'(var n) { new(count - n) };
}|;
class ImmutableCounter : Counter
{
function '+='(var n) { this + n };
function '-='(var n) { this - n };
}|;
var ic1 = ImmutableCounter.new(0);
var ic2 = ic1;
ic1 += 1;
ic1;
ic2;
a << b
a >> b
a ^ b
4 << 2 == 16;
4 >> 2 == 1;
!a
a && b
a || b
true && true;
true || false;
!true == false;
true || (1 / 0);
(false && (1 / 0)) == false;
a == b
a != b
a === b
a !== b
a ~= b
a =~= b
a < b
a <= b
a > b
a >= b
assert{
! (0 < 0);
0 <= 0;
0 == 0;
0 !== 0;
};
a in b
a not in b
a[args]
a[args] = v
1 in [0, 1, 2];
3 not in [0, 1, 2];
"one" in ["zero" => 0, "one" => 1, "two" => 2];
"three" not in ["zero" => 0, "one" => 1, "two" => 2];
a.b
a.b(args)
a->b
a->b = v
a.&b
var obj = Object.new|;
function obj.f() { 24 }|;
var f = function(a, b) {
echo(b + a);
}|
f(1, 0);
function g3()
{
return; // Stop execution at this point and return void
echo(0); // This is not executed
}|
Object.setProperty, to define/set a property.
Object.getProperty, to get a property.
Object.removeProperty, to delete a property.
Object.hasProperty, to test for the existence of a property.
Object.properties, to get all the properties of a slot.
enum Suit
{
hearts,
diamonds,
clubs,
spades, // Last comma is optional
};
for (var suit in Suit)
echo("%s the ace of %s." % [find_ace(suit), suit]);
switch ( ("foo", [1, 2]) )
{
// The pattern does not match the values of the list.
case ("foo", [2, 1]):
echo("fail");
// The pattern does not match the tuple.
case ["foo", [1, 2]]:
echo("fail");
// The pattern matches and binds the variable "l"
// but the condition is not verified.
case ("foo", var l) if l.size == 0:
echo("fail");
// The pattern matches.
case ("foo", [var a, var b]):
echo("foo(%s, %s)" % [a, b]);
};
//[00000000] *** foo(1, 2)
{
["b" => var b, "a" => var a] = ["a" => 1, "b" => 2, "c" => 3];
echo("a = %d, b = %d" % [a, b]);
};
//[00000000] *** a = 1, b = 2
switch (["speed" => 2, "time" => 6s])
{
case ["speed" => var s] if s > 3:
echo("Too fast");
case ["speed" => var s, "time" => var t] if s * t > 10:
echo("Too far");
};
//[00000000] *** Too far
try
{
throw ("message", 0)
}
catch (var e if e.isA(Exception))
{
echo(e.message)
}
catch ((var msg, var value) if value.isA(Float))
{
echo("%s: %d" % [msg, value])
};
//[00000000] *** message: 0
{
var e = Event.new;
at (e?(var msg, var value) if value % 2 == 0)
echo("%s: %d" % [msg, value]);
// Does not trigger the "at" because the guard is not verified.
e!("message", 1);
// Trigger the "at".
e!("message", 2);
};
//[00000000] *** message: 2
for (var i = 0; i < 8; i++)
{
if (i % 2 != 0)
continue;
echo(i);
};
do (1024)
{
assert(this == 1024);
assert(sqrt == 32);
setSlot("y", 23);
}.y;
{
var n = 10|;
var res = []|;
loop;{
n--;
res << n;
if (n == 0)
break
};
res
}
{
var n = 10|;
var res = []|;
loop|{
n--;
res << n;
if (n == 0)
break
};
res
}
var j = 3|
while (0 < j)
{
echo(j);
j--;
};
{
var i = 4|
while| (true)
{
i -= 1;
echo ("in: " + i);
if (i == 1)
break
else if (i == 2)
continue;
echo ("out: " + i);
};
};
function test(e)
{
try
{ throw e; }
catch (0)
{ echo("zero") }
catch ([var x, var y])
{ echo(x + y) }
} | {};
try { echo("try") }
catch { echo("catch")}
else { echo("else")};
try
{
echo("inside");
}
finally
{
echo("finally");
};
//[00000001] *** inside
//[00000002] *** finally
at (e?(var start) ~ 1s)
echo("in : %s" % (time - start).round)
onleave
echo("out: %s" % (time - start).round);
// This emission is too short to trigger the at.
e!(time);
// This one is long enough.
// The body triggers 1s after the emission started.
e!(time) ~ 2s;
//[00001000] *** in : 1
//[00002000] *** out: 2
timeout (2.1s)
every (1s)
echo("Are you still there?");
//[00000000] *** Are you still there?
//[00001000] *** Are you still there?
//[00002000] *** Are you still there?
every| (1s)
{
echo("aba");
};
for, (var i = 3; 0 < i; i -= 1)
{
echo (i);
};
for& (var i: [0, 1, 2])
{
echo (i * i);
};
loop,{
};
waituntil (e?(1, var b));
whenever (e?("arg", var arg) if arg % 2)
echo("e (%s) on" % arg)
else
echo("e off");
while, (i)
{
var j = i -= 1;
}|
var y = 0;
{
sleep(0.5s);
y = 100 smooth:3s,
},