mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-11 22:28:45 +01:00
Convert fiber tests to use block arguments.
This commit is contained in:
@ -846,7 +846,6 @@ static void nextToken(Parser* parser)
|
||||
// Discard newlines after tokens that cannot end an expression.
|
||||
case TOKEN_LEFT_PAREN:
|
||||
case TOKEN_LEFT_BRACKET:
|
||||
case TOKEN_LEFT_BRACE:
|
||||
case TOKEN_DOT:
|
||||
case TOKEN_DOTDOT:
|
||||
case TOKEN_DOTDOTDOT:
|
||||
@ -1349,6 +1348,9 @@ static void patchJump(Compiler* compiler, int offset)
|
||||
// Parses a block body, after the initial "{" has been consumed.
|
||||
static void finishBlock(Compiler* compiler)
|
||||
{
|
||||
// TODO: If no newline, just parse expr.
|
||||
match(compiler, TOKEN_LINE);
|
||||
|
||||
// Empty blocks do nothing.
|
||||
if (match(compiler, TOKEN_RIGHT_BRACE)) return;
|
||||
|
||||
@ -1465,6 +1467,12 @@ static void methodCall(Compiler* compiler, Code instruction,
|
||||
emit(&fnCompiler, CODE_NULL);
|
||||
emit(&fnCompiler, CODE_RETURN);
|
||||
}
|
||||
else if (match(&fnCompiler, TOKEN_RIGHT_BRACE))
|
||||
{
|
||||
// Empty body.
|
||||
emit(&fnCompiler, CODE_NULL);
|
||||
emit(&fnCompiler, CODE_RETURN);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: Are we OK with a newline determining whether or not there's an
|
||||
@ -1580,6 +1588,9 @@ static void function(Compiler* compiler, bool allowAssignment)
|
||||
|
||||
if (match(&fnCompiler, TOKEN_LEFT_BRACE))
|
||||
{
|
||||
// TODO: If no newline, just parse expr.
|
||||
match(compiler, TOKEN_LINE);
|
||||
|
||||
// Block body.
|
||||
finishBlock(&fnCompiler);
|
||||
|
||||
@ -2147,6 +2158,9 @@ void block(Compiler* compiler)
|
||||
// Curly block.
|
||||
if (match(compiler, TOKEN_LEFT_BRACE))
|
||||
{
|
||||
// TODO: If no newline, just parse expr.
|
||||
match(compiler, TOKEN_LINE);
|
||||
|
||||
pushScope(compiler);
|
||||
finishBlock(compiler);
|
||||
popScope(compiler);
|
||||
@ -2587,7 +2601,11 @@ static void classDefinition(Compiler* compiler)
|
||||
compiler->enclosingClass = &classCompiler;
|
||||
|
||||
// Compile the method definitions.
|
||||
consume(compiler, TOKEN_LEFT_BRACE, "Expect '{' after class body.");
|
||||
consume(compiler, TOKEN_LEFT_BRACE, "Expect '{' after class declaration.");
|
||||
|
||||
// TODO: Should newline be required here?
|
||||
match(compiler, TOKEN_LINE);
|
||||
|
||||
while (!match(compiler, TOKEN_RIGHT_BRACE))
|
||||
{
|
||||
Code instruction = CODE_METHOD_INSTANCE;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("1")
|
||||
Fiber.yield
|
||||
IO.print("2")
|
||||
})
|
||||
}
|
||||
|
||||
IO.print(fiber.isDone) // expect: false
|
||||
fiber.run // expect: 1
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
var b = Fiber.create(fn {
|
||||
var b = Fiber.create {
|
||||
IO.print("fiber b")
|
||||
})
|
||||
}
|
||||
|
||||
var a = Fiber.create(fn {
|
||||
var a = Fiber.create {
|
||||
IO.print("begin fiber a")
|
||||
b.run
|
||||
IO.print("end fiber a")
|
||||
})
|
||||
}
|
||||
|
||||
IO.print("begin main")
|
||||
a.run
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber")
|
||||
})
|
||||
}
|
||||
|
||||
IO.print("before") // expect: before
|
||||
fiber.run // expect: fiber
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber")
|
||||
})
|
||||
}
|
||||
|
||||
var result = fiber.run // expect: fiber
|
||||
IO.print(result) // expect: null
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber")
|
||||
return "result"
|
||||
})
|
||||
}
|
||||
|
||||
var result = fiber.run // expect: fiber
|
||||
IO.print(result) // expect: result
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("run")
|
||||
})
|
||||
}
|
||||
|
||||
fiber.run // expect: run
|
||||
fiber.run // expect runtime error: Cannot run a finished fiber.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber")
|
||||
})
|
||||
}
|
||||
|
||||
// The first value passed to the fiber is ignored, since there's no yield call
|
||||
// to return it.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("run")
|
||||
})
|
||||
}
|
||||
|
||||
fiber.run(1) // expect: run
|
||||
fiber.run(2) // expect runtime error: Cannot run a finished fiber.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
var fiber = Fiber.create(fn null)
|
||||
var fiber = Fiber.create {}
|
||||
IO.print(fiber is Fiber) // expect: true
|
||||
IO.print(fiber is Object) // expect: true
|
||||
IO.print(fiber is Bool) // expect: false
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber 1")
|
||||
Fiber.yield
|
||||
IO.print("fiber 2")
|
||||
Fiber.yield
|
||||
IO.print("fiber 3")
|
||||
})
|
||||
}
|
||||
|
||||
var result = fiber.run // expect: fiber 1
|
||||
IO.print("main 1") // expect: main 1
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber 1")
|
||||
var result = Fiber.yield
|
||||
IO.print(result)
|
||||
result = Fiber.yield
|
||||
IO.print(result)
|
||||
})
|
||||
}
|
||||
|
||||
fiber.run // expect: fiber 1
|
||||
IO.print("main 1") // expect: main 1
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
var fiber = Fiber.create(fn {
|
||||
var fiber = Fiber.create {
|
||||
IO.print("fiber 1")
|
||||
Fiber.yield("yield 1")
|
||||
IO.print("fiber 2")
|
||||
Fiber.yield("yield 2")
|
||||
IO.print("fiber 3")
|
||||
})
|
||||
}
|
||||
|
||||
var result = fiber.run // expect: fiber 1
|
||||
IO.print(result) // expect: yield 1
|
||||
|
||||
Reference in New Issue
Block a user