From a4456d8ecfa5d4f4e8756b983465c58068b8a561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Barzowski?= Date: Fri, 18 Aug 2017 14:16:05 -0400 Subject: [PATCH] Add desugaring of standalone assertions --- desugarer.go | 17 +++++++++++++++-- testdata/assert.golden | 1 + testdata/assert.input | 1 + testdata/assert_failed.golden | 1 + testdata/assert_failed.input | 1 + testdata/assert_failed_custom.golden | 1 + testdata/assert_failed_custom.input | 1 + 7 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 testdata/assert.golden create mode 100644 testdata/assert.input create mode 100644 testdata/assert_failed.golden create mode 100644 testdata/assert_failed.input create mode 100644 testdata/assert_failed_custom.golden create mode 100644 testdata/assert_failed_custom.input diff --git a/desugarer.go b/desugarer.go index d5c6f04..5e68688 100644 --- a/desugarer.go +++ b/desugarer.go @@ -228,6 +228,13 @@ func desugarObjectComp(astComp *ast.ObjectComp, objLevel int) (ast.Node, error) // TODO(sbarzowski) this } +func buildLiteralString(value string) ast.Node { + return &ast.LiteralString{ + Kind: ast.StringDouble, + Value: value, + } +} + func buildSimpleIndex(obj ast.Node, member ast.Identifier) ast.Node { return &ast.Index{ Target: obj, @@ -301,8 +308,14 @@ func desugar(astPtr *ast.Node, objLevel int) (err error) { *astPtr = comp case *ast.Assert: - // TODO(sbarzowski) this - *astPtr = &ast.LiteralNull{} + if node.Message == nil { + node.Message = buildLiteralString("Assertion failed") + } + *astPtr = &ast.Conditional{ + Cond: node.Cond, + BranchTrue: node.Rest, + BranchFalse: &ast.Error{Expr: node.Message}, + } case *ast.Binary: // some operators get replaced by stdlib functions diff --git a/testdata/assert.golden b/testdata/assert.golden new file mode 100644 index 0000000..27ba77d --- /dev/null +++ b/testdata/assert.golden @@ -0,0 +1 @@ +true diff --git a/testdata/assert.input b/testdata/assert.input new file mode 100644 index 0000000..2fff0f6 --- /dev/null +++ b/testdata/assert.input @@ -0,0 +1 @@ +assert true; true diff --git a/testdata/assert_failed.golden b/testdata/assert_failed.golden new file mode 100644 index 0000000..57b9b74 --- /dev/null +++ b/testdata/assert_failed.golden @@ -0,0 +1 @@ +RUNTIME ERROR: Assertion failed diff --git a/testdata/assert_failed.input b/testdata/assert_failed.input new file mode 100644 index 0000000..222c9e7 --- /dev/null +++ b/testdata/assert_failed.input @@ -0,0 +1 @@ +assert false; true diff --git a/testdata/assert_failed_custom.golden b/testdata/assert_failed_custom.golden new file mode 100644 index 0000000..6755f2a --- /dev/null +++ b/testdata/assert_failed_custom.golden @@ -0,0 +1 @@ +RUNTIME ERROR: Custom Message diff --git a/testdata/assert_failed_custom.input b/testdata/assert_failed_custom.input new file mode 100644 index 0000000..20572db --- /dev/null +++ b/testdata/assert_failed_custom.input @@ -0,0 +1 @@ +assert false : "Custom Message"; true