diff options
-rw-r--r-- | src/s2wasm.h | 23 | ||||
-rw-r--r-- | test/dot_s/basics.s | 6 | ||||
-rw-r--r-- | test/dot_s/basics.wast | 4 |
3 files changed, 24 insertions, 9 deletions
diff --git a/src/s2wasm.h b/src/s2wasm.h index 5f2a0d75d..57d5768b8 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -889,12 +889,17 @@ private: bool zero = true; while (1) { skipWhitespace(); - if (match(".asciz")) { - *raw = getQuoted(); - raw->push_back(0); - zero = false; - } else if (match(".ascii")) { - *raw = getQuoted(); + if (match(".asci")) { + bool z; + if (match("i")) { + z = false; + } else { + mustMatch("z"); + z = true; + } + auto quoted = getQuoted(); + raw->insert(raw->end(), quoted.begin(), quoted.end()); + if (z) raw->push_back(0); zero = false; } else if (match(".zero")) { int32_t size = getInt(); @@ -934,7 +939,11 @@ private: mustMatch(name.str); mustMatch(","); size_t seenSize = atoi(getStr().str); // TODO: optimize - assert(seenSize == size); + assert(seenSize >= size); + while (raw->size() < seenSize) { + raw->push_back(0); + } + size = seenSize; } while (nextStatic % align) nextStatic++; // assign the address, add to memory diff --git a/test/dot_s/basics.s b/test/dot_s/basics.s index b9c3baeed..ad4c5d238 100644 --- a/test/dot_s/basics.s +++ b/test/dot_s/basics.s @@ -58,4 +58,10 @@ func_end0: .asciz "hello, world!\n" .size .str, 15 + .type a2,@object # @a2 + .globl a2 +a2: + .int8 118 # 0x76 + .ascii "cq" + .size a2, 3 # surprisingly large size diff --git a/test/dot_s/basics.wast b/test/dot_s/basics.wast index fa658c8b8..f6fe9c493 100644 --- a/test/dot_s/basics.wast +++ b/test/dot_s/basics.wast @@ -1,5 +1,5 @@ (module - (memory 0 4294967295 (segment 16 "hello, world!\n\00")) + (memory 0 4294967295 (segment 16 "hello, world!\n\00") (segment 32 "vcq")) (import $puts "env" "puts") (export "main" $main) (func $main (param $$0 i32) (param $$1 i32) (result i32) @@ -92,4 +92,4 @@ ) ) ) -;; METADATA: { "asmConsts": {},"staticBump": 30 } +;; METADATA: { "asmConsts": {},"staticBump": 34 } |