Commits

Anonymous committed 03fc681

add urbiscript example file

Comments (0)

Files changed (1)

tests/examplefiles/example.u

+ // 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, 
+},
+
+       
+ 
+