From 5c369faa461ec4416d2d4b231a5b36963a7315ce Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 4 Apr 2016 13:06:50 +0200 Subject: Implement value typing, null support via value attributes For example: v = [null] v = [string] abc v += ABC # abcABC --- tests/variable/null/buildfile | 22 ++++++++++++++ tests/variable/null/test.out | 7 +++++ tests/variable/null/test.sh | 3 ++ tests/variable/type/buildfile | 67 ++++++++++++++++++++++++++++++++++++++++--- tests/variable/type/test.out | 9 ++++++ 5 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 tests/variable/null/buildfile create mode 100644 tests/variable/null/test.out create mode 100755 tests/variable/null/test.sh (limited to 'tests/variable') diff --git a/tests/variable/null/buildfile b/tests/variable/null/buildfile new file mode 100644 index 0000000..3fa1a9e --- /dev/null +++ b/tests/variable/null/buildfile @@ -0,0 +1,22 @@ +#v = [null=junk] # error: unexpected value for attribute null: junk +#v = [null] junk # error: empty null value expected instead of 'junk' + +print $v0 # Undefined. + +v1 = [null] +print $v1 + +v2 = x +v2 = [null] +print $v2 + +v3a = [null] +v3b = $v3a +print $v3b +v3b = ($v3a) +print $v3b +print ($v3b) + +print [null] + +./: diff --git a/tests/variable/null/test.out b/tests/variable/null/test.out new file mode 100644 index 0000000..5119a71 --- /dev/null +++ b/tests/variable/null/test.out @@ -0,0 +1,7 @@ +[null] +[null] +[null] +[null] +[null] +[null] +[null] diff --git a/tests/variable/null/test.sh b/tests/variable/null/test.sh new file mode 100755 index 0000000..afcb3bd --- /dev/null +++ b/tests/variable/null/test.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +b -q | diff -u test.out - diff --git a/tests/variable/type/buildfile b/tests/variable/type/buildfile index 372b0ad..85c18e1 100644 --- a/tests/variable/type/buildfile +++ b/tests/variable/type/buildfile @@ -1,5 +1,13 @@ # Variable typing. # + +#[string] str3 = foo +#[bool] str3 = false # error: changing str3 type from string to bool + +#[bool string] str3 = foo # error: multiple variable types: bool, string + +#[junk] jnk = foo # error: unknown variable attribute junk + [string] str1 = bar str1 =+ foo str1 += baz @@ -10,12 +18,63 @@ str2 = bar str2 += baz print $str2 -#[string] str3 = foo -#[bool] str3 = false # error: changing str3 type from string to bool +# Value typing. +# -#[bool string] str3 = foo # error: multiple variable types: bool, string +#v = [bool string] true # error: multiple value types: string, bool +#v = [string=junk] true # error: unexpected value for attribute string: junk -#[junk] jnk = foo # error: unknown variable attribute junk +#[string] var = +#var = [bool] true # error: confliction variable var type string and value type bool + +#var = [string] false +#var += [bool] true # error: confliction original value type string and append/prepend value type bool + +v1a = [uint64] 00 +v1b += [uint64] 00 +v1c =+ [uint64] 00 +print $v1a $v1b $v1c # 0 0 0 + +v2 = [uint64] 00 +v2 = [string] 00 +print $v2 # 00 + +#v3a = [uint64] 00 +#v3a += [string] 00 # error: confliction original value type uint64 and append/prepend value type string + +#v3b = [uint64] 00 +#v3b =+ [string] 00 # error: confliction original value type uint64 and append/prepend value type string + +v4a = 01 +v4a += [uint64] 01 +print $v4a # 2 + +v4b = 01 +v4b =+ [uint64] 01 +print $v4b # 2 + +v5a = 01 +sub/: +{ + v5a += [uint64] 01 + print $v5a # 2 +} + +v5b = 01 +sub/: +{ + v5b =+ [uint64] 01 + print $v5b # 2 +} + +v6 = [uint64 null] +v6 += 00 +print $v6 # 0 + +v7 = [string null] +v7 += [uint64] 00 +print $v7 # 0 +print [uint64] 00 # 0 ./: diff --git a/tests/variable/type/test.out b/tests/variable/type/test.out index f5dfb84..4aea91f 100644 --- a/tests/variable/type/test.out +++ b/tests/variable/type/test.out @@ -1,2 +1,11 @@ foobarbaz foobarbaz +0 0 0 +00 +2 +2 +2 +2 +0 +0 +0 -- cgit v1.1