From a6694e985c29b816562c03591f1a3f3303644c90 Mon Sep 17 00:00:00 2001 From: bakpakin Date: Wed, 31 Jan 2018 17:56:10 -0500 Subject: [PATCH] Add a few more ast functions. --- src/core/ast.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core/ast.c b/src/core/ast.c index 7a9531c6..185ca61f 100644 --- a/src/core/ast.c +++ b/src/core/ast.c @@ -195,9 +195,35 @@ static int cfun_unwrap(DstArgs args) { return dst_return(args, dst_ast_unwrap(args.v[0])); } +static int cfun_wrap(DstArgs args) { + if (args.n != 1) return dst_throw(args, "expected 1 argument"); + return dst_return(args, dst_ast_wrap(args.v[0], -1, -1)); +} + +static int cfun_node(DstArgs args) { + DstAst *ast; + Dst *tup; + int32_t start, end; + if (args.n != 1) return dst_throw(args, "expected 1 argument"); + ast = dst_ast_node(args.v[0]); + if (ast) { + start = ast->source_start; + end = ast->source_end; + } else { + start = -1; + end = -1; + } + tup = dst_tuple_begin(2); + tup[0] = dst_wrap_integer(start); + tup[1] = dst_wrap_integer(end); + return dst_return(args, dst_wrap_tuple(dst_tuple_end(tup))); +} + static const DstReg cfuns[] = { {"ast-unwrap", cfun_unwrap}, {"ast-unwrap1", cfun_unwrap1}, + {"ast-wrap", cfun_wrap}, + {"ast-node", cfun_node}, {NULL, NULL} };