diff --git a/document/js-api/index.bs b/document/js-api/index.bs
index e31e47abd..168f54800 100644
--- a/document/js-api/index.bs
+++ b/document/js-api/index.bs
@@ -154,6 +154,7 @@ spec:ecma-262; type:exception; for:ECMAScript; text:Error
spec:ecmascript; type:exception; for:ECMAScript; text:TypeError
spec:ecmascript; type:exception; for:ECMAScript; text:RangeError
spec:ecmascript; type:interface; for:ECMAScript; text:ArrayBuffer
+spec:ecmascript; type:dfn; text:agent
spec:webidl; type:dfn; text:resolve
@@ -432,16 +433,6 @@ The verification of WebAssembly type requirements is deferred to the
1. Return |promise|.
-
To
instantiate a promise of a module |promiseOfModule| with imports |importObject|, perform the following steps:
@@ -845,7 +836,7 @@ which can be simultaneously referenced by multiple {{Instance}} objects. Each
To create a global object from a [=global address=] |globaladdr|, perform the following steps:
- 1. Let |map| be the current [=agent=]'s associated [=Global object cache=].
+ 1. Let |map| be the [=surrounding agent=]'s associated [=Global object cache=].
1. If |map|[|globaladdr|] [=map/exists=],
1. Return |map|[|globaladdr|].
1. Let |global| be a [=/new=] {{Global}}.
@@ -1012,7 +1003,7 @@ Note: Exported Functions do not have a \[[Construct]] method and thus it is not
1. Otherwise,
1. Let |method| be [=?=] [$GetMethod$](|ret|, {{@@iterator}}).
1. If |method| is undefined, [=throw=] a {{TypeError}}.
- 1. Let |values| be [=?=] [$IterableToList$](|ret|, |method|).
+ 1. Let |values| be [=?=] [$IteratorToList$]([=?=] [$GetIteratorFromMethod$](|ret|, |method|)).
1. Let |wasmValues| be a new, empty [=list=].
1. If |values|'s [=list/size=] is not |resultsSize|, throw a {{TypeError}} exception.
1. For each |value| and |resultType| in |values| and |results|, paired linearly,
diff --git a/interpreter/Makefile b/interpreter/Makefile
index f7ecc482a..5939f838e 100644
--- a/interpreter/Makefile
+++ b/interpreter/Makefile
@@ -33,6 +33,8 @@ zip: $(ZIP)
# Building
+.PHONY: $(NAME) $(JSLIB)
+
$(NAME):
rm -f $@
dune build $@.exe
@@ -47,7 +49,7 @@ $(JSLIB):
# Unit tests
UNITTESTDIR = unittest
-UNITTESTFILES = $(shell cd $(UNITTESTDIR); ls *.ml)
+UNITTESTFILES = $(shell cd $(UNITTESTDIR) > /dev/null; ls *.ml)
UNITTESTS = $(UNITTESTFILES:%.ml=%)
.PHONY: unittest
@@ -62,7 +64,7 @@ unittest/%:
# Test suite
TESTDIR = ../test/core
-TESTFILES = $(shell cd $(TESTDIR); ls *.wast; ls [a-z]*/*.wast)
+TESTFILES = $(shell cd $(TESTDIR) > /dev/null; ls *.wast; ls [a-z]*/*.wast)
TESTS = $(TESTFILES:%.wast=%)
.PHONY: test partest quiettest
diff --git a/interpreter/exec/eval.ml b/interpreter/exec/eval.ml
index fb72925c9..f161f6402 100644
--- a/interpreter/exec/eval.ml
+++ b/interpreter/exec/eval.ml
@@ -480,15 +480,16 @@ let rec step (c : config) : config =
Plain (TableCopy (x, y));
]
else (* d > s *)
+ let n' = I32.sub n 1l in
vs', List.map (Lib.Fun.flip (@@) e.at) [
- Plain (Const (I32 (I32.add d 1l) @@ e.at));
- Plain (Const (I32 (I32.add s 1l) @@ e.at));
- Plain (Const (I32 (I32.sub n 1l) @@ e.at));
- Plain (TableCopy (x, y));
- Plain (Const (I32 d @@ e.at));
- Plain (Const (I32 s @@ e.at));
+ Plain (Const (I32 (I32.add d n') @@ e.at));
+ Plain (Const (I32 (I32.add s n') @@ e.at));
Plain (TableGet y);
Plain (TableSet x);
+ Plain (Const (I32 d @@ e.at));
+ Plain (Const (I32 s @@ e.at));
+ Plain (Const (I32 n' @@ e.at));
+ Plain (TableCopy (x, y));
]
| TableInit (x, y), Num (I32 n) :: Num (I32 s) :: Num (I32 d) :: vs' ->
@@ -642,17 +643,18 @@ let rec step (c : config) : config =
Plain (MemoryCopy);
]
else (* d > s *)
+ let n' = I32.sub n 1l in
vs', List.map (Lib.Fun.flip (@@) e.at) [
- Plain (Const (I32 (I32.add d 1l) @@ e.at));
- Plain (Const (I32 (I32.add s 1l) @@ e.at));
- Plain (Const (I32 (I32.sub n 1l) @@ e.at));
- Plain (MemoryCopy);
- Plain (Const (I32 d @@ e.at));
- Plain (Const (I32 s @@ e.at));
+ Plain (Const (I32 (I32.add d n') @@ e.at));
+ Plain (Const (I32 (I32.add s n') @@ e.at));
Plain (Load
{ty = Types.I32T; align = 0; offset = 0l; pack = Some (Pack8, ZX)});
Plain (Store
{ty = Types.I32T; align = 0; offset = 0l; pack = Some Pack8});
+ Plain (Const (I32 d @@ e.at));
+ Plain (Const (I32 s @@ e.at));
+ Plain (Const (I32 n' @@ e.at));
+ Plain (MemoryCopy);
]
| MemoryInit x, Num (I32 n) :: Num (I32 s) :: Num (I32 d) :: vs' ->
diff --git a/test/core/run.py b/test/core/run.py
index 27c069436..cbdb25654 100755
--- a/test/core/run.py
+++ b/test/core/run.py
@@ -112,7 +112,7 @@ def _runTestFile(self, inputPath):
if __name__ == "__main__":
if not os.path.exists(outputDir):
- os.makedirs(outputDir)
+ os.makedirs(outputDir, exist_ok=True)
for fileName in inputFiles:
testName = 'test ' + os.path.basename(fileName)
setattr(RunTests, testName, lambda self, file=fileName: self._runTestFile(file))
diff --git a/test/core/token.wast b/test/core/token.wast
index 1dcd32e7f..624bdca6d 100644
--- a/test/core/token.wast
+++ b/test/core/token.wast
@@ -8,3 +8,279 @@
(module quote "(func br 0drop)")
"unknown operator"
)
+
+
+;; Tokens can be delimited by parentheses
+
+(module
+ (func(nop))
+)
+(module
+ (func (nop)nop)
+)
+(module
+ (func nop(nop))
+)
+(module
+ (func(nop)(nop))
+)
+(module
+ (func $f(nop))
+)
+(module
+ (func br 0(nop))
+)
+(module
+ (table 1 funcref)
+ (func)
+ (elem (i32.const 0)0)
+)
+(module
+ (table 1 funcref)
+ (func $f)
+ (elem (i32.const 0)$f)
+)
+(module
+ (memory 1)
+ (data (i32.const 0)"a")
+)
+(module
+ (import "spectest" "print"(func))
+)
+
+
+;; Tokens can be delimited by comments
+
+(module
+ (func;;bla
+ )
+)
+(module
+ (func (nop);;bla
+ )
+)
+(module
+ (func nop;;bla
+ )
+)
+(module
+ (func $f;;bla
+ )
+)
+(module
+ (func br 0;;bla
+ )
+)
+(module
+ (data "a";;bla
+ )
+)
+
+
+;; Space required between symbols and non-parenthesis tokens
+
+(module
+ (func (block $l (i32.const 0) (br_table 0 $l)))
+)
+(assert_malformed
+ (module quote
+ "(func (block $l (i32.const 0) (br_table 0$l)))"
+ )
+ "unknown operator"
+)
+
+(module
+ (func (block $l (i32.const 0) (br_table $l 0)))
+)
+(assert_malformed
+ (module quote
+ "(func (block $l (i32.const 0) (br_table $l0)))"
+ )
+ "unknown label"
+)
+
+(module
+ (func (block $l (i32.const 0) (br_table $l $l)))
+)
+(assert_malformed
+ (module quote
+ "(func (block $l (i32.const 0) (br_table $l$l)))"
+ )
+ "unknown label"
+)
+
+(module
+ (func (block $l0 (i32.const 0) (br_table $l0)))
+)
+(module
+ (func (block $l$l (i32.const 0) (br_table $l$l)))
+)
+
+
+;; Space required between strings and non-parenthesis tokens
+
+(module
+ (data "a")
+)
+(assert_malformed
+ (module quote
+ "(data\"a\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l "a")
+)
+(assert_malformed
+ (module quote
+ "(data $l\"a\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l " a")
+)
+(assert_malformed
+ (module quote
+ "(data $l\" a\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l "a ")
+)
+(assert_malformed
+ (module quote
+ "(data $l\"a \")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l "a " "b")
+)
+(assert_malformed
+ (module quote
+ "(data $l\"a \"\"b\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l "")
+)
+(assert_malformed
+ (module quote
+ "(data $l\"\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l " ")
+)
+(assert_malformed
+ (module quote
+ "(data $l\" \")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data $l " ")
+)
+(assert_malformed
+ (module quote
+ "(data $l\" \")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data "a" "b")
+)
+(assert_malformed
+ (module quote
+ "(data \"a\"\"b\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data "a" " b")
+)
+(assert_malformed
+ (module quote
+ "(data \"a\"\" b\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data "a " "b")
+)
+(assert_malformed
+ (module quote
+ "(data \"a \"\"b\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data "" "")
+)
+(assert_malformed
+ (module quote
+ "(data \"\"\"\")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data "" " ")
+)
+(assert_malformed
+ (module quote
+ "(data \"\"\" \")"
+ )
+ "unknown operator"
+)
+
+(module
+ (data " " "")
+)
+(assert_malformed
+ (module quote
+ "(data \" \"\"\")"
+ )
+ "unknown operator"
+)
+
+
+(assert_malformed
+ (module quote
+ "(func \"a\"x)"
+ )
+ "unknown operator"
+)
+(assert_malformed
+ (module quote
+ "(func \"a\"0)"
+ )
+ "unknown operator"
+)
+(assert_malformed
+ (module quote
+ "(func 0\"a\")"
+ )
+ "unknown operator"
+)
+(assert_malformed
+ (module quote
+ "(func \"a\"$x)"
+ )
+ "unknown operator"
+)
diff --git a/test/core/tokens.wast b/test/core/tokens.wast
deleted file mode 100644
index 4e785154e..000000000
--- a/test/core/tokens.wast
+++ /dev/null
@@ -1,274 +0,0 @@
-;; Tokens can be delimited by parentheses
-
-(module
- (func(nop))
-)
-(module
- (func (nop)nop)
-)
-(module
- (func nop(nop))
-)
-(module
- (func(nop)(nop))
-)
-(module
- (func $f(nop))
-)
-(module
- (func br 0(nop))
-)
-(module
- (table 1 funcref)
- (func)
- (elem (i32.const 0)0)
-)
-(module
- (table 1 funcref)
- (func $f)
- (elem (i32.const 0)$f)
-)
-(module
- (memory 1)
- (data (i32.const 0)"a")
-)
-(module
- (import "spectest" "print"(func))
-)
-
-
-;; Tokens can be delimited by comments
-
-(module
- (func;;bla
- )
-)
-(module
- (func (nop);;bla
- )
-)
-(module
- (func nop;;bla
- )
-)
-(module
- (func $f;;bla
- )
-)
-(module
- (func br 0;;bla
- )
-)
-(module
- (data "a";;bla
- )
-)
-
-
-;; Space required between symbols and non-parenthesis tokens
-
-(module
- (func (block $l (i32.const 0) (br_table 0 $l)))
-)
-(assert_malformed
- (module quote
- "(func (block $l (i32.const 0) (br_table 0$l)))"
- )
- "unknown operator"
-)
-
-(module
- (func (block $l (i32.const 0) (br_table $l 0)))
-)
-(assert_malformed
- (module quote
- "(func (block $l (i32.const 0) (br_table $l0)))"
- )
- "unknown label"
-)
-
-(module
- (func (block $l (i32.const 0) (br_table $l $l)))
-)
-(assert_malformed
- (module quote
- "(func (block $l (i32.const 0) (br_table $l$l)))"
- )
- "unknown label"
-)
-
-(module
- (func (block $l0 (i32.const 0) (br_table $l0)))
-)
-(module
- (func (block $l$l (i32.const 0) (br_table $l$l)))
-)
-
-
-;; Space required between strings and non-parenthesis tokens
-
-(module
- (data "a")
-)
-(assert_malformed
- (module quote
- "(data\"a\")"
- )
- "unknown operator"
-)
-
-(module
- (data $l "a")
-)
-(assert_malformed
- (module quote
- "(data $l\"a\")"
- )
- "unknown operator"
-)
-
-(module
- (data $l " a")
-)
-(assert_malformed
- (module quote
- "(data $l\" a\")"
- )
- "unknown operator"
-)
-
-(module
- (data $l "a ")
-)
-(assert_malformed
- (module quote
- "(data $l\"a \")"
- )
- "unknown operator"
-)
-
-(module
- (data $l "a " "b")
-)
-(assert_malformed
- (module quote
- "(data $l\"a \"\"b\")"
- )
- "unknown operator"
-)
-
-(module
- (data $l "")
-)
-(assert_malformed
- (module quote
- "(data $l\"\")"
- )
- "unknown operator"
-)
-
-(module
- (data $l " ")
-)
-(assert_malformed
- (module quote
- "(data $l\" \")"
- )
- "unknown operator"
-)
-
-(module
- (data $l " ")
-)
-(assert_malformed
- (module quote
- "(data $l\" \")"
- )
- "unknown operator"
-)
-
-(module
- (data "a" "b")
-)
-(assert_malformed
- (module quote
- "(data \"a\"\"b\")"
- )
- "unknown operator"
-)
-
-(module
- (data "a" " b")
-)
-(assert_malformed
- (module quote
- "(data \"a\"\" b\")"
- )
- "unknown operator"
-)
-
-(module
- (data "a " "b")
-)
-(assert_malformed
- (module quote
- "(data \"a \"\"b\")"
- )
- "unknown operator"
-)
-
-(module
- (data "" "")
-)
-(assert_malformed
- (module quote
- "(data \"\"\"\")"
- )
- "unknown operator"
-)
-
-(module
- (data "" " ")
-)
-(assert_malformed
- (module quote
- "(data \"\"\" \")"
- )
- "unknown operator"
-)
-
-(module
- (data " " "")
-)
-(assert_malformed
- (module quote
- "(data \" \"\"\")"
- )
- "unknown operator"
-)
-
-
-(assert_malformed
- (module quote
- "(func \"a\"x)"
- )
- "unknown operator"
-)
-(assert_malformed
- (module quote
- "(func \"a\"0)"
- )
- "unknown operator"
-)
-(assert_malformed
- (module quote
- "(func 0\"a\")"
- )
- "unknown operator"
-)
-(assert_malformed
- (module quote
- "(func \"a\"$x)"
- )
- "unknown operator"
-)