diff --git a/src/wren_compiler.c b/src/wren_compiler.c index 12392a32..63f48845 100644 --- a/src/wren_compiler.c +++ b/src/wren_compiler.c @@ -1456,9 +1456,6 @@ static void methodCall(Compiler* compiler, Code instruction, Compiler fnCompiler; initCompiler(&fnCompiler, compiler->parser, compiler, true); - - // TODO: Allow newline between '{' and '|'? - fnCompiler.numParams = parameterList(&fnCompiler, NULL, NULL, TOKEN_PIPE, TOKEN_PIPE); @@ -2561,8 +2558,6 @@ static void classDefinition(Compiler* compiler) // Compile the method definitions. consume(compiler, TOKEN_LEFT_BRACE, "Expect '{' after class declaration."); - - // TODO: Should newline be required here? matchLine(compiler); while (!match(compiler, TOKEN_RIGHT_BRACE)) diff --git a/src/wren_core.c b/src/wren_core.c index f377a0ce..dc7cb2da 100644 --- a/src/wren_core.c +++ b/src/wren_core.c @@ -308,7 +308,11 @@ DEF_NATIVE(fn_instantiate) DEF_NATIVE(fn_new) { - // TODO: Validate arg type. + if (!IS_FN(args[1]) && !IS_CLOSURE(args[1])) + { + RETURN_ERROR("Argument must be a function."); + } + // The block argument is already a function, so just return it. RETURN_VAL(args[1]); } diff --git a/test/function/new_with_wrong_argument_type.wren b/test/function/new_with_wrong_argument_type.wren new file mode 100644 index 00000000..e0f2a2ea --- /dev/null +++ b/test/function/new_with_wrong_argument_type.wren @@ -0,0 +1 @@ +new Fn(3) // expect runtime error: Argument must be a function.